uicore-ts 1.1.310 → 1.1.312

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UIView.ts"],
4
- "sourcesContent": ["import { IS_FIREFOX, IS_SAFARI } from \"./ClientCheckers\"\nimport toPx from \"./SizeConverter\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport \"./UICoreExtensions\"\nimport type { UIDialogView } from \"./UIDialogView\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { UILayoutCycleTracer } from \"./UILayoutCycleTracer\"\nimport {\n FIRST,\n FIRST_OR_NIL,\n IF,\n IS,\n IS_DEFINED,\n IS_NIL,\n IS_NOT,\n IS_NOT_LIKE_NULL,\n nil,\n NO,\n RETURNER, UIInitializerObject,\n UIObject,\n YES\n} from \"./UIObject\"\nimport { UIPoint } from \"./UIPoint\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UITextMeasurement } from \"./UITextMeasurement\"\nimport { UIViewController } from \"./UIViewController\"\n\n\ndeclare module AutoLayout {\n \n \n class Constraint {\n \n [key: string]: any\n \n }\n \n \n class View {\n \n [key: string]: any\n \n }\n \n \n class VisualFormat {\n \n static parse(arg0: any, arg1: any): any;\n \n [key: string]: any\n \n }\n \n \n const enum Attribute {\n \n LEFT = 0,\n RIGHT = 1,\n BOTTOM = 2,\n TOP = 3,\n CENTERX = 4,\n CENTERY = 5,\n WIDTH = 6,\n HEIGHT = 7,\n ZINDEX = 8,\n VARIABLE = 9,\n NOTANATTRIBUTE = 10\n \n }\n \n \n const enum Relation {\n \n EQU = 0,\n LEQ = 1,\n GEQ = 2\n \n }\n \n \n}\n\n// @ts-ignore\nif (!window.AutoLayout) {\n \n // @ts-ignore\n window.AutoLayout = nil\n \n}\n\n\ndeclare global {\n \n interface HTMLElement {\n \n UIViewObject?: UIView;\n \n }\n \n}\n\n\nexport interface LooseObject {\n [key: string]: any\n}\n\n\nexport interface ControlEventTargetsObject {\n \n [key: string]: Function[];\n \n}\n\n\nexport interface UIViewBroadcastEvent {\n \n name: string;\n parameters?: {\n [key: string]: string | string[];\n }\n \n}\n\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P]\n};\n\ntype ColorStyleProxy = {\n [K in keyof CSSStyleDeclaration as K extends string\n ? (Lowercase<K> extends `${string}color${string}` ? K : never)\n : never]?: UIColor\n}\n\nexport type UIViewAddControlEventTargetObject<T extends { controlEvent: Record<string, any> }> = Mutable<{\n \n -readonly [K in keyof T[\"controlEvent\"]]: ((\n sender: UIView,\n event: Event\n) => void) & Partial<UIViewAddControlEventTargetObject<T>>\n\n}>\n\n\ninterface Constraint {\n constant: number;\n multiplier: number;\n view1: any;\n attr2: any;\n priority: number;\n attr1: any;\n view2: any;\n relation: any\n}\n\n\nexport interface IUILoadingView extends UIView {\n theme: \"light\" | \"dark\";\n // Add any other specific methods you need to call from UIView\n}\n\n\n/**\n * A template literal tag to enable CSS highlighting in IDEs.\n * Example: css` .myClass { color: red; } `\n */\nexport function css(strings: TemplateStringsArray, ...values: any[]): string {\n // Simply combine the strings and values to return a valid CSS string\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? \"\"), \"\")\n}\n\n\nexport function UIComponentView(target: Function, context: ClassDecoratorContext) {\n console.log(\"Recording annotation UIComponentView on \" + target.name)\n UIObject.recordAnnotation(UIComponentView, target)\n}\n\n\nexport class UIView extends UIObject {\n \n \n _nativeSelectionEnabled: boolean = YES\n _shouldLayout?: boolean\n _UITableViewRowIndex?: number\n _UITableViewReusabilityIdentifier: any\n _UIViewIntrinsicTemporaryWidth?: string\n _UIViewIntrinsicTemporaryHeight?: string\n _enabled: boolean = YES\n _frame?: UIRectangle & { zIndex?: number }\n _frameCache?: UIRectangle\n _backgroundColor: UIColor = nil\n _colorStyleProxy?: ColorStyleProxy\n _liveCSSValues: Map<string, { keys: string[], producer: () => string }> = new Map()\n _liveCSSCallback: () => void = () => {\n for (const [property, { producer }] of this._liveCSSValues) {\n (this.style as any)[property] = producer()\n }\n }\n \n _overlayView?: UIView\n get overlayView(): UIView | undefined {\n return this._overlayView\n }\n \n set overlayView(view: UIView) {\n if (IS(view)) {\n this.addSubview(view)\n }\n else {\n this._overlayView?.removeFromSuperview()\n }\n this._overlayView = view\n \n }\n \n _viewHTMLElement!: HTMLElement & LooseObject\n \n // Dynamic innerHTML\n _innerHTMLKey?: string\n _defaultInnerHTML?: string\n _parameters?: { [x: string]: (string | UILocalizedTextObject) }\n \n _localizedTextObject?: UILocalizedTextObject\n \n _controlEventTargets: ControlEventTargetsObject = {} //{ \"PointerDown\": Function[]; \"PointerMove\": Function[];\n // \"PointerLeave\": Function[]; \"PointerEnter\": Function[];\n // \"PointerUpInside\": Function[]; \"PointerUp\": Function[];\n // \"PointerHover\": Function[]; };\n _broadcastEventTargets: { [eventName: string]: ((event: UIViewBroadcastEvent) => void)[] } = {}\n _ongoingControlEventHandlers: { _controlEventKey: string }[] = []\n _frameTransform: string\n viewController?: UIViewController\n _updateLayoutFunction?: Function\n // @ts-ignore\n _constraints: any[] //AutoLayout.Constraint[];\n superview?: UIView\n subviews: UIView[] = []\n _styleClasses: any[]\n _isHidden: boolean = NO\n \n pausesPointerEvents: boolean = NO\n stopsPointerEventPropagation: boolean = YES\n pointerDraggingPoint: UIPoint = new UIPoint(0, 0)\n _previousClientPoint: UIPoint = new UIPoint(0, 0)\n _isPointerInside?: boolean\n _isPointerValid?: boolean\n _isPointerValidForMovement?: boolean\n _isPointerDown = NO\n _initialPointerPosition?: UIPoint\n _hasPointerDragged?: boolean\n _pointerDragThreshold = 2\n \n ignoresTouches: boolean = NO\n ignoresMouse: boolean = NO\n \n core: UICore = UICore.main\n \n static _UIViewIndex: number = -1\n _UIViewIndex: number\n \n static _viewsToLayout: UIView[] = []\n \n forceIntrinsicSizeZero: boolean = NO\n _touchEventTime?: number\n \n static _pageScale = 1\n _scale: number = 1\n isInternalScaling: boolean = YES\n // When the page's fonts finish loading the browser's glyph metrics change,\n // making all previously cached text measurements stale. We hook the native\n // FontFaceSet.ready promise once at class-load time. When it fires we:\n // 1. Clear all UITextMeasurement style caches (stale fallback-font metrics)\n // 2. Clear every view's intrinsic size cache and frame cache\n // 3. Force a full re-layout, mirroring what the window resize handler does\n // document.fonts.ready resolves once all fonts have loaded, but the browser\n // may not yet have applied the new glyphs to rendered elements at that point.\n // A requestAnimationFrame defers the cache-bust and re-layout by one paint\n // cycle, ensuring getComputedStyle and the canvas measurer see real metrics.\n static _fontReadyHook = (() => {\n document.fonts.ready.then(() => {\n requestAnimationFrame(() => {\n UITextMeasurement.clearCaches()\n const rootView = UICore.main?.rootViewController?.view\n if (!rootView) {\n return\n }\n rootView.forEachViewInSubtree(view => {\n view.clearIntrinsicSizeCache()\n view._frameCache = undefined\n view.documentFontsDidLoad()\n view.setNeedsLayout()\n })\n UIView.layoutViewsIfNeeded()\n })\n })\n return YES\n })()\n \n static resizeObserver = new ResizeObserver((entries, observer) => {\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n // @ts-ignore\n const view: UIView = entry.target.UIView\n view?.didResize?.(entry)\n }\n })\n \n private _isMovable = NO\n makeNotMovable?: () => void\n \n private _isResizable = NO\n makeNotResizable?: () => void\n resizingHandles: UIView[] = []\n \n public static LoadingViewClass: new () => IUILoadingView\n private _loadingView?: IUILoadingView\n \n public set loading(isLoading: boolean) {\n this.userInteractionEnabled = !isLoading\n if (isLoading) {\n if (!IS(this._loadingView)) {\n if (UIView.LoadingViewClass) {\n this._loadingView = new UIView.LoadingViewClass()\n }\n else {\n console.warn(\"UILoadingView class not registered yet.\")\n return\n }\n }\n \n // Add to superview if not already added\n if (this._loadingView.superview != this) {\n this.addSubview(this._loadingView)\n // Ensure it sits above other content\n this._loadingView.style.zIndex = \"1000\"\n }\n \n // Force an immediate layout update to position the overlay\n // this._loadingView.setFrame(this.bounds)\n \n }\n else {\n this._loadingView?.removeFromSuperview()\n }\n }\n \n public get loading(): boolean {\n return IS(this._loadingView) && IS(this._loadingView.superview)\n }\n \n \n private _isMoving: boolean = NO\n _isCBEditorTemporaryResizable = NO\n _isCBEditorTemporaryMovable = NO\n static _onWindowTouchMove: (event: TouchEvent) => void = nil\n static _onWindowMouseMove: (event: MouseEvent) => void = nil\n static _onWindowMouseup: (event: MouseEvent) => void = nil\n private _resizeObserverEntry?: ResizeObserverEntry\n protected _intrinsicSizesCache: Record<string, UIRectangle> = {}\n \n /** When set, this view reads and writes its intrinsic size cache entries from the\n * static shared map keyed by this identifier rather than from its own per-instance\n * cache. All views that share the same identifier share the same cached sizes, so\n * only the first measurement in a group is ever computed.\n *\n * Invalidate with UIView.invalidateSharedIntrinsicSizeCache(identifier). */\n sharedIntrinsicSizeCacheIdentifier?: string\n \n /** Static shared intrinsic size cache, keyed by sharedIntrinsicSizeCacheIdentifier.\n * Each bucket mirrors the per-instance _intrinsicSizesCache format. */\n static _sharedIntrinsicSizeCaches: Map<string, Record<string, UIRectangle>> = new Map()\n \n static invalidateSharedIntrinsicSizeCache(identifier: string): void {\n UIView._sharedIntrinsicSizeCaches.delete(identifier)\n }\n \n static invalidateAllSharedIntrinsicSizeCaches(): void {\n UIView._sharedIntrinsicSizeCaches.clear()\n }\n \n private static _virtualLayoutingDepth = 0\n \n static get isVirtualLayouting(): boolean {\n return this._virtualLayoutingDepth > 0\n }\n \n get isVirtualLayouting(): boolean {\n return UIView._virtualLayoutingDepth > 0\n }\n \n startVirtualLayout() {\n UIView._virtualLayoutingDepth = UIView._virtualLayoutingDepth + 1\n }\n \n finishVirtualLayout() {\n if (UIView._virtualLayoutingDepth === 0) {\n throw new Error(\"Unbalanced finishVirtualLayout()\")\n }\n UIView._virtualLayoutingDepth = UIView._virtualLayoutingDepth - 1\n }\n \n _frameForVirtualLayouting?: UIRectangle\n _frameCacheForVirtualLayouting?: UIRectangle\n \n // Change this to no if the view contains pure HTML content that does not\n // use frame logic that can influence the intrinsic size\n usesVirtualLayoutingForIntrinsicSizing = YES\n \n _contentInsets = { top: 0, left: 0, bottom: 0, right: 0 }\n \n get contentInsets() {\n return this._contentInsets\n }\n \n set contentInsets(insets: { left: number, right: number, bottom: number, top: number }) {\n this._contentInsets = insets\n this.setNeedsLayout()\n }\n \n \n constructor(\n elementID: string = (\"UIView\" + UIView.nextIndex),\n viewHTMLElement: HTMLElement & LooseObject | null = null,\n elementType: string | null = null,\n preInitConfiguratorObject?: any\n ) {\n \n super()\n \n this.configureWithObject(preInitConfiguratorObject)\n \n // Instance variables\n \n UIView._UIViewIndex = UIView.nextIndex\n this._UIViewIndex = UIView._UIViewIndex\n \n this._styleClasses = []\n \n this._initViewHTMLElement(elementID, viewHTMLElement, elementType)\n \n this._constraints = []\n \n this._frameTransform = \"\"\n \n this._initViewCSSSelectorsIfNeeded()\n \n this._loadUIEvents()\n this.setNeedsLayout()\n \n }\n \n static get nextIndex() {\n return UIView._UIViewIndex + 1\n }\n \n \n // static get pageHeight() {\n // const body = document.body\n // const html = document.documentElement\n // return Math.max(\n // body.scrollHeight,\n // body.offsetHeight,\n // html.clientHeight,\n // html.scrollHeight,\n // html.offsetHeight\n // )\n // }\n //\n // static get pageWidth() {\n // const body = document.body\n // const html = document.documentElement\n // return Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth)\n // }\n \n //#region Static Properties - Page Dimensions Cache\n \n private static _cachedPageWidth: number | undefined\n private static _cachedPageHeight: number | undefined\n private static _pageDimensionsCacheValid = false\n private static _resizeObserverInitialized = false\n \n //#endregion\n \n //#region Static Methods - Page Dimensions\n \n /**\n * Initialize resize observer to invalidate cache when page dimensions change.\n * This is called lazily on first access.\n */\n private static _initializePageDimensionsCacheIfNeeded() {\n if (this._resizeObserverInitialized) {\n return\n }\n \n this._resizeObserverInitialized = true\n \n // Invalidate cache on window resize\n window.addEventListener(\"resize\", () => {\n this._pageDimensionsCacheValid = false\n }, { passive: true })\n \n // Observe document.body for mutations that might affect dimensions\n const bodyObserver = new ResizeObserver(() => {\n this._pageDimensionsCacheValid = false\n })\n \n // Start observing once body is available\n if (document.body) {\n bodyObserver.observe(document.body)\n }\n else {\n // Wait for DOMContentLoaded if body isn't ready yet\n document.addEventListener(\"DOMContentLoaded\", () => {\n bodyObserver.observe(document.body)\n }, { once: true })\n }\n \n // Also invalidate on DOM mutations that might add/remove content\n const mutationObserver = new MutationObserver(() => {\n this._pageDimensionsCacheValid = false\n })\n \n const observeMutations = () => {\n mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\"style\", \"class\"]\n })\n }\n \n if (document.body) {\n observeMutations()\n }\n else {\n document.addEventListener(\"DOMContentLoaded\", observeMutations, { once: true })\n }\n }\n \n /**\n * Compute and cache page dimensions.\n * Only triggers reflow when cache is invalid.\n */\n private static _updatePageDimensionsCacheIfNeeded() {\n if (this._pageDimensionsCacheValid &&\n this._cachedPageWidth !== undefined &&\n this._cachedPageHeight !== undefined) {\n return\n }\n \n const body = document.body\n const html = document.documentElement\n \n // Compute both at once to minimize reflows\n this._cachedPageWidth = Math.max(\n body.scrollWidth,\n body.offsetWidth,\n html.clientWidth,\n html.scrollWidth,\n html.offsetWidth\n )\n \n this._cachedPageHeight = Math.max(\n body.scrollHeight,\n body.offsetHeight,\n html.clientHeight,\n html.scrollHeight,\n html.offsetHeight\n )\n \n this._pageDimensionsCacheValid = true\n }\n \n static get pageWidth() {\n this._initializePageDimensionsCacheIfNeeded()\n this._updatePageDimensionsCacheIfNeeded()\n return this._cachedPageWidth!\n }\n \n static get pageHeight() {\n this._initializePageDimensionsCacheIfNeeded()\n this._updatePageDimensionsCacheIfNeeded()\n return this._cachedPageHeight!\n }\n \n /**\n * Manually invalidate the page dimensions cache.\n * Useful if you know dimensions changed and want to force a recalculation.\n */\n static invalidatePageDimensionsCache() {\n this._pageDimensionsCacheValid = false\n }\n \n //#endregion\n \n \n centerInContainer() {\n this.style.left = \"50%\"\n this.style.top = \"50%\"\n this.style.transform = \"translateX(-50%) translateY(-50%)\"\n }\n \n \n centerXInContainer() {\n this.style.left = \"50%\"\n this.style.transform = \"translateX(-50%)\"\n }\n \n \n centerYInContainer() {\n this.style.top = \"50%\"\n this.style.transform = \"translateY(-50%)\"\n }\n \n \n _initViewHTMLElement(\n elementID: string,\n viewHTMLElement: (HTMLElement & LooseObject) | null,\n elementType?: string | null\n ) {\n \n if (!IS(elementType)) {\n elementType = \"div\"\n }\n \n if (!IS(viewHTMLElement)) {\n \n this._viewHTMLElement = this.createElement(elementID, elementType)\n \n this.style.position = \"absolute\"\n this.style.margin = \"0\"\n \n }\n else {\n \n this._viewHTMLElement = viewHTMLElement\n \n }\n \n if (IS(elementID)) {\n this.viewHTMLElement.id = elementID\n }\n \n this.viewHTMLElement.obeyAutolayout = YES\n this.viewHTMLElement.UIViewObject = this\n this.addStyleClass(this.styleClassName)\n \n }\n \n \n set nativeSelectionEnabled(selectable: boolean) {\n this._nativeSelectionEnabled = selectable\n if (!selectable) {\n this.style.cssText = this.style.cssText +\n \" -webkit-touch-callout: none; -webkit-user-select: none; \" +\n \"-khtml-user-select: none; -moz-user-select: none; \" +\n \"-ms-user-select: none; user-select: none;\"\n }\n else {\n this.style.cssText = this.style.cssText +\n \" -webkit-touch-callout: text; -webkit-user-select: text; \" +\n \"-khtml-user-select: text; -moz-user-select: text; \" +\n \"-ms-user-select: text; user-select: text;\"\n }\n }\n \n get nativeSelectionEnabled() {\n return this._nativeSelectionEnabled\n }\n \n get styleClassName() {\n return \"UICore_UIView_\" + this.class.name\n }\n \n protected _initViewCSSSelectorsIfNeeded() {\n if (!this.class._areViewCSSSelectorsInitialized) {\n this.initViewStyleSelectors()\n this.class._areViewCSSSelectorsInitialized = YES\n }\n }\n \n \n initViewStyleSelectors() {\n \n // Override this in a subclass\n \n }\n \n initStyleSelector(selector: string, style: string) {\n const styleRules = UIView.getStyleRules(selector)\n if (!styleRules) {\n UIView.createStyleSelector(selector, style)\n }\n }\n \n createElement(elementID: string, elementType: string) {\n let result = document.getElementById(elementID)\n if (!result) {\n result = document.createElement(elementType)\n }\n return result\n }\n \n \n public get viewHTMLElement() {\n return this._viewHTMLElement\n }\n \n \n public get elementID() {\n return this.viewHTMLElement.id\n }\n \n setInnerHTML(key: string, defaultString: string, parameters?: { [x: string]: string | UILocalizedTextObject }) {\n \n this._innerHTMLKey = key\n this._defaultInnerHTML = defaultString\n this._parameters = parameters\n \n const languageName = UICore.languageService.currentLanguageKey\n const result = UICore.languageService.stringForKey(key, languageName, defaultString, parameters)\n \n this.innerHTML = result ?? \"\"\n \n }\n \n \n protected _setInnerHTMLFromKeyIfPossible() {\n if (this._innerHTMLKey && this._defaultInnerHTML) {\n this.setInnerHTML(this._innerHTMLKey, this._defaultInnerHTML, this._parameters)\n }\n }\n \n protected _setInnerHTMLFromLocalizedTextObjectIfPossible() {\n if (IS(this._localizedTextObject)) {\n this.innerHTML = UICore.languageService.stringForCurrentLanguage(this._localizedTextObject)\n }\n }\n \n \n get localizedTextObject() {\n return this._localizedTextObject\n }\n \n \n set localizedTextObject(localizedTextObject: UILocalizedTextObject | undefined) {\n this._localizedTextObject = localizedTextObject\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n \n get innerHTML() {\n return this.viewHTMLElement.innerHTML\n }\n \n set innerHTML(innerHTML) {\n if (this.innerHTML != innerHTML) {\n this.viewHTMLElement.innerHTML = FIRST(innerHTML, \"\")\n }\n }\n \n \n set hoverText(hoverText: string | undefined | null) {\n if (IS_NOT_LIKE_NULL(hoverText)) {\n this.viewHTMLElement.setAttribute(\"title\", hoverText)\n }\n else {\n this.viewHTMLElement.removeAttribute(\"title\")\n }\n }\n \n get hoverText() {\n return this.viewHTMLElement.getAttribute(\"title\")\n }\n \n \n get scrollSize() {\n return new UIRectangle(0, 0, this.viewHTMLElement.scrollHeight, this.viewHTMLElement.scrollWidth)\n }\n \n \n get dialogView(): UIDialogView | undefined {\n if (!IS(this.superview)) {\n return\n }\n if (!((this as any)[\"_isAUIDialogView\"])) {\n return this.superview.dialogView\n }\n return this as any as UIDialogView\n }\n \n get rootView(): UIView {\n if (IS(this.superview)) {\n return this.superview.rootView\n }\n return this\n }\n \n public set enabled(enabled: boolean) {\n this._enabled = enabled\n this.updateContentForCurrentEnabledState()\n }\n \n \n public get enabled(): boolean {\n return this._enabled\n }\n \n updateContentForCurrentEnabledState() {\n this.hidden = !this.enabled\n this.userInteractionEnabled = this.enabled\n }\n \n \n public get tabIndex(): number {\n return Number(this.viewHTMLElement.getAttribute(\"tabindex\"))\n }\n \n \n public set tabIndex(index: number) {\n this.viewHTMLElement.setAttribute(\"tabindex\", \"\" + index)\n }\n \n \n get propertyDescriptors(): { object: UIObject; name: string }[] {\n \n let result: any[] = []\n \n function isPlainObject(value: any): value is object {\n return value instanceof Object && Object.getPrototypeOf(value) === Object.prototype\n }\n \n function isAnArray(value: any): value is any[] {\n return value instanceof Array && Object.getPrototypeOf(value) === Array.prototype\n }\n \n this.withAllSuperviews.forEach(view => {\n \n const descriptorFromObject = function (\n this: UIView,\n object?: object,\n pathRootObject: object = object!,\n existingPathComponents: string[] = [],\n lookInArrays = YES,\n depthLeft = 5\n ): {\n subObjects: { object: object; key: string }[];\n descriptor: { name: string; object: object } | undefined\n } {\n \n let resultDescriptor: { name: string; object: object } | undefined\n const subObjects: { object: object, key: string }[] = []\n const subArrays: { array: any[], key: string }[] = []\n \n FIRST_OR_NIL(object).forEach((value, key, stopLooping) => {\n \n if (this == value) {\n \n existingPathComponents.push(key)\n \n resultDescriptor = { object: pathRootObject!, name: existingPathComponents.join(\".\") }\n stopLooping()\n return\n \n }\n \n \n if (\n isPlainObject(value) &&\n !_UIViewPropertyKeys.contains(key) &&\n !_UIViewControllerPropertyKeys.contains(key)\n ) {\n subObjects.push({ object: value, key: key })\n }\n if (\n lookInArrays &&\n isAnArray(value) &&\n !_UIViewPropertyKeys.contains(key) &&\n !_UIViewControllerPropertyKeys.contains(key)\n ) {\n subArrays.push({ array: value, key: key })\n }\n \n })\n \n if (!resultDescriptor && lookInArrays) {\n \n subArrays.copy().forEach(value => {\n \n if (value.key.startsWith(\"_\")) {\n \n subArrays.removeElement(value)\n subArrays.push(value)\n \n }\n \n })\n \n subArrays.find(arrayObject =>\n arrayObject.array.find((value, index) => {\n if (this == value) {\n existingPathComponents.push(arrayObject.key + \".\" + index)\n resultDescriptor = { object: pathRootObject!, name: existingPathComponents.join(\".\") }\n return YES\n }\n return NO\n })\n )\n \n }\n \n // if (!resultDescriptor && depthLeft) {\n //\n // // @ts-ignore\n // resultDescriptor = subObjects.find(object => descriptorFromObject(\n // object,\n // pathRootObject,\n // existingPathComponents,\n // NO,\n // depthLeft - 1\n // ))\n //\n // }\n \n if (resultDescriptor?.object?.constructor?.name == \"Object\") {\n \n var asd = 1\n \n }\n \n const result = {\n descriptor: resultDescriptor,\n subObjects: subObjects\n }\n \n return result\n \n }.bind(this)\n \n const viewControllerResult = descriptorFromObject(view.viewController)\n \n if (viewControllerResult?.descriptor) {\n \n result.push(viewControllerResult.descriptor)\n \n }\n \n const viewResult = descriptorFromObject(view)\n \n if (viewResult?.descriptor) {\n \n result.push(viewResult.descriptor)\n \n }\n else if (this.superview && this.superview == view) {\n \n result.push({ object: view, key: \"subviews.\" + view.subviews.indexOf(this) })\n \n }\n \n \n // view.forEach((value, key, stopLooping) => {\n //\n // if (this == value) {\n //\n // result.push({ object: view, name: key })\n //\n // stopLooping()\n //\n // }\n //\n // })\n \n \n })\n \n return result\n \n }\n \n get styleClasses() {\n return this._styleClasses\n }\n \n set styleClasses(styleClasses) {\n this._styleClasses = styleClasses\n }\n \n hasStyleClass(styleClass: string) {\n \n // This is for performance reasons\n if (!IS(styleClass)) {\n return NO\n }\n \n const index = this.styleClasses.indexOf(styleClass)\n if (index > -1) {\n return YES\n }\n return NO\n \n }\n \n \n addStyleClass(styleClass: string) {\n \n if (!IS(styleClass)) {\n return\n }\n \n if (!this.hasStyleClass(styleClass)) {\n this._styleClasses.push(styleClass)\n }\n \n }\n \n \n removeStyleClass(styleClass: string) {\n \n // This is for performance reasons\n if (!IS(styleClass)) {\n return\n }\n \n const index = this.styleClasses.indexOf(styleClass)\n if (index > -1) {\n this.styleClasses.splice(index, 1)\n }\n \n }\n \n \n static findViewWithElementID(elementID: string): UIView | undefined {\n const viewHTMLElement = document.getElementById(elementID)\n if (IS_NOT(viewHTMLElement)) {\n return\n }\n // @ts-ignore\n return viewHTMLElement.UIView\n }\n \n \n static injectCSS(cssText: string, id?: string) {\n if (id) {\n const existing = document.getElementById(id) as HTMLStyleElement | null\n if (existing) {\n if (existing.textContent !== cssText) {\n existing.textContent = cssText\n }\n return\n }\n }\n \n const style = document.createElement(\"style\")\n if (id) {\n style.id = id\n }\n \n style.textContent = cssText\n document.head.appendChild(style)\n }\n \n static createStyleSelector(selector: string, style: string) {\n this.injectCSS(selector + \" { \" + style + \" }\")\n }\n \n static getStyleRules(selector: string) {\n \n // https://stackoverflow.com/questions/324486/how-do-you-read-css-rule-values-with-javascript\n //Inside closure so that the inner functions don't need regeneration on every call.\n const getCssClasses = (function () {\n function normalize(str: string) {\n if (!str) {\n return \"\"\n }\n str = String(str).replace(/\\s*([>~+])\\s*/g, \" $1 \") //Normalize symbol spacing.\n return str.replace(/(\\s+)/g, \" \").trim() //Normalize whitespace\n }\n \n function split(str: string, on: string) { //Split, Trim, and remove empty elements\n return str.split(on).map(x => x.trim()).filter(x => x)\n }\n \n function containsAny(selText: string | any[], ors: any[]) {\n return selText ? ors.some(x => selText.indexOf(x) >= 0) : false\n }\n \n return function (selector: string) {\n const logicalORs = split(normalize(selector), \",\")\n const sheets = Array.from(window.document.styleSheets)\n const ruleArrays = sheets.map((x) => Array.from(x.rules || x.cssRules || []))\n const allRules = ruleArrays.reduce((all, x) => all.concat(x), [])\n // @ts-ignore\n return allRules.filter((x) => containsAny(normalize(x.selectorText), logicalORs))\n }\n })()\n \n return getCssClasses(selector)\n \n // selector = selector.toLowerCase()\n // let styleRules\n // for (let i = 0; i < document.styleSheets.length; i++) {\n // const styleSheet = document.styleSheets[i] as any\n //\n // try {\n //\n // styleRules = styleSheet.cssRules ? styleSheet.cssRules : styleSheet.rules\n //\n // } catch (error) {\n //\n // console.log(error)\n //\n // }\n //\n // }\n //\n // return styleRules\n \n }\n \n get style() {\n return this.viewHTMLElement.style\n }\n \n \n get computedStyle() {\n return getComputedStyle(this.viewHTMLElement)\n }\n \n public get hidden(): boolean {\n return this._isHidden\n }\n \n public set hidden(v: boolean) {\n \n this._isHidden = v\n \n if (this._isHidden) {\n this.style.visibility = \"hidden\"\n }\n else {\n this.style.visibility = \"visible\"\n }\n \n \n }\n \n \n static set pageScale(scale: number) {\n \n UIView._pageScale = scale\n \n const zoom = scale\n const width = 100 / zoom\n const viewHTMLElement = UICore.main.rootViewController.view.viewHTMLElement\n viewHTMLElement.style.transformOrigin = \"left top\"\n viewHTMLElement.style.transform = \"scale(\" + zoom + \")\"\n viewHTMLElement.style.width = width + \"%\"\n \n }\n \n static get pageScale() {\n return UIView._pageScale\n }\n \n \n set scale(scale: number) {\n \n this._scale = scale\n \n const zoom = scale\n // const width = 100 / zoom\n // const height = 100 / zoom\n const viewHTMLElement = this.viewHTMLElement\n viewHTMLElement.style.transformOrigin = \"left top\"\n viewHTMLElement.style.transform = viewHTMLElement.style.transform.replace(\n (viewHTMLElement.style.transform.match(\n new RegExp(\"scale\\\\(.*\\\\)\", \"g\")\n )?.firstElement ?? \"\"),\n \"\"\n ) + \"scale(\" + zoom + \")\"\n // viewHTMLElement.style.width = width + \"%\"\n // viewHTMLElement.style.height = height + \"%\"\n \n if (this.isInternalScaling) {\n \n this.setFrame(this.frame, this.frame.zIndex, YES)\n \n }\n \n }\n \n get scale() {\n \n return this._scale\n \n }\n \n // Use this method to calculate the frame for the view itself\n // This can be used when adding subviews to existing views like buttons\n calculateAndSetViewFrame() {\n \n }\n \n \n public get frame() {\n let result: UIRectangle & { zIndex?: number }\n if (!this.isVirtualLayouting) {\n result = this._frame?.copy() as any\n }\n else {\n result = this._frameForVirtualLayouting?.copy() as any\n }\n if (!result) {\n result = new UIRectangle(\n this._resizeObserverEntry?.contentRect.left ?? this.viewHTMLElement.offsetLeft,\n this._resizeObserverEntry?.contentRect.top ?? this.viewHTMLElement.offsetTop,\n this._resizeObserverEntry?.contentRect.height ?? this.viewHTMLElement.offsetHeight,\n this._resizeObserverEntry?.contentRect.width ?? this.viewHTMLElement.offsetWidth\n ) as any\n result.zIndex = 0\n }\n return result\n }\n \n public set frame(rectangle: UIRectangle & { zIndex?: number }) {\n if (IS(rectangle)) {\n this.setFrame(rectangle, rectangle.zIndex)\n }\n }\n \n // If YES, then the view is not counted in intrinsic content size calculation.\n // This should be used for things like background views that just take the shape of the parent view.\n hasWeakFrame = NO\n \n // Set view as having a weak frame and set the frame.\n public set weakFrame(rectangle: UIRectangle & { zIndex?: number }) {\n this.hasWeakFrame = YES\n this.frame = rectangle\n }\n \n // Set view as having a strong frame and set the frame.\n public set strongFrame(rectangle: UIRectangle & { zIndex?: number }) {\n this.hasWeakFrame = NO\n this.frame = rectangle\n }\n \n \n setFrame(rectangle: UIRectangle & { zIndex?: number }, zIndex = 0, performUncheckedLayout = NO) {\n \n const frame: (UIRectangle & { zIndex?: number }) = this._frame || new UIRectangle(nil, nil, nil, nil) as any\n \n if (!rectangle) {\n return\n }\n \n rectangle.materialize()\n \n if (zIndex != undefined) {\n rectangle.zIndex = zIndex\n }\n if (!this.isVirtualLayouting) {\n this._frame = rectangle\n }\n else {\n this._frameForVirtualLayouting = rectangle\n }\n \n if (frame && frame != nil && frame.isEqualTo(\n rectangle) && frame.zIndex == rectangle.zIndex && !performUncheckedLayout) {\n return\n }\n \n if (this.isInternalScaling) {\n rectangle.scale(1 / this.scale)\n }\n \n if (!this.isVirtualLayouting) {\n UIView._setAbsoluteSizeAndPosition(\n this.viewHTMLElement,\n rectangle.topLeft.x,\n rectangle.topLeft.y,\n rectangle.width,\n rectangle.height,\n rectangle.zIndex,\n this.frameTransform\n )\n }\n \n const haveBoundsChanged = (frame.height.integerValue != rectangle.height.integerValue) ||\n (frame.width.integerValue != rectangle.width.integerValue)\n if (haveBoundsChanged || performUncheckedLayout) {\n this.setNeedsLayout()\n this.boundsDidChange(this.bounds)\n }\n \n }\n \n get bounds() {\n \n let _frame: (UIRectangle & { zIndex?: number }) | undefined\n if (!this.isVirtualLayouting) {\n _frame = this._frame\n }\n else {\n _frame = this._frameForVirtualLayouting\n }\n \n let result: UIRectangle\n if (IS_NOT(_frame)) {\n let cachedFrame: UIRectangle | undefined\n if (!this.isVirtualLayouting) {\n cachedFrame = this._frameCache\n }\n else {\n cachedFrame = this._frameCacheForVirtualLayouting\n }\n result = cachedFrame ?? new UIRectangle(\n 0,\n 0,\n this._resizeObserverEntry?.contentRect.height ?? this.viewHTMLElement.offsetHeight,\n this._resizeObserverEntry?.contentRect.width ?? this.viewHTMLElement.offsetWidth\n )\n if (!this.isVirtualLayouting && this.isMemberOfViewTree && this.viewHTMLElement.isConnected) {\n this._frameCache = result\n }\n else if (this.isMemberOfViewTree && this.viewHTMLElement.isConnected) {\n this._frameCacheForVirtualLayouting = result\n }\n \n }\n else {\n let frame: (UIRectangle & { zIndex?: number })\n if (!this.isVirtualLayouting) {\n frame = this.frame\n }\n else {\n frame = this._frameForVirtualLayouting ?? this.frame\n }\n result = frame.copy()\n result.x = 0\n result.y = 0\n }\n \n result.minHeight = 0\n result.minWidth = 0\n \n return result\n }\n \n \n set bounds(rectangle: UIRectangle) {\n const frame = this.frame\n const newFrame = new UIRectangle(frame.topLeft.x, frame.topLeft.y, rectangle.height, rectangle.width)\n // @ts-ignore\n newFrame.zIndex = frame.zIndex\n this.frame = newFrame\n }\n \n boundsDidChange(bounds: UIRectangle) {\n \n \n }\n \n didResize(entry: ResizeObserverEntry) {\n \n this._resizeObserverEntry = entry\n this._frameCache = undefined\n this._frameCacheForVirtualLayouting = undefined\n this.setNeedsLayout()\n \n this.boundsDidChange(new UIRectangle(0, 0, entry.contentRect.height, entry.contentRect.width))\n \n }\n \n get frameTransform(): string {\n return this._frameTransform\n }\n \n set frameTransform(value: string) {\n \n this._frameTransform = value\n \n this.setFrame(this.frame, this.frame.zIndex, YES)\n \n }\n \n setPosition(\n left: number | string = nil,\n right: number | string = nil,\n bottom: number | string = nil,\n top: number | string = nil,\n height: number | string = nil,\n width: number | string = nil\n ) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"left\", left)\n this.setStyleProperty(\"right\", right)\n this.setStyleProperty(\"bottom\", bottom)\n this.setStyleProperty(\"top\", top)\n this.setStyleProperty(\"height\", height)\n this.setStyleProperty(\"width\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n setSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"height\", height)\n this.setStyleProperty(\"width\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n setMinSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"minHeight\", height)\n this.setStyleProperty(\"minWidth\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n setMaxSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"maxHeight\", height)\n this.setStyleProperty(\"maxWidth\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n setMargin(margin?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"margin\", margin)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n setMargins(left?: number | string, right?: number | string, bottom?: number | string, top?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"marginLeft\", left)\n this.setStyleProperty(\"marginRight\", right)\n this.setStyleProperty(\"marginBottom\", bottom)\n this.setStyleProperty(\"marginTop\", top)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n \n setPadding(padding?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"padding\", padding)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n \n setPaddings(left?: number | string, right?: number | string, bottom?: number | string, top?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"paddingLeft\", left)\n this.setStyleProperty(\"paddingRight\", right)\n this.setStyleProperty(\"paddingBottom\", bottom)\n this.setStyleProperty(\"paddingTop\", top)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n \n setBorder(\n radius: number | string = nil,\n width: number | string = 1,\n color: UIColor = UIColor.blackColor,\n style: string = \"solid\"\n ) {\n \n this.setStyleProperty(\"borderStyle\", style)\n \n this.setStyleProperty(\"borderRadius\", radius)\n \n this.colorStyleProxy.borderColor = color\n \n this.setStyleProperty(\"borderWidth\", width)\n \n }\n \n setStyleProperty(propertyName: string, value?: number | string) {\n \n try {\n \n if (IS_NIL(value)) {\n return\n }\n if (IS_DEFINED(value) && (value as Number).isANumber) {\n value = \"\" + (value as number).integerValue + \"px\"\n }\n \n // @ts-ignore\n this.style[propertyName] = value\n \n }\n catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n \n get userInteractionEnabled() {\n return (this.style.pointerEvents != \"none\")\n }\n \n set userInteractionEnabled(userInteractionEnabled) {\n if (userInteractionEnabled) {\n this.style.pointerEvents = \"\"\n }\n else {\n this.style.pointerEvents = \"none\"\n }\n }\n \n \n get backgroundColor() {\n return this._backgroundColor\n }\n \n set backgroundColor(backgroundColor: UIColor) {\n const previous = this._backgroundColor\n if (previous === backgroundColor) {\n return\n }\n if (\n previous?.semanticKey &&\n previous.semanticKey === backgroundColor?.semanticKey &&\n previous._semanticClass === backgroundColor?._semanticClass\n ) {\n return\n }\n if (!previous?.semanticKey && !backgroundColor?.semanticKey &&\n previous?.stringValue === backgroundColor?.stringValue) {\n return\n }\n this._backgroundColor = backgroundColor\n this.colorStyleProxy.backgroundColor = backgroundColor\n }\n \n get colorStyleProxy(): ColorStyleProxy {\n if (!this._colorStyleProxy) {\n const element = this._viewHTMLElement\n this._colorStyleProxy = new Proxy(element.style, {\n set: (target, property, value: UIColor) => {\n \n const registrationKey = `${this._UIViewIndex}_${property as string}`\n \n const previousColor = UIColor._registrationMap.get(registrationKey)\n if (previousColor) {\n previousColor._elementRef = undefined\n previousColor._styleProperty = undefined\n }\n \n value._elementRef = element\n value._styleProperty = property as string\n \n if (value.semanticKey) {\n UIColor._liveColors.push(new WeakRef(value))\n }\n \n UIColor._registrationMap.set(registrationKey, value)\n \n Reflect.set(target, property, value.stringValue)\n return true\n \n }\n }) as unknown as ColorStyleProxy\n }\n return this._colorStyleProxy\n }\n \n \n /**\n * Registers a producer function that generates a composite CSS string value\n * (e.g. a gradient or box-shadow with embedded colors) and re-runs it\n * automatically whenever any of the given semantic keys are updated via\n * applySemanticColors(). Replaces any previous registration for the same\n * CSS property. The initial value is written immediately.\n */\n registerLiveCSSValue(property: string, keys: string[], producer: () => string) {\n \n const previous = this._liveCSSValues.get(property)\n \n if (previous) {\n for (const key of previous.keys) {\n UIColor.unsubscribe(key, this._liveCSSCallback)\n }\n }\n \n this._liveCSSValues.set(property, { keys, producer })\n \n for (const key of keys) {\n UIColor.subscribe(key, this._liveCSSCallback)\n }\n \n ;(this.style as any)[property] = producer()\n \n }\n \n \n get alpha() {\n return 1 * (this.style.opacity as any)\n }\n \n \n set alpha(alpha) {\n this.style.opacity = \"\" + alpha\n }\n \n \n static animateViewOrViewsWithDurationDelayAndFunction(\n viewOrViews: UIView | HTMLElement | UIView[] | HTMLElement[],\n duration: number,\n delay: number,\n timingStyle = \"cubic-bezier(0.25,0.1,0.25,1)\",\n transformFunction: Function,\n transitioncompletionFunction: Function\n ) {\n \n function callTransitioncompletionFunction() {\n (transitioncompletionFunction || nil)();\n (viewOrViews as UIView[] | HTMLElement[]).forEach(view => {\n if (view instanceof UIView) {\n view.animationDidFinish()\n }\n })\n }\n \n if (IS_FIREFOX) {\n \n // Firefox does not fire the transition completion event properly\n new UIObject().performFunctionWithDelay(delay + duration, callTransitioncompletionFunction)\n \n }\n \n \n if (!(viewOrViews instanceof Array)) {\n viewOrViews = [viewOrViews] as any\n }\n \n const transitionStyles: any[] = []\n const transitionDurations: any[] = []\n const transitionDelays: any[] = []\n const transitionTimings: any[] = []\n \n function isUIView(view: any): view is UIView {\n return IS(view.viewHTMLElement)\n }\n \n for (var i = 0; i < (viewOrViews as any).length; i++) {\n \n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n \n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n \n // @ts-ignore\n view.addEventListener(\"transitionend\", transitionDidFinish, true)\n \n transitionStyles.push(view.style.transition)\n transitionDurations.push(view.style.transitionDuration)\n transitionDelays.push(view.style.transitionDelay)\n transitionTimings.push(view.style.transitionTimingFunction)\n \n view.style.transition = \"all\"\n view.style.transitionDuration = \"\" + duration + \"s\"\n view.style.transitionDelay = \"\" + delay + \"s\"\n view.style.transitionTimingFunction = timingStyle\n \n }\n \n transformFunction()\n \n const transitionObject = {\n \"finishImmediately\": finishTransitionImmediately,\n \"didFinish\": transitionDidFinishManually,\n \"views\": viewOrViews,\n \"registrationTime\": Date.now()\n }\n \n function finishTransitionImmediately() {\n for (var i = 0; i < (viewOrViews as any).length; i++) {\n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n view.style.transition = \"all\"\n view.style.transitionDuration = \"\" + duration + \"s\"\n view.style.transitionDelay = \"\" + delay + \"s\"\n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n }\n }\n \n function transitionDidFinish(this: HTMLElement, event: { srcElement: HTMLElement | UIView }) {\n let view = event.srcElement\n if (!view) {\n return\n }\n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n \n callTransitioncompletionFunction()\n \n // @ts-ignore\n view.removeEventListener(\"transitionend\", transitionDidFinish, true)\n \n }\n \n function transitionDidFinishManually() {\n for (let i = 0; i < (viewOrViews as any).length; i++) {\n \n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n \n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n \n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n \n // @ts-ignore\n view.removeEventListener(\"transitionend\", transitionDidFinish, true)\n \n }\n \n \n }\n \n return transitionObject\n \n }\n \n animationDidFinish() {\n \n \n }\n \n \n static _transformAttribute = ((\"transform\" in document.documentElement.style) ? \"transform\" : undefined) ||\n ((\"-webkit-transform\" in document.documentElement.style) ? \"-webkit-transform\" : \"undefined\") ||\n ((\"-moz-transform\" in document.documentElement.style) ? \"-moz-transform\" : \"undefined\") ||\n ((\"-ms-transform\" in document.documentElement.style) ? \"-ms-transform\" : \"undefined\") ||\n ((\"-o-transform\" in document.documentElement.style) ? \"-o-transform\" : \"undefined\")\n \n \n static _setAbsoluteSizeAndPosition(\n element: HTMLElement & LooseObject,\n left: number,\n top: number,\n width: string | number,\n height: string | number,\n zIndex = 0,\n frameTransform = \"\"\n ) {\n \n if (!IS(element) || !element.obeyAutolayout && !element.getAttribute(\"obeyAutolayout\")) {\n return\n }\n \n if (IS(height)) {\n height = height.integerValue + \"px\"\n }\n \n if (IS(width)) {\n width = width.integerValue + \"px\"\n }\n \n //let str = element.style.cssText\n \n frameTransform =\n \"translate3d(\" + (left).integerValue + \"px, \" +\n (top).integerValue + \"px, 0px)\" + frameTransform\n \n const style = element.style\n \n if (element.UIView) {\n \n frameTransform = frameTransform + (style.transform.match(\n new RegExp(\"scale\\\\(.*\\\\)\", \"g\")\n )?.firstElement ?? \"\")\n \n //str = str + UIView._transformAttribute + \": \" + frameTransform + \";\"\n \n }\n \n if (IS_NIL(height)) {\n \n //str = str + \" height: unset;\"\n height = \"unset\"\n \n }\n // else {\n // str = str + \" height:\" + height + \";\"\n // }\n \n if (IS_NIL(width)) {\n \n //str = str + \" width: unset;\"\n width = \"unset\"\n \n }\n // else {\n // str = str + \" width:\" + width + \";\"\n // }\n \n let zIndexString = \"\" + zIndex\n \n if (IS_NIL(zIndex)) {\n \n //str = str + \" z-index: unset;\"\n zIndexString = \"unset\"\n \n }\n // else {\n // str = str + \" z-index:\" + zIndex + \";\"\n // }\n \n style.transform = frameTransform\n style.height = height\n style.width = width\n style.zIndex = zIndexString\n \n //element.style.cssText = element.style.cssText + str\n \n }\n \n \n static performAutoLayout(\n parentElement: HTMLElement & LooseObject,\n visualFormatArray: string | any[] | null,\n constraintsArray: string | any[]\n ) {\n \n const view = new AutoLayout.View()\n \n if (IS(visualFormatArray) && IS(visualFormatArray.length)) {\n view.addConstraints(AutoLayout.VisualFormat.parse(visualFormatArray, { extended: true }))\n }\n \n if (IS(constraintsArray) && IS(constraintsArray.length)) {\n view.addConstraints(constraintsArray)\n }\n \n const elements: Record<string, HTMLElement> = {}\n for (var key in view.subViews) {\n \n if (!view.subViews.hasOwnProperty(key)) {\n continue\n }\n \n var element = nil\n \n try {\n \n element = parentElement.querySelector(\"#\" + key)\n \n }\n catch (error) {\n \n //console.log(\"Error occurred \" + error);\n \n }\n \n if (!(element && !element.obeyAutolayout && !element.getAttribute(\"obeyAutolayout\")) && element) {\n element.className += element.className ? \" abs\" : \"abs\"\n elements[key] = element\n }\n \n }\n \n let parentUIView: UIView = nil\n \n if (parentElement.UIView) {\n parentUIView = parentElement.UIView\n }\n \n const updateLayout = function () {\n view.setSize(\n parentElement ? parentElement.clientWidth : window.innerWidth,\n parentElement ? parentElement.clientHeight : window.innerHeight\n )\n for (key in view.subViews) {\n \n if (!view.subViews.hasOwnProperty(key)) {\n continue\n }\n \n const subView = view.subViews[key]\n \n if (elements[key]) {\n \n UIView._setAbsoluteSizeAndPosition(\n elements[key],\n subView.left,\n subView.top,\n subView.width,\n subView.height,\n // @ts-ignore\n elements[key].UIView.frame.zIndex,\n // @ts-ignore\n elements[key].UIView.frameTransform\n )\n }\n }\n \n parentUIView.didLayoutSubviews()\n \n }\n \n updateLayout()\n return updateLayout\n \n }\n \n \n static runFunctionBeforeNextFrame(step: () => void) {\n \n if (IS_SAFARI) {\n \n // This creates a microtask\n Promise.resolve().then(step)\n \n }\n else {\n \n window.requestAnimationFrame(step)\n \n }\n \n }\n \n \n static _isLayoutViewsIfNeededScheduled = NO\n \n static scheduleLayoutViewsIfNeeded() {\n \n if (UIView._isLayoutViewsIfNeededScheduled) {\n return\n }\n \n UIView._isLayoutViewsIfNeededScheduled = YES\n UIView.runFunctionBeforeNextFrame(() => {\n UIView._isLayoutViewsIfNeededScheduled = NO\n UIView.layoutViewsIfNeeded()\n })\n \n }\n \n \n static layoutViewsIfNeeded() {\n \n if (!UIView._isLayoutViewsIfNeededScheduled) {\n UIView.scheduleLayoutViewsIfNeeded()\n }\n \n if (!UIView._viewsToLayout.length) {\n return\n }\n \n window.UILayoutCycleTracer?.willBeginLayoutPass()\n \n const maxIterations = 10\n let iteration = 0\n const layoutCounts = new Map<UIView, number>() // Track how many times each view has been laid out\n \n while (UIView._viewsToLayout.length > 0 && iteration < maxIterations) {\n \n window.UILayoutCycleTracer?.willBeginIteration(iteration)\n \n const viewsToProcess = UIView._viewsToLayout\n UIView._viewsToLayout = []\n \n const viewDepthMap = new Map<UIView, number>()\n \n for (let i = 0; i < viewsToProcess.length; i++) {\n const view = viewsToProcess[i]\n const layoutCount = layoutCounts.get(view) || 0\n \n // Skip if this view has been laid out too many times (cycle detection)\n if (layoutCount >= 5) {\n console.warn(\"View layout cycle detected:\", view)\n UILayoutCycleTracer.printViewReport(view)\n continue\n }\n \n if (!viewDepthMap.has(view)) {\n viewDepthMap.set(view, view.withAllSuperviews.length)\n }\n }\n \n const sortedViews = Array.from(viewDepthMap.keys()).sort((a, b) => {\n return viewDepthMap.get(a)! - viewDepthMap.get(b)!\n })\n \n for (let i = 0; i < sortedViews.length; i++) {\n const view = sortedViews[i]\n view.layoutIfNeeded()\n layoutCounts.set(view, (layoutCounts.get(view) || 0) + 1)\n window.UILayoutCycleTracer?.didLayoutView(view)\n }\n \n iteration++\n }\n \n window.UILayoutCycleTracer?.didFinishLayoutPass(iteration)\n \n // console.log(iteration + \" iterations to finish layout\")\n \n }\n \n \n _lastReportedHeight: number = -1\n \n setNeedsLayout() {\n \n if (this._shouldLayout && UIView._viewsToLayout.contains(this)) {\n return\n }\n \n this._shouldLayout = YES\n UIView._viewsToLayout.push(this)\n this.clearIntrinsicSizeCache()\n \n window.UILayoutCycleTracer?.viewDidCallSetNeedsLayout(this)\n \n // // Auto-propagate if intrinsic height changed\n // if (IS(this.superview) && this.superview.usesVirtualLayoutingForIntrinsicSizing) {\n // const newHeight = this.intrinsicContentHeight(this.bounds.width)\n // if (newHeight !== this._lastReportedIntrinsicHeight) {\n // this._lastReportedIntrinsicHeight = newHeight\n // this.superview.setNeedsLayout()\n // }\n // }\n \n if (!UIView._isLayoutViewsIfNeededScheduled) {\n UIView.scheduleLayoutViewsIfNeeded()\n }\n \n }\n \n \n get needsLayout() {\n \n return this._shouldLayout\n \n }\n \n \n layoutIfNeeded() {\n \n if (!this._shouldLayout) {\n return\n }\n \n if (!this.isVirtualLayouting) {\n this._shouldLayout = NO\n }\n \n try {\n \n if (this.bounds.width < 0) {\n return\n }\n \n this.layoutSubviews()\n \n }\n catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n \n layoutSubviews() {\n \n this.willLayoutSubviews()\n \n if (!this.isVirtualLayouting) {\n this._shouldLayout = NO\n }\n \n // Autolayout\n if (this.constraints?.length) {\n this._updateLayoutFunction = UIView.performAutoLayout(this.viewHTMLElement, null, this.constraints)\n }\n this._updateLayoutFunction?.()\n \n this.viewController?.layoutViewSubviews()\n \n this.applyClassesAndStyles()\n \n for (let i = 0; i < this.subviews?.length; i++) {\n \n const subview = this.subviews[i]\n subview.calculateAndSetViewFrame()\n \n }\n \n // if (this._loadingView && this._loadingView.superview == this) {\n // this._loadingView.setFrame(this.bounds)\n // }\n \n this.didLayoutSubviews()\n \n if (this._overlayView) {\n this._overlayView.weakFrame = this.bounds\n }\n \n }\n \n applyClassesAndStyles() {\n for (let i = 0; i < this.styleClasses.length; i++) {\n const styleClass = this.styleClasses[i]\n if (styleClass && !this.viewHTMLElement.classList.contains(styleClass)) {\n this.viewHTMLElement.classList.add(styleClass)\n }\n }\n }\n \n willLayoutSubviews() {\n \n this.viewController?.viewWillLayoutSubviews()\n \n }\n \n didLayoutSubviews() {\n this.viewController?.viewDidLayoutSubviews()\n \n // After every real layout pass, check whether this view's rendered height\n // changed. If it did, the superview's cached intrinsic measurement of us is\n // stale. Calling setNeedsLayout on it clears its intrinsic size cache (via\n // the existing setNeedsLayout \u2192 clearIntrinsicSizeCache chain) and schedules\n // a re-layout so it can re-measure with the new height. That re-layout will\n // in turn call didLayoutSubviews on the superview, propagating the signal\n // upward one level at a time until the height stabilises \u2014 without any\n // explicit upward walk here.\n //\n // We read frame.height directly: it is already committed to _frame after a\n // real layout pass, so this is a free field read with zero reflow or\n // recomputation cost.\n const currentHeight = this.frame.height.integerValue\n if (!this.isVirtualLayouting && IS(this.superview) && this.isMemberOfViewTree) {\n if (currentHeight !== this._lastReportedHeight) {\n this._lastReportedHeight = currentHeight\n this.superview.setNeedsLayout()\n }\n }\n }\n \n get constraints() {\n return this._constraints\n }\n \n \n set constraints(constraints) {\n this._constraints = constraints\n }\n \n addConstraint(constraint: any) {\n this.constraints.push(constraint)\n }\n \n addConstraintsWithVisualFormat(visualFormatArray: string[]) {\n this.constraints = this.constraints.concat(AutoLayout.VisualFormat.parse(\n visualFormatArray,\n { extended: true }\n ))\n }\n \n static constraintWithView(\n view: { isKindOfClass: (arg0: typeof UIView) => any; viewHTMLElement: any; id: any },\n attribute: any,\n relation: any,\n toView: { isKindOfClass: any; viewHTMLElement: any; id: any },\n toAttribute: any,\n multiplier: number,\n constant: number,\n priority: number\n ): Constraint {\n \n let UIViewObject = nil\n let viewID = null\n if (view) {\n if (view.isKindOfClass && view.isKindOfClass(UIView)) {\n UIViewObject = view\n view = view.viewHTMLElement\n }\n viewID = view.id\n }\n \n let toUIViewObject = nil\n let toViewID = null\n if (toView) {\n if (toView.isKindOfClass && view.isKindOfClass(UIView)) {\n toUIViewObject = toView\n toView = toView.viewHTMLElement\n }\n toViewID = toView.id\n }\n \n const constraint = {\n \n view1: viewID,\n attr1: attribute,\n relation: relation,\n view2: toViewID,\n attr2: toAttribute,\n multiplier: multiplier,\n constant: constant,\n priority: priority\n \n }\n \n return constraint\n \n }\n \n \n static constraintAttribute = {\n \n \"left\": AutoLayout.Attribute.LEFT,\n \"right\": AutoLayout.Attribute.RIGHT,\n \"bottom\": AutoLayout.Attribute.BOTTOM,\n \"top\": AutoLayout.Attribute.TOP,\n \"centerX\": AutoLayout.Attribute.CENTERX,\n \"centerY\": AutoLayout.Attribute.CENTERY,\n \"height\": AutoLayout.Attribute.HEIGHT,\n \"width\": AutoLayout.Attribute.WIDTH,\n \"zIndex\": AutoLayout.Attribute.ZINDEX,\n // Not sure what these are for\n \"constant\": AutoLayout.Attribute.NOTANATTRIBUTE,\n \"variable\": AutoLayout.Attribute.VARIABLE\n \n } as const\n \n \n static constraintRelation = {\n \n \"equal\": AutoLayout.Relation.EQU,\n \"lessThanOrEqual\": AutoLayout.Relation.LEQ,\n \"greaterThanOrEqual\": AutoLayout.Relation.GEQ\n \n } as const\n \n \n subviewWithID(viewID: string): UIView | undefined {\n let resultHTMLElement: Element & { UIView: UIView } | null\n \n try {\n resultHTMLElement = this.viewHTMLElement.querySelector(\"#\" + viewID)\n }\n catch (error) {\n console.log(error)\n }\n \n // @ts-ignore\n if (resultHTMLElement && resultHTMLElement.UIView) {\n return resultHTMLElement.UIView\n }\n return\n }\n \n rectangleContainingSubviews() {\n const center = this.bounds.center\n let result = new UIRectangle(center.x, center.y, 0, 0)\n for (let i = 0; i < this.subviews.length; i++) {\n const subview = this.subviews[i]\n let frame = subview.frame\n const rectangleContainingSubviews = subview.rectangleContainingSubviews()\n frame = frame.concatenateWithRectangle(rectangleContainingSubviews)\n result = result.concatenateWithRectangle(frame)\n }\n return result\n }\n \n hasSubview(view: UIView) {\n \n // This is for performance reasons\n if (!IS(view)) {\n return NO\n }\n \n for (let i = 0; i < this.subviews.length; i++) {\n const subview = this.subviews[i]\n if (subview == view) {\n return YES\n }\n }\n return NO\n }\n \n get viewBelowThisView() {\n const result: UIView = (this.viewHTMLElement.previousElementSibling as any || {}).UIView\n return result\n }\n \n get viewAboveThisView() {\n const result: UIView = (this.viewHTMLElement.nextElementSibling as any || {}).UIView\n return result\n }\n \n \n addSubview(view: UIView, aboveView?: UIView) {\n \n if (!this.hasSubview(view) && IS(view)) {\n \n view.willMoveToSuperview(this)\n \n if (IS(aboveView)) {\n this.viewHTMLElement.insertBefore(view.viewHTMLElement, aboveView.viewHTMLElement.nextSibling)\n this.subviews.insertElementAtIndex(this.subviews.indexOf(aboveView), view)\n }\n else {\n this.viewHTMLElement.appendChild(view.viewHTMLElement)\n this.subviews.push(view)\n }\n \n view.core = this.core\n view.didMoveToSuperview(this)\n \n if (this.superview && this.isMemberOfViewTree) {\n \n view.broadcastEventInSubtree({\n name: UIView.broadcastEventName.AddedToViewTree,\n parameters: undefined\n })\n \n }\n \n this.setNeedsLayout()\n \n }\n \n }\n \n \n addSubviews(views: UIView[]) {\n views.forEach(view => this.addSubview(view))\n }\n \n addedAsSubviewToView(view: UIView | undefined, aboveView?: UIView) {\n view?.addSubview(this, aboveView)\n return this\n }\n \n \n moveToBottomOfSuperview() {\n \n if (IS(this.superview)) {\n \n const bottomView = this.superview.subviews.firstElement\n \n if (bottomView == this) {\n return\n }\n \n this.superview.subviews.removeElement(this)\n this.superview.subviews.insertElementAtIndex(0, this)\n this.superview.viewHTMLElement.insertBefore(this.viewHTMLElement, bottomView.viewHTMLElement)\n \n }\n \n }\n \n \n moveToTopOfSuperview() {\n \n if (IS(this.superview)) {\n \n const topView = this.superview.subviews.lastElement\n \n if (topView == this) {\n return\n }\n \n this.superview.subviews.removeElement(this)\n this.superview.subviews.push(this)\n this.superview.viewHTMLElement.appendChild(this.viewHTMLElement)\n \n }\n \n }\n \n \n cancelNeedsLayout() {\n this._shouldLayout = NO\n }\n \n removeFromSuperview() {\n if (IS(this.superview)) {\n this.forEachViewInSubtree(view => {\n view.blur()\n view.cancelNeedsLayout()\n })\n this.cancelNeedsLayout()\n const index = this.superview.subviews.indexOf(this)\n if (index > -1) {\n this.superview.subviews.splice(index, 1)\n this.superview.viewHTMLElement.removeChild(this.viewHTMLElement)\n this.superview = undefined\n this.broadcastEventInSubtree({\n name: UIView.broadcastEventName.RemovedFromViewTree,\n parameters: undefined\n })\n \n }\n }\n }\n \n willAppear() {\n \n \n }\n \n willMoveToSuperview(superview: UIView) {\n this._setInnerHTMLFromKeyIfPossible()\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n didMoveToSuperview(superview: UIView) {\n this.superview = superview\n }\n \n // Write the _path attribute on the viewHTMLElement when a view is added to the view tree\n // to make it easier to debug in the element inspector\n static annotatePathOnViewHTMLElements = NO\n // Write the _path attribute on the viewHTMLElements in all views in the tree to make it easier to debug in\n // the element inspector\n _annotatePathOnViewHTMLElementsInSubtree() {\n this.forEachViewInSubtree(view => view._annotatePathOnViewHTMLElement())\n }\n \n // Write the _path attribute on the viewHTMLElement to make it easier to debug in the element inspector\n _annotatePathOnViewHTMLElement() {\n try {\n const descriptors = this.propertyDescriptors\n \n const bestDescriptor =\n descriptors.find(descriptor => !descriptor.name.startsWith(\"subviews.\")) ??\n descriptors.firstElement\n \n if (IS(bestDescriptor)) {\n const ownerName = (bestDescriptor.object as any).constructor?.name ?? \"\"\n this.viewHTMLElement.setAttribute(\n \"_path\",\n ownerName + \".\" + bestDescriptor.name + \"{\" + this.class.name + \"}\"\n )\n }\n \n }\n catch (exception) {\n \n // Nothing here\n \n }\n }\n \n \n wasAddedToViewTree() {\n \n UIView.resizeObserver.observe(this.viewHTMLElement)\n \n /// #if DEV\n if (UIView.annotatePathOnViewHTMLElements) {\n this._annotatePathOnViewHTMLElement()\n }\n /// #endif\n \n }\n \n documentFontsDidLoad() {\n \n // Override in subclasses to respond to the page fonts finishing loading.\n \n }\n \n wasRemovedFromViewTree() {\n \n UIView.resizeObserver.unobserve(this.viewHTMLElement)\n \n // Clean up all color registrations for this view so the liveColorMap\n // and registrationMap don't retain entries for destroyed views.\n for (const [key, color] of UIColor._registrationMap) {\n if (key.startsWith(`${this._UIViewIndex}_`)) {\n color._elementRef = undefined\n color._styleProperty = undefined\n UIColor._registrationMap.delete(key)\n }\n }\n \n // Unsubscribe all live CSS value producers.\n for (const { keys } of this._liveCSSValues.values()) {\n for (const key of keys) {\n UIColor.unsubscribe(key, this._liveCSSCallback)\n }\n }\n this._liveCSSValues.clear()\n \n }\n \n \n get isMemberOfViewTree() {\n let element: HTMLElement & LooseObject | null = this.viewHTMLElement\n for (let i = 0; element; i = i) {\n if (element.parentElement && element.parentElement == document.body) {\n return YES\n }\n element = element.parentElement\n }\n return NO\n }\n \n \n get withAllSuperviews() {\n const result = []\n let view: UIView | undefined = this\n for (let i = 0; IS(view); i = i) {\n result.push(view)\n view = view.superview\n }\n return result\n }\n \n get elementWithAllSuperviewElements(): HTMLElement[] {\n const result = []\n let view: (HTMLElement & { UIView?: UIView }) | undefined | null = this.viewHTMLElement\n for (let i = 0; IS(view); i = i) {\n if (!view) {\n return result\n }\n result.push(view)\n view = view.parentElement\n }\n return result\n }\n \n \n setNeedsLayoutOnAllSuperviews() {\n this.withAllSuperviews.reverse().everyElement.setNeedsLayout()\n }\n \n \n setNeedsLayoutUpToRootView() {\n this.setNeedsLayoutOnAllSuperviews()\n this.setNeedsLayout()\n }\n \n \n focus() {\n this.viewHTMLElement.focus()\n }\n \n \n blur() {\n this.viewHTMLElement.blur()\n }\n \n get isMovable(): boolean {\n return this._isMovable\n }\n \n set isMovable(isMovable: boolean) {\n if (isMovable) {\n this.makeMovable()\n }\n else {\n this.makeNotMovable?.()\n }\n }\n \n \n makeMovable(\n optionalParameters: {\n shouldMoveWithMouseEvent?: (\n sender: UIView,\n event: MouseEvent\n ) => boolean; viewDidMoveToPosition?: (view: UIView, isMovementCompleted: boolean) => void\n } = {}\n ) {\n \n if (this.isMovable) {\n return\n }\n \n //const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement\n const shouldMoveWithMouseEvent = optionalParameters.shouldMoveWithMouseEvent ?? ((\n sender,\n event\n ) => IS(event.altKey))\n \n let viewValuesBeforeModifications: any[] = []\n let startPoint: UIPoint\n let views: UIView[]\n \n const movementFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent && shouldMoveWithMouseEvent(sender, event)) {\n \n if (!this._isMoving) {\n \n startPoint = this.frame.min\n \n sender.pointerDraggingPoint = new UIPoint(0, 0)\n //const neighbouringViews = sender.superview.subviews\n views = sender.withAllSuperviews //.concat(neighbouringViews)\n // sender.moveToTopOfSuperview()\n \n sender.forEachViewInSubtree(view => {\n \n // Cancel pointer\n view.sendControlEventForKey(UIView.controlEvent.PointerCancel, event)\n \n })\n \n viewValuesBeforeModifications = views.everyElement.configureWithObject({\n style: { cursor: \"move\" },\n nativeSelectionEnabled: NO,\n pausesPointerEvents: YES,\n shouldCallPointerUpInside: async () => NO\n }) as any[]\n \n this._isMoving = YES\n \n }\n \n sender.frame = sender.frame\n .rectangleWithX(startPoint.x + sender.pointerDraggingPoint.x)\n .rectangleWithY(startPoint.y + sender.pointerDraggingPoint.y)\n \n optionalParameters.viewDidMoveToPosition?.(this, NO)\n \n }\n else if (this._isMoving) {\n \n movementStopFunction(sender, event)\n \n }\n \n }\n \n const movementStopFunction = (sender: UIView, event: Event) => {\n \n if (IS_NIL(event) || !this._isMoving) {\n return\n }\n \n views?.forEach(\n (view, index) => {\n \n view.configureWithObject(viewValuesBeforeModifications[index])\n //view.shouldCallPointerUpInside = () => UIView.shouldCallPointerUpInsideOnView(view)\n \n }\n )\n \n optionalParameters.viewDidMoveToPosition?.(this, YES)\n \n this._isMoving = NO\n \n }\n \n const cleanupFunction = () => {\n \n if (!this.isMovable) {\n return\n }\n \n this.removeTargetForControlEvent(UIView.controlEvent.PointerDrag, movementFunction)\n this.removeTargetForControlEvents(\n [UIView.controlEvent.PointerUp, UIView.controlEvent.PointerCancel],\n movementStopFunction\n )\n \n this._isMovable = NO\n \n this.makeNotMovable = undefined\n \n }\n \n this.controlEventTargetAccumulator.PointerDrag = movementFunction\n this.controlEventTargetAccumulator.PointerUp.PointerCancel = movementStopFunction\n \n //UIObject.configureWithObject(overlayElement, { remove: EXTEND(() => cleanupFunction()) })\n \n this._isMovable = YES\n \n this.makeNotMovable = cleanupFunction\n \n }\n \n get isResizable(): boolean {\n return this._isResizable\n }\n \n \n set isResizable(isResizable: boolean) {\n if (isResizable) {\n this.makeResizable()\n }\n else {\n this.makeNotResizable?.()\n }\n }\n \n \n makeResizable(\n optionalParameters: {\n overlayElement?: HTMLElement;\n borderWidth?: number;\n borderColor?: UIColor;\n cornerSize?: string;\n maxCornerSize?: string;\n viewDidChangeToSize?: (\n view: UIView,\n isMovementCompleted: boolean\n ) => void\n } = {}\n ) {\n \n if (this.isResizable) {\n return\n }\n \n const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement\n \n const borderWidth = IF(optionalParameters.borderWidth)(RETURNER(optionalParameters.borderWidth + \"px\"))\n .ELSE(RETURNER(undefined)) ||\n overlayElement.style.borderWidth ||\n this.style.borderWidth || \"5px\"\n \n const borderColor = optionalParameters.borderColor?.stringValue ??\n // overlayElement.style.borderColor ??\n // view.style.borderColor ??\n UIColor.transparentColor.stringValue\n //this.transformColorForView(view).stringValue\n \n const maxCornerSize = optionalParameters.maxCornerSize ?? \"10px\"\n const cornerSize = optionalParameters.cornerSize ?? \"5%\"\n \n let yOverflow = 0\n let xOverflow = 0\n \n const pointerUpFunction = () => {\n yOverflow = 0\n xOverflow = 0\n optionalParameters.viewDidChangeToSize?.(this, YES)\n }\n \n const frameWasChanged = () => {\n const frame = this.frame\n if (this.style.minHeight) {\n frame.height = [\n frame.height,\n toPx(this.viewHTMLElement, this.style.minHeight)\n ].max()\n }\n if (this.style.maxHeight) {\n frame.height = [\n frame,\n toPx(this.viewHTMLElement, this.style.maxHeight)\n ].min()\n }\n yOverflow = yOverflow + this.frame.height - frame.height\n this.frame = frame\n optionalParameters.viewDidChangeToSize?.(this, NO)\n }\n \n \n const PointerXDragFunction = (centeredOnPosition: number, sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n const scaleX = this.viewHTMLElement.getBoundingClientRect().width / this.viewHTMLElement.offsetWidth\n const signMultiplier = 1 - 2 * centeredOnPosition\n let movementX = event.movementX / scaleX\n const pageScale = UIView.pageScale\n \n if (xOverflow * signMultiplier > 0 && 0 > movementX) {\n xOverflow = (xOverflow + movementX / pageScale).integerValue\n if (xOverflow >= 0) {\n return\n }\n movementX = xOverflow\n xOverflow = 0\n }\n \n if (xOverflow > 0 && 0 < movementX && signMultiplier < 0) {\n xOverflow = (xOverflow + signMultiplier * movementX / pageScale).integerValue\n if (xOverflow >= 0) {\n return\n }\n movementX = xOverflow * signMultiplier\n xOverflow = 0\n }\n \n const frame = this.frame\n const widthChange = (signMultiplier * movementX) / pageScale\n let frameWidth = frame.width + widthChange\n \n if (this.style.minWidth) {\n frameWidth = [\n frameWidth,\n toPx(this.viewHTMLElement, this.style.minWidth),\n 0\n ].max()\n }\n \n if (this.style.maxWidth) {\n frameWidth = [\n frameWidth,\n toPx(this.viewHTMLElement, this.style.maxWidth)\n ].min()\n }\n \n xOverflow = (xOverflow + frame.width + widthChange - frameWidth).integerValue\n this.frame = frame.rectangleWithWidth(frameWidth, centeredOnPosition)\n frameWasChanged()\n \n }\n \n }\n \n const PointerYDragFunction = (centeredOnPosition: number, sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n const scaleX = this.viewHTMLElement.getBoundingClientRect().width / this.viewHTMLElement.offsetWidth\n const signMultiplier = 1 - 2 * centeredOnPosition\n let movementY = event.movementY / scaleX\n const pageScale = UIView.pageScale\n \n if (yOverflow * signMultiplier > 0 && 0 > movementY) {\n yOverflow = (yOverflow + movementY / pageScale).integerValue\n if (yOverflow >= 0) {\n return\n }\n movementY = yOverflow\n yOverflow = 0\n }\n \n if (yOverflow > 0 && 0 < movementY && signMultiplier < 0) {\n yOverflow = (yOverflow + signMultiplier * movementY / pageScale).integerValue\n if (yOverflow >= 0) {\n return\n }\n movementY = yOverflow * signMultiplier\n yOverflow = 0\n }\n \n const frame = this.frame\n const heightChange = (signMultiplier * movementY) / pageScale\n let frameHeight = frame.height + heightChange\n \n if (this.style.minHeight) {\n frameHeight = [\n frameHeight,\n toPx(this.viewHTMLElement, this.style.minHeight),\n 0\n ].max()\n }\n \n if (this.style.maxHeight) {\n frameHeight = [\n frameHeight,\n toPx(this.viewHTMLElement, this.style.maxHeight)\n ].min()\n }\n \n yOverflow = (yOverflow + frame.height + heightChange - frameHeight).integerValue\n this.frame = frame.rectangleWithHeight(frameHeight, centeredOnPosition)\n frameWasChanged()\n \n }\n \n }\n \n \n const leftEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"leftEdge\",\n style: {\n position: \"absolute\",\n height: \"100%\",\n width: borderWidth,\n top: \"0px\",\n left: \"0px\",\n cursor: \"col-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n leftEdge.controlEventTargetAccumulator.PointerDrag = PointerXDragFunction.bind(this, 1)\n leftEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n const rightEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"rightEdge\",\n style: {\n position: \"absolute\",\n height: \"100%\",\n width: borderWidth,\n top: \"0px\",\n right: \"0px\",\n cursor: \"col-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n rightEdge.controlEventTargetAccumulator.PointerDrag = PointerXDragFunction.bind(this, 0)\n rightEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n // noinspection JSSuspiciousNameCombination\n const bottomEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomEdge\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: \"100%\",\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"row-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n bottomEdge.controlEventTargetAccumulator.PointerDrag = PointerYDragFunction.bind(this, 0)\n bottomEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n // noinspection JSSuspiciousNameCombination\n const topEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topEdge\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: \"100%\",\n top: \"0px\",\n right: \"0px\",\n cursor: \"row-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n topEdge.controlEventTargetAccumulator.PointerDrag = PointerYDragFunction.bind(this, 1)\n topEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const pointerDragTLFunction = (sender: UIView, event: Event) => {\n PointerXDragFunction(1, sender, event)\n PointerYDragFunction(1, sender, event)\n }\n \n // noinspection JSSuspiciousNameCombination\n const topLeftCornerTop = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topLeftCornerTop\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n top: \"0px\",\n left: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n topLeftCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n topLeftCornerTop.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n const topLeftCornerLeft = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topLeftCornerLeft\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n top: \"0px\",\n left: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n topLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n topLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const pointerDragBLFunction = (sender: UIView, event: Event) => {\n PointerXDragFunction(1, sender, event)\n PointerYDragFunction(0, sender, event)\n }\n \n const bottomLeftCornerLeft = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomLeftCornerLeft\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n // noinspection JSSuspiciousNameCombination\n const bottomLeftCornerBottom = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomLeftCornerBottom\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const pointerDragBRFunction = (sender: UIView, event: Event) => {\n PointerXDragFunction(0, sender, event)\n PointerYDragFunction(0, sender, event)\n }\n \n // noinspection JSSuspiciousNameCombination\n const bottomRightCornerBottom = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomRightCornerBottom\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n bottom: \"0px\",\n right: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n bottomRightCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n bottomRightCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n const bottomRightCornerRight = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomRightCornerRight\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n bottom: \"0px\",\n right: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n bottomRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n bottomRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const pointerDragTRFunction = (sender: UIView, event: Event) => {\n PointerXDragFunction(0, sender, event)\n PointerYDragFunction(1, sender, event)\n }\n \n const topRightCornerRight = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topRightCornerRight\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n top: \"0px\",\n right: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n topRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n topRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n // noinspection JSSuspiciousNameCombination\n const topRightCornerTop = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topRightCornerTop\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n top: \"0px\",\n right: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n topRightCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n topRightCornerTop.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const views = [\n \n leftEdge,\n rightEdge,\n bottomEdge,\n topEdge,\n \n topRightCornerTop,\n topLeftCornerTop,\n topLeftCornerLeft,\n bottomLeftCornerLeft,\n bottomLeftCornerBottom,\n bottomRightCornerBottom,\n bottomRightCornerRight,\n topRightCornerRight\n \n ]\n \n views.forEach(view => overlayElement.appendChild(view.viewHTMLElement))\n \n this.resizingHandles = views\n \n this._isResizable = YES\n \n this.makeNotResizable = () => {\n \n if (!this.isResizable) {\n return\n }\n \n views.everyElement.viewHTMLElement.remove()\n this.makeNotResizable = undefined\n this._isResizable = NO\n this.resizingHandles = []\n \n }\n \n }\n \n // noinspection JSUnusedLocalSymbols\n static async shouldCallPointerUpInsideOnView(view: UIView, event: MouseEvent | TouchEvent) {\n \n return YES\n \n }\n \n // noinspection JSUnusedLocalSymbols\n static async shouldCallPointerHoverOnView(view: UIView, event: MouseEvent | TouchEvent) {\n \n return YES\n \n }\n \n // noinspection JSUnusedLocalSymbols\n static async shouldCallPointerLeaveOnView(view: UIView, event: MouseEvent | TouchEvent) {\n \n return YES\n \n }\n \n // noinspection JSUnusedLocalSymbols\n static async shouldCallPointerCancelOnView(view: UIView, event: MouseEvent | TouchEvent) {\n \n return YES\n \n }\n \n shouldCallPointerUpInside(event: MouseEvent | TouchEvent) {\n return UIView.shouldCallPointerUpInsideOnView(this, event)\n }\n \n shouldCallPointerCancel(event: MouseEvent | TouchEvent) {\n return UIView.shouldCallPointerCancelOnView(this, event)\n }\n \n shouldCallPointerHover(event: MouseEvent | TouchEvent) {\n return UIView.shouldCallPointerHoverOnView(this, event)\n }\n \n \n shouldCallPointerLeave(event: MouseEvent | TouchEvent) {\n return UIView.shouldCallPointerLeaveOnView(this, event)\n }\n \n protected _loadUIEvents() {\n \n \n const isTouchEventClassDefined: boolean = NO || (window as any).TouchEvent\n \n const pauseEvent = (event: Event, forced = NO) => {\n \n if (this.pausesPointerEvents || forced) {\n \n if (event.stopPropagation) {\n event.stopPropagation()\n }\n if (event.preventDefault) {\n event.preventDefault()\n }\n event.cancelBubble = true\n event.returnValue = false\n return false\n \n }\n \n if (event.stopPropagation && this.stopsPointerEventPropagation) {\n event.stopPropagation()\n }\n \n }\n \n const onMouseDown = (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n ((this.ignoresMouse || (IS(this._touchEventTime) && (Date.now() - this._touchEventTime) > 500)) &&\n event instanceof MouseEvent)) {\n return\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerDown, event)\n \n this._isPointerInside = YES\n this._isPointerValid = YES\n this._isPointerValidForMovement = YES\n this._isPointerDown = YES\n this._initialPointerPosition = new UIPoint(event.clientX, event.clientY)\n if (isTouchEventClassDefined && event instanceof TouchEvent) {\n this._touchEventTime = Date.now()\n this._initialPointerPosition = new UIPoint(event.touches[0].clientX, event.touches[0].clientY)\n if (event.touches.length > 1) {\n onTouchCancel(event)\n return\n }\n }\n else {\n this._touchEventTime = nil\n pauseEvent(event)\n }\n \n this._hasPointerDragged = NO\n \n UIView._onWindowTouchMove = onTouchMove\n UIView._onWindowMouseup = onmouseup\n UIView._onWindowMouseMove = onMouseMove\n \n }\n \n const onTouchStart = onMouseDown as any\n \n const onmouseup = async (event: MouseEvent) => {\n \n this._isPointerDown = NO\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (this._isPointerInside && await this.shouldCallPointerUpInside(event)) {\n onPointerUpInside(event)\n if (!this._hasPointerDragged) {\n this.sendControlEventForKey(UIView.controlEvent.PointerTap, event)\n }\n }\n \n // This has to be sent after the more specific event so that UIButton can ignore it when not highlighted\n this.sendControlEventForKey(UIView.controlEvent.PointerUp, event)\n \n pauseEvent(event)\n \n }\n \n const onTouchEnd = onmouseup\n \n const onmouseout = async (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (await this.shouldCallPointerLeave(event)) {\n this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\n }\n \n this._isPointerInside = NO\n \n pauseEvent(event)\n \n }\n \n const onTouchLeave = onmouseout\n \n const onmouseover = async (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (await this.shouldCallPointerHover(event)) {\n this.sendControlEventForKey(UIView.controlEvent.PointerHover, event)\n }\n \n this._isPointerInside = YES\n this._isPointerValid = YES\n this._isPointerValidForMovement = YES\n \n pauseEvent(event)\n \n }\n \n const onMouseMove = (event: MouseEvent) => {\n \n // if (this._isPointerDown) {\n //\n // console.log(\"Mouse move\")\n //\n // }\n \n if (!this._isPointerValid && !this._isPointerValidForMovement) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n const clientPoint = new UIPoint(\n event.clientX,\n event.clientY\n )\n if (IS_NOT(this._initialPointerPosition)) {\n this._initialPointerPosition = clientPoint\n }\n \n const distanceToInitialPoint = clientPoint.to(this._initialPointerPosition).length\n if (distanceToInitialPoint > this._pointerDragThreshold) {\n this._hasPointerDragged = YES\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerMove, event)\n \n if (this._hasPointerDragged && this._isPointerDown) {\n const scaleX = this.viewHTMLElement.getBoundingClientRect().width / this.viewHTMLElement.offsetWidth\n const movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / scaleX)\n .add(this.pointerDraggingPoint)\n this.sendControlEventForKey(UIView.controlEvent.PointerDrag, event)\n }\n \n this._previousClientPoint = clientPoint\n \n pauseEvent(event)\n \n }\n \n const onTouchMove = async (event: TouchEvent) => {\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (event.touches.length > 1) {\n onTouchZoom(event)\n return\n }\n \n const touch = event.touches[0]\n \n const clientPoint = new UIPoint(\n touch.clientX,\n touch.clientY\n )\n const distanceToInitialPoint = clientPoint.to(this._initialPointerPosition!).length\n if (distanceToInitialPoint > this._pointerDragThreshold) {\n this._hasPointerDragged = YES\n }\n \n if (this._isPointerInside && this.viewHTMLElement !=\n document.elementFromPoint(touch.clientX, touch.clientY)) {\n this._isPointerInside = NO\n if (await this.shouldCallPointerLeave(event)) {\n this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\n }\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerMove, event)\n \n \n if (this._hasPointerDragged) {\n const scaleX = this.viewHTMLElement.getBoundingClientRect().width / this.viewHTMLElement.offsetWidth\n const movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / scaleX)\n .add(this.pointerDraggingPoint)\n this.sendControlEventForKey(UIView.controlEvent.PointerDrag, event)\n }\n \n this._previousClientPoint = clientPoint\n \n }\n \n const onTouchZoom = (event: TouchEvent) => {\n this.sendControlEventForKey(UIView.controlEvent.MultipleTouches, event)\n }\n const onPointerUpInside = (event: Event) => {\n \n pauseEvent(event)\n this._isPointerDown = NO\n this.sendControlEventForKey(UIView.controlEvent.PointerUpInside, event)\n \n \n }\n \n const onTouchCancel = async (event: MouseEvent | TouchEvent) => {\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n this._isPointerValid = NO\n this._isPointerValidForMovement = NO\n this._isPointerDown = NO\n \n if (await this.shouldCallPointerCancel(event)) {\n this.sendControlEventForKey(UIView.controlEvent.PointerCancel, event)\n }\n \n }\n \n function eventKeyIsEnter(event: { keyCode: number }) {\n if (event.keyCode !== 13) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsSpace(event: { keyCode: number }) {\n if (event.keyCode !== 32) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsTab(event: { keyCode: number }) {\n if (event.keyCode !== 9) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsEsc(event: { key: string; keyCode: number }) {\n let result: boolean\n if (\"key\" in event) {\n result = (event.key == \"Escape\" || event.key == \"Esc\")\n }\n else {\n // @ts-ignore\n result = (event.keyCode == 27)\n }\n return result\n }\n \n function eventKeyIsLeft(event: KeyboardEvent) {\n if (event.keyCode != 37) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsRight(event: KeyboardEvent) {\n if (event.keyCode != 39) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsDown(event: KeyboardEvent) {\n if (event.keyCode != 40) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsUp(event: KeyboardEvent) {\n if (event.keyCode != 38) {\n return NO\n }\n return YES\n }\n \n const onKeyDown = (event: KeyboardEvent) => {\n \n if (eventKeyIsEnter(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EnterDown, event)\n }\n \n if (eventKeyIsSpace(event)) {\n this.sendControlEventForKey(UIView.controlEvent.SpaceDown, event)\n }\n \n if (eventKeyIsEsc(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EscDown, event)\n }\n \n if (eventKeyIsTab(event)) {\n this.sendControlEventForKey(UIView.controlEvent.TabDown, event)\n }\n \n if (eventKeyIsLeft(event)) {\n this.sendControlEventForKey(UIView.controlEvent.LeftArrowDown, event)\n }\n \n if (eventKeyIsRight(event)) {\n this.sendControlEventForKey(UIView.controlEvent.RightArrowDown, event)\n }\n \n if (eventKeyIsDown(event)) {\n this.sendControlEventForKey(UIView.controlEvent.DownArrowDown, event)\n }\n \n if (eventKeyIsUp(event)) {\n this.sendControlEventForKey(UIView.controlEvent.UpArrowDown, event)\n }\n \n if (event.defaultPrevented) {\n pauseEvent(event, YES)\n }\n \n }\n \n const onKeyUp = (event: KeyboardEvent) => {\n \n if (eventKeyIsEnter(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EnterUp, event)\n }\n \n }\n \n \n const onfocus = (event: Event) => {\n this.sendControlEventForKey(UIView.controlEvent.Focus, event)\n }\n \n const onblur = (event: Event) => {\n this.sendControlEventForKey(UIView.controlEvent.Blur, event)\n }\n \n \n // Mouse and touch start events\n // this._viewHTMLElement.onmousedown = onMouseDown\n // this._viewHTMLElement.ontouchstart = onTouchStart\n this.viewHTMLElement.addEventListener(\"mousedown\", onMouseDown, false)\n this.viewHTMLElement.addEventListener(\"touchstart\", onTouchStart, false)\n // //this.viewHTMLElement.addEventListener(\"mouseenter\", onMouseEnter.bind(this), false);\n \n // Mouse and touch move events\n // this._viewHTMLElement.onmousemove = onMouseMove\n // this._viewHTMLElement.ontouchmove = onTouchMove\n //this.viewHTMLElement.addEventListener(\"mousemove\", onMouseMove, false)\n this.viewHTMLElement.addEventListener(\"touchmove\", onTouchMove, false)\n \n //this.viewHTMLElement.addEventListener(\"mousewheel\", onmousewheel.bind(this), false)\n \n this._viewHTMLElement.onmouseover = onmouseover\n // this.viewHTMLElement.addEventListener(\"mouseover\", onmouseover.bind(this), false)\n \n // Mouse and touch end events\n // this._viewHTMLElement.onmouseup = onmouseup\n // // @ts-ignore\n // this._viewHTMLElement.ontouchend = onTouchEnd\n // this._viewHTMLElement.ontouchcancel = onTouchCancel\n this.viewHTMLElement.addEventListener(\"mouseup\", onmouseup, false)\n // @ts-ignore\n this.viewHTMLElement.addEventListener(\"touchend\", onTouchEnd, false)\n this.viewHTMLElement.addEventListener(\"touchcancel\", onTouchCancel, false)\n \n //this._viewHTMLElement.onmouseout = onmouseout\n this.viewHTMLElement.addEventListener(\"mouseout\", onmouseout, false)\n // @ts-ignore\n this._viewHTMLElement.addEventListener(\"touchleave\", onTouchLeave, true)\n \n // this.viewHTMLElement.onkeydown = onkeydown\n // this.viewHTMLElement.onkeyup = onkeyup\n this._viewHTMLElement.addEventListener(\"keydown\", onKeyDown, false)\n this._viewHTMLElement.addEventListener(\"keyup\", onKeyUp, false)\n \n // Focus events\n this._viewHTMLElement.onfocus = onfocus\n this._viewHTMLElement.onblur = onblur\n // this.viewHTMLElement.addEventListener(\"focus\", onfocus, true)\n // this.viewHTMLElement.addEventListener(\"blur\", onblur, true)\n \n \n }\n \n public static controlEvent = {\n \n \"PointerDown\": \"PointerDown\",\n \"PointerMove\": \"PointerMove\",\n \"PointerDrag\": \"PointerDrag\",\n \"PointerLeave\": \"PointerLeave\",\n \"PointerEnter\": \"PointerEnter\",\n \"PointerUpInside\": \"PointerUpInside\",\n \"PointerTap\": \"PointerTap\",\n \"PointerUp\": \"PointerUp\",\n \"MultipleTouches\": \"PointerZoom\",\n \"PointerCancel\": \"PointerCancel\",\n \"PointerHover\": \"PointerHover\",\n \"EnterDown\": \"EnterDown\",\n \"EnterUp\": \"EnterUp\",\n \"SpaceDown\": \"SpaceDown\",\n \"EscDown\": \"EscDown\",\n \"TabDown\": \"TabDown\",\n \"LeftArrowDown\": \"LeftArrowDown\",\n \"RightArrowDown\": \"RightArrowDown\",\n \"DownArrowDown\": \"DownArrowDown\",\n \"UpArrowDown\": \"UpArrowDown\",\n \"Focus\": \"Focus\",\n \"Blur\": \"Blur\"\n \n } as const\n \n \n controlEvent = UIView.controlEvent\n \n \n public get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<UIView> {\n \n const eventKeys: string[] = []\n \n const result: any = new Proxy(\n (this.constructor as any).controlEvent,\n {\n \n get: (target, key: string, _receiver) => {\n \n eventKeys.push(key)\n \n return result\n \n },\n set: (target, key: string, value, _receiver) => {\n \n eventKeys.push(key)\n this.addTargetForControlEvents(eventKeys, value)\n \n return true\n \n }\n \n }\n )\n \n return result\n \n }\n \n \n addTargetForControlEvents(eventKeys: string[], targetFunction: (sender: UIView, event: Event) => void) {\n eventKeys.forEach(key => this.addTargetForControlEvent(key, targetFunction))\n }\n \n addTargetForControlEvent(\n eventKey: string,\n targetFunction: (sender: UIView, event: Event, callbackControl: { allowConcurrentCalls: () => void }) => any | Promise<any>\n ) {\n \n let targets = this._controlEventTargets[eventKey]\n \n if (!targets) {\n // @ts-ignore\n targets = []\n this._controlEventTargets[eventKey] = targets\n }\n \n const isAsync = targetFunction.constructor.name === \"AsyncFunction\"\n \n if (!isAsync) {\n if (targets.indexOf(targetFunction) == -1) {\n targets.push(targetFunction)\n }\n return\n }\n \n const wrapper = (sender: UIView, event: Event) => {\n const isBlocked = this._ongoingControlEventHandlers.some(\n handle => handle._controlEventKey === eventKey\n )\n if (isBlocked) {\n return\n }\n \n const handle: { _controlEventKey: string } = { _controlEventKey: eventKey }\n this._ongoingControlEventHandlers.push(handle)\n \n const promise = (targetFunction as Function)(sender, event, {\n allowConcurrentCalls: () => {\n this._ongoingControlEventHandlers.removeElement(handle)\n }\n }) as Promise<any>\n \n promise.finally(() => {\n this._ongoingControlEventHandlers.removeElement(handle)\n })\n }\n \n if (targets.indexOf(wrapper) == -1) {\n targets.push(wrapper)\n }\n \n }\n \n removeTargetForControlEvent(eventKey: string, targetFunction: (sender: UIView, event: Event) => void) {\n const targets = this._controlEventTargets[eventKey]\n if (!targets) {\n return\n }\n const index = targets.indexOf(targetFunction)\n if (index != -1) {\n targets.splice(index, 1)\n }\n }\n \n removeTargetForControlEvents(eventKeys: string[], targetFunction: (sender: UIView, event: Event) => void) {\n eventKeys.forEach(key => this.removeTargetForControlEvent(key, targetFunction))\n }\n \n \n performFunctionAfterBroadcastEvent(\n event: string | string[],\n targetFunction: (event: UIViewBroadcastEvent) => void\n ): void {\n const eventNames = Array.isArray(event) ? event : [event]\n eventNames.forEach(name => {\n let targets = this._broadcastEventTargets[name]\n if (!targets) {\n targets = []\n this._broadcastEventTargets[name] = targets\n }\n if (targets.indexOf(targetFunction) == -1) {\n targets.push(targetFunction)\n }\n })\n }\n \n removePerformFunctionAfterBroadcastEvent(\n event: string | string[],\n targetFunction: (event: UIViewBroadcastEvent) => void\n ): void {\n const eventNames = Array.isArray(event) ? event : [event]\n eventNames.forEach(name => {\n const targets = this._broadcastEventTargets[name]\n if (!targets) {\n return\n }\n const index = targets.indexOf(targetFunction)\n if (index != -1) {\n targets.splice(index, 1)\n }\n })\n }\n \n \n sendControlEventForKey(eventKey: string, nativeEvent?: Event) {\n let targets = this._controlEventTargets[eventKey]\n if (!targets) {\n return\n }\n targets = targets.copy()\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n target(this, nativeEvent)\n }\n }\n \n \n static broadcastEventName = {\n \n \"LanguageChanged\": \"LanguageChanged\",\n \"RemovedFromViewTree\": \"RemovedFromViewTree\",\n \"AddedToViewTree\": \"AddedToViewTree\",\n \"PageDidScroll\": \"PageDidScroll\"\n \n } as const\n \n broadcastEventInSubtree(event: UIViewBroadcastEvent) {\n this.forEachViewInSubtree(view => {\n view.didReceiveBroadcastEvent(event)\n if (IS(view.viewController)) {\n view.viewController.viewDidReceiveBroadcastEvent(event)\n }\n })\n }\n \n \n didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n const broadcastTargets = this._broadcastEventTargets[event.name]\n if (broadcastTargets) {\n const targets = broadcastTargets.copy()\n this._broadcastEventTargets[event.name] = []\n for (let i = 0; i < targets.length; i++) {\n targets[i](event)\n }\n }\n \n if (event.name == UIView.broadcastEventName.PageDidScroll) {\n this._isPointerValid = NO\n }\n \n if (event.name == UIView.broadcastEventName.AddedToViewTree) {\n this.wasAddedToViewTree()\n }\n \n if (event.name == UIView.broadcastEventName.RemovedFromViewTree) {\n this.wasRemovedFromViewTree()\n }\n \n if (event.name == UIView.broadcastEventName.LanguageChanged || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n this._setInnerHTMLFromKeyIfPossible()\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n }\n \n \n forEachViewInSubtree(functionToCall: (view: UIView) => void) {\n functionToCall(this)\n this.subviews.everyElement.forEachViewInSubtree(functionToCall)\n }\n \n rectangleInView(rectangle: UIRectangle, view: UIView, forceIfNotInViewTree = NO) {\n \n if (!forceIfNotInViewTree && (!view.isMemberOfViewTree || !this.isMemberOfViewTree)) {\n return nil\n }\n \n // Get all the superview elements\n const allViewSuperviewElements = view.elementWithAllSuperviewElements\n \n // Find the first common element and the views in between\n const superviewElementsUntilCommonElement = this.elementWithAllSuperviewElements.slice(\n 0,\n this.elementWithAllSuperviewElements.findIndex(\n viewElement => allViewSuperviewElements.contains(viewElement)\n ) + 1\n )\n const commonElement = superviewElementsUntilCommonElement.lastElement\n const viewSuperviewElementsUntilCommonElement = allViewSuperviewElements.slice(\n 0,\n allViewSuperviewElements.findIndex(viewElement => viewElement == commonElement) + 1\n )\n \n // Step until the common element and record the offsets\n let selfOffsetPoint = new UIPoint(0, 0)\n //let selfScale = 1\n for (let i = 0; i < superviewElementsUntilCommonElement.length - 1; i++) {\n const element = superviewElementsUntilCommonElement[i]\n selfOffsetPoint = selfOffsetPoint.add(\n element.UIViewObject?.frame.min ?? new UIPoint(element.offsetLeft, element.offsetTop)\n )\n //selfScale = selfScale * (element.UIView?.scale ?? (element.getBoundingClientRect().width /\n // element.offsetWidth))\n }\n \n let viewOffsetPoint = new UIPoint(0, 0)\n //let viewScale = 1\n for (let i = 0; i < viewSuperviewElementsUntilCommonElement.length - 1; i++) {\n const element = viewSuperviewElementsUntilCommonElement[i]\n viewOffsetPoint = viewOffsetPoint.add(\n element.UIViewObject?.frame.min ?? new UIPoint(element.offsetLeft, element.offsetTop)\n )\n //viewScale = viewScale * (element.UIView?.scale ?? (element.getBoundingClientRect().width /\n // element.offsetWidth))\n }\n \n const offsetPoint = selfOffsetPoint.subtract(viewOffsetPoint)\n \n return rectangle.copy().offsetByPoint(offsetPoint)\n \n }\n \n \n rectangleFromView(rectangle: UIRectangle, view: UIView) {\n return view.rectangleInView(rectangle, this)\n }\n \n \n get contentBounds(): UIRectangle {\n \n const bounds = this.bounds\n const insets = this._contentInsets\n \n return new UIRectangle(\n insets.left,\n insets.top,\n bounds.height - insets.top - insets.bottom,\n bounds.width - insets.left - insets.right\n )\n \n }\n \n contentBoundsWithInset(inset: number): UIRectangle {\n this._contentInsets = { top: inset, left: inset, bottom: inset, right: inset }\n const bounds = this.bounds\n return new UIRectangle(\n inset,\n inset,\n bounds.height - inset * 2,\n bounds.width - inset * 2\n )\n }\n \n contentBoundsWithInsets(\n left: number,\n right: number,\n bottom: number,\n top: number\n ): UIRectangle {\n this._contentInsets = { left, right, bottom, top }\n const bounds = this.bounds\n return new UIRectangle(\n left,\n top,\n bounds.height - top - bottom,\n bounds.width - left - right\n )\n }\n \n protected _getIntrinsicSizeCacheKey(constrainingHeight: number, constrainingWidth: number): string {\n return `h_${constrainingHeight}__w_${constrainingWidth}`\n }\n \n protected _getCachedIntrinsicSize(cacheKey: string): UIRectangle | undefined {\n if (this.sharedIntrinsicSizeCacheIdentifier) {\n return UIView._sharedIntrinsicSizeCaches.get(this.sharedIntrinsicSizeCacheIdentifier)?.[cacheKey]\n }\n return this._intrinsicSizesCache[cacheKey]\n }\n \n protected _setCachedIntrinsicSize(cacheKey: string, size: UIRectangle): void {\n if (this.sharedIntrinsicSizeCacheIdentifier) {\n let bucket = UIView._sharedIntrinsicSizeCaches.get(\n this.sharedIntrinsicSizeCacheIdentifier\n )\n if (!bucket) {\n bucket = {}\n UIView._sharedIntrinsicSizeCaches.set(this.sharedIntrinsicSizeCacheIdentifier, bucket)\n }\n bucket[cacheKey] = size.copy()\n return\n }\n this._intrinsicSizesCache[cacheKey] = size.copy()\n }\n \n // clearIntrinsicSizeCache(): void {\n // this._intrinsicSizesCache = {}\n //\n // this._frameCacheForVirtualLayouting = undefined\n // this._frameCache = undefined\n //\n // // Optionally clear parent cache if this view affects parent's intrinsic size\n // if (this.superview?.usesVirtualLayoutingForIntrinsicSizing) {\n // this.superview.clearIntrinsicSizeCache()\n // }\n // }\n \n clearIntrinsicSizeCache(): void {\n \n const hadCachedSize = this.sharedIntrinsicSizeCacheIdentifier\n ? UIView._sharedIntrinsicSizeCaches.has(this.sharedIntrinsicSizeCacheIdentifier)\n : Object.keys(this._intrinsicSizesCache).length > 0\n \n if (this.sharedIntrinsicSizeCacheIdentifier) {\n UIView._sharedIntrinsicSizeCaches.delete(this.sharedIntrinsicSizeCacheIdentifier)\n }\n else {\n this._intrinsicSizesCache = {}\n }\n this._frameCacheForVirtualLayouting = undefined\n this._frameCache = undefined\n \n if (this.superview?.usesVirtualLayoutingForIntrinsicSizing) {\n this.superview.clearIntrinsicSizeCache()\n \n // If we had cached sizes, a parent was measuring us and needs to re-layout\n if (hadCachedSize && !this.isVirtualLayouting) {\n this.superview.setNeedsLayout()\n }\n }\n \n }\n \n intrinsicContentSizeWithConstraints(constrainingHeight: number = 0, constrainingWidth: number = 0) {\n \n constrainingWidth = Math.max(constrainingWidth, 0)\n constrainingHeight = Math.max(constrainingHeight, 0)\n \n const cacheKey = this._getIntrinsicSizeCacheKey(constrainingHeight, constrainingWidth)\n const cachedResult = this._getCachedIntrinsicSize(cacheKey)\n if (cachedResult) {\n return cachedResult\n }\n \n // This works but is slow\n \n const result = new UIRectangle(0, 0, 0, 0)\n if (this.rootView.forceIntrinsicSizeZero) {\n return result\n }\n \n let temporarilyInViewTree = NO\n let nodeAboveThisView: Node | null = null\n if (!this.isMemberOfViewTree) {\n document.body.appendChild(this.viewHTMLElement)\n temporarilyInViewTree = YES\n nodeAboveThisView = this.viewHTMLElement.nextSibling\n }\n \n const height = this.style.height\n const width = this.style.width\n \n this.style.height = \"\" + constrainingHeight + \"px\"\n this.style.width = \"\" + constrainingWidth + \"px\"\n \n \n const left = this.style.left\n const right = this.style.right\n const bottom = this.style.bottom\n const top = this.style.top\n \n this.style.left = \"\"\n this.style.right = \"\"\n this.style.bottom = \"\"\n this.style.top = \"\"\n \n \n const resultHeight = this.viewHTMLElement.scrollHeight\n \n \n const whiteSpace = this.style.whiteSpace\n this.style.whiteSpace = \"nowrap\"\n \n const resultWidth = this.viewHTMLElement.scrollWidth\n \n this.style.whiteSpace = whiteSpace\n \n \n this.style.height = height\n this.style.width = width\n \n this.style.left = left\n this.style.right = right\n this.style.bottom = bottom\n this.style.top = top\n \n if (temporarilyInViewTree) {\n document.body.removeChild(this.viewHTMLElement)\n if (this.superview) {\n if (nodeAboveThisView) {\n this.superview.viewHTMLElement.insertBefore(this.viewHTMLElement, nodeAboveThisView)\n }\n else {\n this.superview.viewHTMLElement.appendChild(this.viewHTMLElement)\n }\n }\n }\n \n result.height = resultHeight\n result.width = resultWidth\n \n this._setCachedIntrinsicSize(cacheKey, result)\n \n return result\n \n }\n \n \n private _intrinsicFrameFromSubviewFrames() {\n \n const framePoints: UIPoint[] = []\n this.subviews.forEach(subview => {\n if (subview == this._loadingView || subview.hasWeakFrame) {\n return\n }\n if (subview.usesVirtualLayoutingForIntrinsicSizing) {\n subview.layoutIfNeeded()\n }\n framePoints.push(subview.frame.min)\n framePoints.push(subview.frame.max)\n })\n // Since this is always called inside a virtual layouting context,\n // we will add padding based on the _contentInsets\n const resultFrame = UIRectangle.boundingBoxForPoints(framePoints)\n .rectangleWithInsets(\n -this._contentInsets?.left ?? 0,\n -this._contentInsets?.right ?? 0,\n -this._contentInsets?.bottom ?? 0,\n -this._contentInsets?.top ?? 0\n )\n return resultFrame\n }\n \n \n intrinsicContentWidth(constrainingHeight: number = 0): number {\n \n constrainingHeight = Math.max(constrainingHeight, 0)\n \n const cacheKey = this._getIntrinsicSizeCacheKey(constrainingHeight, 0)\n const cached = this._getCachedIntrinsicSize(cacheKey)\n if (cached) {\n return cached.width\n }\n \n if (this.usesVirtualLayoutingForIntrinsicSizing) {\n this.startVirtualLayout()\n let resultFrame: UIRectangle\n try {\n this.frame = this.frame.rectangleWithHeight(constrainingHeight).rectangleWithWidth(0)\n this.layoutIfNeeded()\n resultFrame = this._intrinsicFrameFromSubviewFrames()\n }\n finally {\n this.finishVirtualLayout()\n }\n \n this._setCachedIntrinsicSize(cacheKey, new UIRectangle(0, 0, resultFrame.height, resultFrame.width))\n return resultFrame.width\n }\n \n const size = this.intrinsicContentSizeWithConstraints(constrainingHeight, 0)\n return size.width\n \n }\n \n \n intrinsicContentHeight(constrainingWidth: number = 0): number {\n \n constrainingWidth = Math.max(constrainingWidth, 0)\n \n const cacheKey = this._getIntrinsicSizeCacheKey(0, constrainingWidth)\n const cached = this._getCachedIntrinsicSize(cacheKey)\n if (cached) {\n return cached.height\n }\n \n if (this.usesVirtualLayoutingForIntrinsicSizing) {\n this.startVirtualLayout()\n let resultFrame: UIRectangle\n try {\n this.frame = this.frame.rectangleWithWidth(constrainingWidth)\n this.layoutIfNeeded()\n resultFrame = this._intrinsicFrameFromSubviewFrames()\n }\n finally {\n this.finishVirtualLayout()\n }\n \n this._setCachedIntrinsicSize(cacheKey, new UIRectangle(0, 0, resultFrame.height, resultFrame.width))\n return resultFrame.height\n }\n \n const size = this.intrinsicContentSizeWithConstraints(0, constrainingWidth)\n \n if (isNaN(size.height)) {\n console.error(\"NaN in intrinsicContentHeight\", this)\n var asd = 1\n }\n \n return size.height\n \n }\n \n \n intrinsicContentSize(): UIRectangle {\n \n const cacheKey = this._getIntrinsicSizeCacheKey(0, 0)\n const cached = this._getCachedIntrinsicSize(cacheKey)\n if (cached) {\n return cached\n }\n \n if (this.usesVirtualLayoutingForIntrinsicSizing) {\n this.startVirtualLayout()\n let resultFrame: UIRectangle\n try {\n this.layoutIfNeeded()\n resultFrame = this._intrinsicFrameFromSubviewFrames()\n }\n finally {\n this.finishVirtualLayout()\n }\n \n this._setCachedIntrinsicSize(cacheKey, resultFrame)\n return resultFrame\n }\n \n return nil\n \n }\n \n \n}\n\n\nconst windowMouseMoveFunction = (event: MouseEvent) => {\n \n UIView._onWindowMouseMove(event)\n //pauseEvent(event, YES)\n \n}\nconst windowMouseUpOrLeaveFunction = (event: MouseEvent) => {\n \n const onWindowMouseUp = UIView._onWindowMouseup\n \n UIView._onWindowMouseMove = nil\n UIView._onWindowMouseup = nil\n \n // window.removeEventListener(\"mousemove\", windowMouseMoveFunction)\n // window.removeEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\n // document.body.removeEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n onWindowMouseUp(event)\n \n}\nwindow.addEventListener(\"mousemove\", windowMouseMoveFunction)\nwindow.addEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\ndocument.body.addEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n\nconst windowTouchFunction = () => {\n \n UIView._onWindowTouchMove = nil\n UIView._onWindowMouseup = nil\n // window.removeEventListener(\"touchmove\", UIView._onWindowTouchMove, true)\n // window.removeEventListener(\"mouseup\", windowTouchFunction, true)\n \n}\nwindow.addEventListener(\"touchmove\", UIView._onWindowTouchMove, true)\nwindow.addEventListener(\"mouseup\", windowTouchFunction, true)\n\nfunction props(obj: any) {\n const p = []\n for (; obj != null; obj = Object.getPrototypeOf(obj)) {\n const op = Object.getOwnPropertyNames(obj)\n for (let i = 0; i < op.length; i++) {\n if (p.indexOf(op[i]) == -1) {\n p.push(op[i])\n }\n }\n }\n return p\n}\n\nconst _UIViewPropertyKeys = props(UIView.prototype).concat(new UIView().allKeys)\nconst _UIViewControllerPropertyKeys = props(UIViewController.prototype)\n .concat(new UIViewController(nil).allKeys)\n\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAsC;AACtC,2BAAiB;AACjB,qBAAwB;AACxB,oBAAuB;AACvB,8BAAO;AAGP,iCAAoC;AACpC,sBAcO;AACP,qBAAwB;AACxB,yBAA4B;AAC5B,+BAAkC;AAClC,8BAAiC;AA0DjC,IAAI,CAAC,OAAO,YAAY;AAGpB,SAAO,aAAa;AAExB;AA8EO,SAAS,IAAI,YAAkC,QAAuB;AAEzE,SAAO,QAAQ,OAAO,CAAC,KAAK,KAAK,MAAG;AAzKxC;AAyK2C,iBAAM,QAAO,YAAO,OAAP,YAAa;AAAA,KAAK,EAAE;AAC5E;AAGO,SAAS,gBAAgB,QAAkB,SAAgC;AAC9E,UAAQ,IAAI,6CAA6C,OAAO,IAAI;AACpE,2BAAS,iBAAiB,iBAAiB,MAAM;AACrD;AAGO,MAAM,UAAN,cAAqB,yBAAS;AAAA,EAkPjC,YACI,YAAqB,WAAW,QAAO,WACvC,kBAAoD,MACpD,cAA6B,MAC7B,2BACF;AAEE,UAAM;AAtPV,mCAAmC;AAMnC,oBAAoB;AAGpB,4BAA4B;AAE5B,0BAA0E,oBAAI,IAAI;AAClF,4BAA+B,MAAM;AACjC,iBAAW,CAAC,UAAU,EAAE,SAAS,CAAC,KAAK,KAAK,gBAAgB;AACxD,QAAC,KAAK,MAAc,YAAY,SAAS;AAAA,MAC7C;AAAA,IACJ;AA2BA,gCAAkD,CAAC;AAInD,kCAA6F,CAAC;AAC9F,wCAA+D,CAAC;AAOhE,oBAAqB,CAAC;AAEtB,qBAAqB;AAErB,+BAA+B;AAC/B,wCAAwC;AACxC,gCAAgC,IAAI,uBAAQ,GAAG,CAAC;AAChD,gCAAgC,IAAI,uBAAQ,GAAG,CAAC;AAIhD,0BAAiB;AAGjB,iCAAwB;AAExB,0BAA0B;AAC1B,wBAAwB;AAExB,gBAAe,qBAAO;AAOtB,kCAAkC;AAIlC,kBAAiB;AACjB,6BAA6B;AAwC7B,SAAQ,aAAa;AAGrB,SAAQ,eAAe;AAEvB,2BAA4B,CAAC;AAuC7B,SAAQ,YAAqB;AAC7B,yCAAgC;AAChC,uCAA8B;AAK9B,SAAU,uBAAoD,CAAC;AAgD/D,kDAAyC;AAEzC,0BAAiB,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,EAAE;AAyzBxD,wBAAe;AAo1Bf,+BAA8B;AAmqD9B,wBAAe,QAAO;AA3xGlB,SAAK,oBAAoB,yBAAyB;AAIlD,YAAO,eAAe,QAAO;AAC7B,SAAK,eAAe,QAAO;AAE3B,SAAK,gBAAgB,CAAC;AAEtB,SAAK,qBAAqB,WAAW,iBAAiB,WAAW;AAEjE,SAAK,eAAe,CAAC;AAErB,SAAK,kBAAkB;AAEvB,SAAK,8BAA8B;AAEnC,SAAK,cAAc;AACnB,SAAK,eAAe;AAAA,EAExB;AAAA,EAzPA,IAAI,cAAkC;AAClC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,YAAY,MAAc;AA7MlC;AA8MQ,YAAI,oBAAG,IAAI,GAAG;AACV,WAAK,WAAW,IAAI;AAAA,IACxB,OACK;AACD,iBAAK,iBAAL,mBAAmB;AAAA,IACvB;AACA,SAAK,eAAe;AAAA,EAExB;AAAA,EAwGA,IAAW,QAAQ,WAAoB;AA9T3C;AA+TQ,SAAK,yBAAyB,CAAC;AAC/B,QAAI,WAAW;AACX,UAAI,KAAC,oBAAG,KAAK,YAAY,GAAG;AACxB,YAAI,QAAO,kBAAkB;AACzB,eAAK,eAAe,IAAI,QAAO,iBAAiB;AAAA,QACpD,OACK;AACD,kBAAQ,KAAK,yCAAyC;AACtD;AAAA,QACJ;AAAA,MACJ;AAGA,UAAI,KAAK,aAAa,aAAa,MAAM;AACrC,aAAK,WAAW,KAAK,YAAY;AAEjC,aAAK,aAAa,MAAM,SAAS;AAAA,MACrC;AAAA,IAKJ,OACK;AACD,iBAAK,iBAAL,mBAAmB;AAAA,IACvB;AAAA,EACJ;AAAA,EAEA,IAAW,UAAmB;AAC1B,eAAO,oBAAG,KAAK,YAAY,SAAK,oBAAG,KAAK,aAAa,SAAS;AAAA,EAClE;AAAA,EAwBA,OAAO,mCAAmC,YAA0B;AAChE,YAAO,2BAA2B,OAAO,UAAU;AAAA,EACvD;AAAA,EAEA,OAAO,yCAA+C;AAClD,YAAO,2BAA2B,MAAM;AAAA,EAC5C;AAAA,EAIA,WAAW,qBAA8B;AACrC,WAAO,KAAK,yBAAyB;AAAA,EACzC;AAAA,EAEA,IAAI,qBAA8B;AAC9B,WAAO,QAAO,yBAAyB;AAAA,EAC3C;AAAA,EAEA,qBAAqB;AACjB,YAAO,yBAAyB,QAAO,yBAAyB;AAAA,EACpE;AAAA,EAEA,sBAAsB;AAClB,QAAI,QAAO,2BAA2B,GAAG;AACrC,YAAM,IAAI,MAAM,kCAAkC;AAAA,IACtD;AACA,YAAO,yBAAyB,QAAO,yBAAyB;AAAA,EACpE;AAAA,EAWA,IAAI,gBAAgB;AAChB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,cAAc,QAAsE;AACpF,SAAK,iBAAiB;AACtB,SAAK,eAAe;AAAA,EACxB;AAAA,EAkCA,WAAW,YAAY;AACnB,WAAO,QAAO,eAAe;AAAA,EACjC;AAAA,EAoCA,OAAe,yCAAyC;AACpD,QAAI,KAAK,4BAA4B;AACjC;AAAA,IACJ;AAEA,SAAK,6BAA6B;AAGlC,WAAO,iBAAiB,UAAU,MAAM;AACpC,WAAK,4BAA4B;AAAA,IACrC,GAAG,EAAE,SAAS,KAAK,CAAC;AAGpB,UAAM,eAAe,IAAI,eAAe,MAAM;AAC1C,WAAK,4BAA4B;AAAA,IACrC,CAAC;AAGD,QAAI,SAAS,MAAM;AACf,mBAAa,QAAQ,SAAS,IAAI;AAAA,IACtC,OACK;AAED,eAAS,iBAAiB,oBAAoB,MAAM;AAChD,qBAAa,QAAQ,SAAS,IAAI;AAAA,MACtC,GAAG,EAAE,MAAM,KAAK,CAAC;AAAA,IACrB;AAGA,UAAM,mBAAmB,IAAI,iBAAiB,MAAM;AAChD,WAAK,4BAA4B;AAAA,IACrC,CAAC;AAED,UAAM,mBAAmB,MAAM;AAC3B,uBAAiB,QAAQ,SAAS,MAAM;AAAA,QACpC,WAAW;AAAA,QACX,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,iBAAiB,CAAC,SAAS,OAAO;AAAA,MACtC,CAAC;AAAA,IACL;AAEA,QAAI,SAAS,MAAM;AACf,uBAAiB;AAAA,IACrB,OACK;AACD,eAAS,iBAAiB,oBAAoB,kBAAkB,EAAE,MAAM,KAAK,CAAC;AAAA,IAClF;AAAA,EACJ;AAAA,EAMA,OAAe,qCAAqC;AAChD,QAAI,KAAK,6BACL,KAAK,qBAAqB,UAC1B,KAAK,sBAAsB,QAAW;AACtC;AAAA,IACJ;AAEA,UAAM,OAAO,SAAS;AACtB,UAAM,OAAO,SAAS;AAGtB,SAAK,mBAAmB,KAAK;AAAA,MACzB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACT;AAEA,SAAK,oBAAoB,KAAK;AAAA,MAC1B,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACT;AAEA,SAAK,4BAA4B;AAAA,EACrC;AAAA,EAEA,WAAW,YAAY;AACnB,SAAK,uCAAuC;AAC5C,SAAK,mCAAmC;AACxC,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,WAAW,aAAa;AACpB,SAAK,uCAAuC;AAC5C,SAAK,mCAAmC;AACxC,WAAO,KAAK;AAAA,EAChB;AAAA,EAMA,OAAO,gCAAgC;AACnC,SAAK,4BAA4B;AAAA,EACrC;AAAA,EAKA,oBAAoB;AAChB,SAAK,MAAM,OAAO;AAClB,SAAK,MAAM,MAAM;AACjB,SAAK,MAAM,YAAY;AAAA,EAC3B;AAAA,EAGA,qBAAqB;AACjB,SAAK,MAAM,OAAO;AAClB,SAAK,MAAM,YAAY;AAAA,EAC3B;AAAA,EAGA,qBAAqB;AACjB,SAAK,MAAM,MAAM;AACjB,SAAK,MAAM,YAAY;AAAA,EAC3B;AAAA,EAGA,qBACI,WACA,iBACA,aACF;AAEE,QAAI,KAAC,oBAAG,WAAW,GAAG;AAClB,oBAAc;AAAA,IAClB;AAEA,QAAI,KAAC,oBAAG,eAAe,GAAG;AAEtB,WAAK,mBAAmB,KAAK,cAAc,WAAW,WAAW;AAEjE,WAAK,MAAM,WAAW;AACtB,WAAK,MAAM,SAAS;AAAA,IAExB,OACK;AAED,WAAK,mBAAmB;AAAA,IAE5B;AAEA,YAAI,oBAAG,SAAS,GAAG;AACf,WAAK,gBAAgB,KAAK;AAAA,IAC9B;AAEA,SAAK,gBAAgB,iBAAiB;AACtC,SAAK,gBAAgB,eAAe;AACpC,SAAK,cAAc,KAAK,cAAc;AAAA,EAE1C;AAAA,EAGA,IAAI,uBAAuB,YAAqB;AAC5C,SAAK,0BAA0B;AAC/B,QAAI,CAAC,YAAY;AACb,WAAK,MAAM,UAAU,KAAK,MAAM,UAC5B;AAAA,IAGR,OACK;AACD,WAAK,MAAM,UAAU,KAAK,MAAM,UAC5B;AAAA,IAGR;AAAA,EACJ;AAAA,EAEA,IAAI,yBAAyB;AACzB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,iBAAiB;AACjB,WAAO,mBAAmB,KAAK,MAAM;AAAA,EACzC;AAAA,EAEU,gCAAgC;AACtC,QAAI,CAAC,KAAK,MAAM,iCAAiC;AAC7C,WAAK,uBAAuB;AAC5B,WAAK,MAAM,kCAAkC;AAAA,IACjD;AAAA,EACJ;AAAA,EAGA,yBAAyB;AAAA,EAIzB;AAAA,EAEA,kBAAkB,UAAkB,OAAe;AAC/C,UAAM,aAAa,QAAO,cAAc,QAAQ;AAChD,QAAI,CAAC,YAAY;AACb,cAAO,oBAAoB,UAAU,KAAK;AAAA,IAC9C;AAAA,EACJ;AAAA,EAEA,cAAc,WAAmB,aAAqB;AAClD,QAAI,SAAS,SAAS,eAAe,SAAS;AAC9C,QAAI,CAAC,QAAQ;AACT,eAAS,SAAS,cAAc,WAAW;AAAA,IAC/C;AACA,WAAO;AAAA,EACX;AAAA,EAGA,IAAW,kBAAkB;AACzB,WAAO,KAAK;AAAA,EAChB;AAAA,EAGA,IAAW,YAAY;AACnB,WAAO,KAAK,gBAAgB;AAAA,EAChC;AAAA,EAEA,aAAa,KAAa,eAAuB,YAA8D;AAE3G,SAAK,gBAAgB;AACrB,SAAK,oBAAoB;AACzB,SAAK,cAAc;AAEnB,UAAM,eAAe,qBAAO,gBAAgB;AAC5C,UAAM,SAAS,qBAAO,gBAAgB,aAAa,KAAK,cAAc,eAAe,UAAU;AAE/F,SAAK,YAAY,0BAAU;AAAA,EAE/B;AAAA,EAGU,iCAAiC;AACvC,QAAI,KAAK,iBAAiB,KAAK,mBAAmB;AAC9C,WAAK,aAAa,KAAK,eAAe,KAAK,mBAAmB,KAAK,WAAW;AAAA,IAClF;AAAA,EACJ;AAAA,EAEU,iDAAiD;AACvD,YAAI,oBAAG,KAAK,oBAAoB,GAAG;AAC/B,WAAK,YAAY,qBAAO,gBAAgB,yBAAyB,KAAK,oBAAoB;AAAA,IAC9F;AAAA,EACJ;AAAA,EAGA,IAAI,sBAAsB;AACtB,WAAO,KAAK;AAAA,EAChB;AAAA,EAGA,IAAI,oBAAoB,qBAAwD;AAC5E,SAAK,uBAAuB;AAC5B,SAAK,+CAA+C;AAAA,EACxD;AAAA,EAGA,IAAI,YAAY;AACZ,WAAO,KAAK,gBAAgB;AAAA,EAChC;AAAA,EAEA,IAAI,UAAU,WAAW;AACrB,QAAI,KAAK,aAAa,WAAW;AAC7B,WAAK,gBAAgB,gBAAY,uBAAM,WAAW,EAAE;AAAA,IACxD;AAAA,EACJ;AAAA,EAGA,IAAI,UAAU,WAAsC;AAChD,YAAI,kCAAiB,SAAS,GAAG;AAC7B,WAAK,gBAAgB,aAAa,SAAS,SAAS;AAAA,IACxD,OACK;AACD,WAAK,gBAAgB,gBAAgB,OAAO;AAAA,IAChD;AAAA,EACJ;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,KAAK,gBAAgB,aAAa,OAAO;AAAA,EACpD;AAAA,EAGA,IAAI,aAAa;AACb,WAAO,IAAI,+BAAY,GAAG,GAAG,KAAK,gBAAgB,cAAc,KAAK,gBAAgB,WAAW;AAAA,EACpG;AAAA,EAGA,IAAI,aAAuC;AACvC,QAAI,KAAC,oBAAG,KAAK,SAAS,GAAG;AACrB;AAAA,IACJ;AACA,QAAI,CAAG,KAAa,qBAAsB;AACtC,aAAO,KAAK,UAAU;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,WAAmB;AACnB,YAAI,oBAAG,KAAK,SAAS,GAAG;AACpB,aAAO,KAAK,UAAU;AAAA,IAC1B;AACA,WAAO;AAAA,EACX;AAAA,EAEA,IAAW,QAAQ,SAAkB;AACjC,SAAK,WAAW;AAChB,SAAK,oCAAoC;AAAA,EAC7C;AAAA,EAGA,IAAW,UAAmB;AAC1B,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,sCAAsC;AAClC,SAAK,SAAS,CAAC,KAAK;AACpB,SAAK,yBAAyB,KAAK;AAAA,EACvC;AAAA,EAGA,IAAW,WAAmB;AAC1B,WAAO,OAAO,KAAK,gBAAgB,aAAa,UAAU,CAAC;AAAA,EAC/D;AAAA,EAGA,IAAW,SAAS,OAAe;AAC/B,SAAK,gBAAgB,aAAa,YAAY,KAAK,KAAK;AAAA,EAC5D;AAAA,EAGA,IAAI,sBAA4D;AAE5D,QAAI,SAAgB,CAAC;AAErB,aAAS,cAAc,OAA6B;AAChD,aAAO,iBAAiB,UAAU,OAAO,eAAe,KAAK,MAAM,OAAO;AAAA,IAC9E;AAEA,aAAS,UAAU,OAA4B;AAC3C,aAAO,iBAAiB,SAAS,OAAO,eAAe,KAAK,MAAM,MAAM;AAAA,IAC5E;AAEA,SAAK,kBAAkB,QAAQ,UAAQ;AAEnC,YAAM,uBAAuB,SAEzB,QACA,iBAAyB,QACzB,yBAAmC,CAAC,GACpC,eAAe,qBACf,YAAY,GAId;AAj1Bd;AAm1BgB,YAAI;AACJ,cAAM,aAAgD,CAAC;AACvD,cAAM,YAA6C,CAAC;AAEpD,0CAAa,MAAM,EAAE,QAAQ,CAAC,OAAO,KAAK,gBAAgB;AAEtD,cAAI,QAAQ,OAAO;AAEf,mCAAuB,KAAK,GAAG;AAE/B,+BAAmB,EAAE,QAAQ,gBAAiB,MAAM,uBAAuB,KAAK,GAAG,EAAE;AACrF,wBAAY;AACZ;AAAA,UAEJ;AAGA,cACI,cAAc,KAAK,KACnB,CAAC,oBAAoB,SAAS,GAAG,KACjC,CAAC,8BAA8B,SAAS,GAAG,GAC7C;AACE,uBAAW,KAAK,EAAE,QAAQ,OAAO,IAAS,CAAC;AAAA,UAC/C;AACA,cACI,gBACA,UAAU,KAAK,KACf,CAAC,oBAAoB,SAAS,GAAG,KACjC,CAAC,8BAA8B,SAAS,GAAG,GAC7C;AACE,sBAAU,KAAK,EAAE,OAAO,OAAO,IAAS,CAAC;AAAA,UAC7C;AAAA,QAEJ,CAAC;AAED,YAAI,CAAC,oBAAoB,cAAc;AAEnC,oBAAU,KAAK,EAAE,QAAQ,WAAS;AAE9B,gBAAI,MAAM,IAAI,WAAW,GAAG,GAAG;AAE3B,wBAAU,cAAc,KAAK;AAC7B,wBAAU,KAAK,KAAK;AAAA,YAExB;AAAA,UAEJ,CAAC;AAED,oBAAU;AAAA,YAAK,iBACX,YAAY,MAAM,KAAK,CAAC,OAAO,UAAU;AACrC,kBAAI,QAAQ,OAAO;AACf,uCAAuB,KAAK,YAAY,MAAM,MAAM,KAAK;AACzD,mCAAmB,EAAE,QAAQ,gBAAiB,MAAM,uBAAuB,KAAK,GAAG,EAAE;AACrF,uBAAO;AAAA,cACX;AACA,qBAAO;AAAA,YACX,CAAC;AAAA,UACL;AAAA,QAEJ;AAeA,cAAI,gEAAkB,WAAlB,mBAA0B,gBAA1B,mBAAuC,SAAQ,UAAU;AAEzD,cAAI,MAAM;AAAA,QAEd;AAEA,cAAMA,UAAS;AAAA,UACX,YAAY;AAAA,UACZ;AAAA,QACJ;AAEA,eAAOA;AAAA,MAEX,EAAE,KAAK,IAAI;AAEX,YAAM,uBAAuB,qBAAqB,KAAK,cAAc;AAErE,UAAI,6DAAsB,YAAY;AAElC,eAAO,KAAK,qBAAqB,UAAU;AAAA,MAE/C;AAEA,YAAM,aAAa,qBAAqB,IAAI;AAE5C,UAAI,yCAAY,YAAY;AAExB,eAAO,KAAK,WAAW,UAAU;AAAA,MAErC,WACS,KAAK,aAAa,KAAK,aAAa,MAAM;AAE/C,eAAO,KAAK,EAAE,QAAQ,MAAM,KAAK,cAAc,KAAK,SAAS,QAAQ,IAAI,EAAE,CAAC;AAAA,MAEhF;AAAA,IAgBJ,CAAC;AAED,WAAO;AAAA,EAEX;AAAA,EAEA,IAAI,eAAe;AACf,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,aAAa,cAAc;AAC3B,SAAK,gBAAgB;AAAA,EACzB;AAAA,EAEA,cAAc,YAAoB;AAG9B,QAAI,KAAC,oBAAG,UAAU,GAAG;AACjB,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,KAAK,aAAa,QAAQ,UAAU;AAClD,QAAI,QAAQ,IAAI;AACZ,aAAO;AAAA,IACX;AACA,WAAO;AAAA,EAEX;AAAA,EAGA,cAAc,YAAoB;AAE9B,QAAI,KAAC,oBAAG,UAAU,GAAG;AACjB;AAAA,IACJ;AAEA,QAAI,CAAC,KAAK,cAAc,UAAU,GAAG;AACjC,WAAK,cAAc,KAAK,UAAU;AAAA,IACtC;AAAA,EAEJ;AAAA,EAGA,iBAAiB,YAAoB;AAGjC,QAAI,KAAC,oBAAG,UAAU,GAAG;AACjB;AAAA,IACJ;AAEA,UAAM,QAAQ,KAAK,aAAa,QAAQ,UAAU;AAClD,QAAI,QAAQ,IAAI;AACZ,WAAK,aAAa,OAAO,OAAO,CAAC;AAAA,IACrC;AAAA,EAEJ;AAAA,EAGA,OAAO,sBAAsB,WAAuC;AAChE,UAAM,kBAAkB,SAAS,eAAe,SAAS;AACzD,YAAI,wBAAO,eAAe,GAAG;AACzB;AAAA,IACJ;AAEA,WAAO,gBAAgB;AAAA,EAC3B;AAAA,EAGA,OAAO,UAAU,SAAiB,IAAa;AAC3C,QAAI,IAAI;AACJ,YAAM,WAAW,SAAS,eAAe,EAAE;AAC3C,UAAI,UAAU;AACV,YAAI,SAAS,gBAAgB,SAAS;AAClC,mBAAS,cAAc;AAAA,QAC3B;AACA;AAAA,MACJ;AAAA,IACJ;AAEA,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,QAAI,IAAI;AACJ,YAAM,KAAK;AAAA,IACf;AAEA,UAAM,cAAc;AACpB,aAAS,KAAK,YAAY,KAAK;AAAA,EACnC;AAAA,EAEA,OAAO,oBAAoB,UAAkB,OAAe;AACxD,SAAK,UAAU,WAAW,QAAQ,QAAQ,IAAI;AAAA,EAClD;AAAA,EAEA,OAAO,cAAc,UAAkB;AAInC,UAAM,gBAAiB,WAAY;AAC/B,eAAS,UAAU,KAAa;AAC5B,YAAI,CAAC,KAAK;AACN,iBAAO;AAAA,QACX;AACA,cAAM,OAAO,GAAG,EAAE,QAAQ,kBAAkB,MAAM;AAClD,eAAO,IAAI,QAAQ,UAAU,GAAG,EAAE,KAAK;AAAA,MAC3C;AAEA,eAAS,MAAM,KAAa,IAAY;AACpC,eAAO,IAAI,MAAM,EAAE,EAAE,IAAI,OAAK,EAAE,KAAK,CAAC,EAAE,OAAO,OAAK,CAAC;AAAA,MACzD;AAEA,eAAS,YAAY,SAAyB,KAAY;AACtD,eAAO,UAAU,IAAI,KAAK,OAAK,QAAQ,QAAQ,CAAC,KAAK,CAAC,IAAI;AAAA,MAC9D;AAEA,aAAO,SAAUC,WAAkB;AAC/B,cAAM,aAAa,MAAM,UAAUA,SAAQ,GAAG,GAAG;AACjD,cAAM,SAAS,MAAM,KAAK,OAAO,SAAS,WAAW;AACrD,cAAM,aAAa,OAAO,IAAI,CAAC,MAAM,MAAM,KAAK,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;AAC5E,cAAM,WAAW,WAAW,OAAO,CAAC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;AAEhE,eAAO,SAAS,OAAO,CAAC,MAAM,YAAY,UAAU,EAAE,YAAY,GAAG,UAAU,CAAC;AAAA,MACpF;AAAA,IACJ,EAAG;AAEH,WAAO,cAAc,QAAQ;AAAA,EAqBjC;AAAA,EAEA,IAAI,QAAQ;AACR,WAAO,KAAK,gBAAgB;AAAA,EAChC;AAAA,EAGA,IAAI,gBAAgB;AAChB,WAAO,iBAAiB,KAAK,eAAe;AAAA,EAChD;AAAA,EAEA,IAAW,SAAkB;AACzB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAW,OAAO,GAAY;AAE1B,SAAK,YAAY;AAEjB,QAAI,KAAK,WAAW;AAChB,WAAK,MAAM,aAAa;AAAA,IAC5B,OACK;AACD,WAAK,MAAM,aAAa;AAAA,IAC5B;AAAA,EAGJ;AAAA,EAGA,WAAW,UAAU,OAAe;AAEhC,YAAO,aAAa;AAEpB,UAAM,OAAO;AACb,UAAM,QAAQ,MAAM;AACpB,UAAM,kBAAkB,qBAAO,KAAK,mBAAmB,KAAK;AAC5D,oBAAgB,MAAM,kBAAkB;AACxC,oBAAgB,MAAM,YAAY,WAAW,OAAO;AACpD,oBAAgB,MAAM,QAAQ,QAAQ;AAAA,EAE1C;AAAA,EAEA,WAAW,YAAY;AACnB,WAAO,QAAO;AAAA,EAClB;AAAA,EAGA,IAAI,MAAM,OAAe;AA/oC7B;AAipCQ,SAAK,SAAS;AAEd,UAAM,OAAO;AAGb,UAAM,kBAAkB,KAAK;AAC7B,oBAAgB,MAAM,kBAAkB;AACxC,oBAAgB,MAAM,YAAY,gBAAgB,MAAM,UAAU;AAAA,OAC7D,2BAAgB,MAAM,UAAU;AAAA,QAC7B,IAAI,OAAO,iBAAiB,GAAG;AAAA,MACnC,MAFC,mBAEE,iBAFF,YAEkB;AAAA,MACnB;AAAA,IACJ,IAAI,WAAW,OAAO;AAItB,QAAI,KAAK,mBAAmB;AAExB,WAAK,SAAS,KAAK,OAAO,KAAK,MAAM,QAAQ,mBAAG;AAAA,IAEpD;AAAA,EAEJ;AAAA,EAEA,IAAI,QAAQ;AAER,WAAO,KAAK;AAAA,EAEhB;AAAA,EAIA,2BAA2B;AAAA,EAE3B;AAAA,EAGA,IAAW,QAAQ;AAtrCvB;AAurCQ,QAAI;AACJ,QAAI,CAAC,KAAK,oBAAoB;AAC1B,gBAAS,UAAK,WAAL,mBAAa;AAAA,IAC1B,OACK;AACD,gBAAS,UAAK,8BAAL,mBAAgC;AAAA,IAC7C;AACA,QAAI,CAAC,QAAQ;AACT,eAAS,IAAI;AAAA,SACT,gBAAK,yBAAL,mBAA2B,YAAY,SAAvC,YAA+C,KAAK,gBAAgB;AAAA,SACpE,gBAAK,yBAAL,mBAA2B,YAAY,QAAvC,YAA8C,KAAK,gBAAgB;AAAA,SACnE,gBAAK,yBAAL,mBAA2B,YAAY,WAAvC,YAAiD,KAAK,gBAAgB;AAAA,SACtE,gBAAK,yBAAL,mBAA2B,YAAY,UAAvC,YAAgD,KAAK,gBAAgB;AAAA,MACzE;AACA,aAAO,SAAS;AAAA,IACpB;AACA,WAAO;AAAA,EACX;AAAA,EAEA,IAAW,MAAM,WAA8C;AAC3D,YAAI,oBAAG,SAAS,GAAG;AACf,WAAK,SAAS,WAAW,UAAU,MAAM;AAAA,IAC7C;AAAA,EACJ;AAAA,EAOA,IAAW,UAAU,WAA8C;AAC/D,SAAK,eAAe;AACpB,SAAK,QAAQ;AAAA,EACjB;AAAA,EAGA,IAAW,YAAY,WAA8C;AACjE,SAAK,eAAe;AACpB,SAAK,QAAQ;AAAA,EACjB;AAAA,EAGA,SAAS,WAA8C,SAAS,GAAG,yBAAyB,oBAAI;AAE5F,UAAM,QAA6C,KAAK,UAAU,IAAI,+BAAY,qBAAK,qBAAK,qBAAK,mBAAG;AAEpG,QAAI,CAAC,WAAW;AACZ;AAAA,IACJ;AAEA,cAAU,YAAY;AAEtB,QAAI,UAAU,QAAW;AACrB,gBAAU,SAAS;AAAA,IACvB;AACA,QAAI,CAAC,KAAK,oBAAoB;AAC1B,WAAK,SAAS;AAAA,IAClB,OACK;AACD,WAAK,4BAA4B;AAAA,IACrC;AAEA,QAAI,SAAS,SAAS,uBAAO,MAAM;AAAA,MAC/B;AAAA,IAAS,KAAK,MAAM,UAAU,UAAU,UAAU,CAAC,wBAAwB;AAC3E;AAAA,IACJ;AAEA,QAAI,KAAK,mBAAmB;AACxB,gBAAU,MAAM,IAAI,KAAK,KAAK;AAAA,IAClC;AAEA,QAAI,CAAC,KAAK,oBAAoB;AAC1B,cAAO;AAAA,QACH,KAAK;AAAA,QACL,UAAU,QAAQ;AAAA,QAClB,UAAU,QAAQ;AAAA,QAClB,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU;AAAA,QACV,KAAK;AAAA,MACT;AAAA,IACJ;AAEA,UAAM,oBAAqB,MAAM,OAAO,gBAAgB,UAAU,OAAO,gBACpE,MAAM,MAAM,gBAAgB,UAAU,MAAM;AACjD,QAAI,qBAAqB,wBAAwB;AAC7C,WAAK,eAAe;AACpB,WAAK,gBAAgB,KAAK,MAAM;AAAA,IACpC;AAAA,EAEJ;AAAA,EAEA,IAAI,SAAS;AAnxCjB;AAqxCQ,QAAI;AACJ,QAAI,CAAC,KAAK,oBAAoB;AAC1B,eAAS,KAAK;AAAA,IAClB,OACK;AACD,eAAS,KAAK;AAAA,IAClB;AAEA,QAAI;AACJ,YAAI,wBAAO,MAAM,GAAG;AAChB,UAAI;AACJ,UAAI,CAAC,KAAK,oBAAoB;AAC1B,sBAAc,KAAK;AAAA,MACvB,OACK;AACD,sBAAc,KAAK;AAAA,MACvB;AACA,eAAS,oCAAe,IAAI;AAAA,QACxB;AAAA,QACA;AAAA,SACA,gBAAK,yBAAL,mBAA2B,YAAY,WAAvC,YAAiD,KAAK,gBAAgB;AAAA,SACtE,gBAAK,yBAAL,mBAA2B,YAAY,UAAvC,YAAgD,KAAK,gBAAgB;AAAA,MACzE;AACA,UAAI,CAAC,KAAK,sBAAsB,KAAK,sBAAsB,KAAK,gBAAgB,aAAa;AACzF,aAAK,cAAc;AAAA,MACvB,WACS,KAAK,sBAAsB,KAAK,gBAAgB,aAAa;AAClE,aAAK,iCAAiC;AAAA,MAC1C;AAAA,IAEJ,OACK;AACD,UAAI;AACJ,UAAI,CAAC,KAAK,oBAAoB;AAC1B,gBAAQ,KAAK;AAAA,MACjB,OACK;AACD,iBAAQ,UAAK,8BAAL,YAAkC,KAAK;AAAA,MACnD;AACA,eAAS,MAAM,KAAK;AACpB,aAAO,IAAI;AACX,aAAO,IAAI;AAAA,IACf;AAEA,WAAO,YAAY;AACnB,WAAO,WAAW;AAElB,WAAO;AAAA,EACX;AAAA,EAGA,IAAI,OAAO,WAAwB;AAC/B,UAAM,QAAQ,KAAK;AACnB,UAAM,WAAW,IAAI,+BAAY,MAAM,QAAQ,GAAG,MAAM,QAAQ,GAAG,UAAU,QAAQ,UAAU,KAAK;AAEpG,aAAS,SAAS,MAAM;AACxB,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,gBAAgB,QAAqB;AAAA,EAGrC;AAAA,EAEA,UAAU,OAA4B;AAElC,SAAK,uBAAuB;AAC5B,SAAK,cAAc;AACnB,SAAK,iCAAiC;AACtC,SAAK,eAAe;AAEpB,SAAK,gBAAgB,IAAI,+BAAY,GAAG,GAAG,MAAM,YAAY,QAAQ,MAAM,YAAY,KAAK,CAAC;AAAA,EAEjG;AAAA,EAEA,IAAI,iBAAyB;AACzB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,eAAe,OAAe;AAE9B,SAAK,kBAAkB;AAEvB,SAAK,SAAS,KAAK,OAAO,KAAK,MAAM,QAAQ,mBAAG;AAAA,EAEpD;AAAA,EAEA,YACI,OAAwB,qBACxB,QAAyB,qBACzB,SAA0B,qBAC1B,MAAuB,qBACvB,SAA0B,qBAC1B,QAAyB,qBAC3B;AAEE,UAAM,iBAAiB,KAAK;AAE5B,SAAK,iBAAiB,QAAQ,IAAI;AAClC,SAAK,iBAAiB,SAAS,KAAK;AACpC,SAAK,iBAAiB,UAAU,MAAM;AACtC,SAAK,iBAAiB,OAAO,GAAG;AAChC,SAAK,iBAAiB,UAAU,MAAM;AACtC,SAAK,iBAAiB,SAAS,KAAK;AAEpC,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO,UAAU,eAAe,UAAU,OAAO,SAAS,eAAe,OAAO;AAChF,WAAK,eAAe;AACpB,WAAK,gBAAgB,MAAM;AAAA,IAC/B;AAAA,EAEJ;AAAA,EAEA,SAAS,QAA0B,OAAyB;AAExD,UAAM,iBAAiB,KAAK;AAE5B,SAAK,iBAAiB,UAAU,MAAM;AACtC,SAAK,iBAAiB,SAAS,KAAK;AAEpC,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO,UAAU,eAAe,UAAU,OAAO,SAAS,eAAe,OAAO;AAChF,WAAK,eAAe;AACpB,WAAK,gBAAgB,MAAM;AAAA,IAC/B;AAAA,EAEJ;AAAA,EAEA,YAAY,QAA0B,OAAyB;AAE3D,UAAM,iBAAiB,KAAK;AAE5B,SAAK,iBAAiB,aAAa,MAAM;AACzC,SAAK,iBAAiB,YAAY,KAAK;AAEvC,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO,UAAU,eAAe,UAAU,OAAO,SAAS,eAAe,OAAO;AAChF,WAAK,eAAe;AACpB,WAAK,gBAAgB,MAAM;AAAA,IAC/B;AAAA,EAEJ;AAAA,EAEA,YAAY,QAA0B,OAAyB;AAE3D,UAAM,iBAAiB,KAAK;AAE5B,SAAK,iBAAiB,aAAa,MAAM;AACzC,SAAK,iBAAiB,YAAY,KAAK;AAEvC,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO,UAAU,eAAe,UAAU,OAAO,SAAS,eAAe,OAAO;AAChF,WAAK,eAAe;AACpB,WAAK,gBAAgB,MAAM;AAAA,IAC/B;AAAA,EAEJ;AAAA,EAEA,UAAU,QAA0B;AAEhC,UAAM,iBAAiB,KAAK;AAE5B,SAAK,iBAAiB,UAAU,MAAM;AAEtC,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO,UAAU,eAAe,UAAU,OAAO,SAAS,eAAe,OAAO;AAChF,WAAK,eAAe;AACpB,WAAK,gBAAgB,MAAM;AAAA,IAC/B;AAAA,EAEJ;AAAA,EAEA,WAAW,MAAwB,OAAyB,QAA0B,KAAuB;AAEzG,UAAM,iBAAiB,KAAK;AAE5B,SAAK,iBAAiB,cAAc,IAAI;AACxC,SAAK,iBAAiB,eAAe,KAAK;AAC1C,SAAK,iBAAiB,gBAAgB,MAAM;AAC5C,SAAK,iBAAiB,aAAa,GAAG;AAEtC,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO,UAAU,eAAe,UAAU,OAAO,SAAS,eAAe,OAAO;AAChF,WAAK,eAAe;AACpB,WAAK,gBAAgB,MAAM;AAAA,IAC/B;AAAA,EAEJ;AAAA,EAGA,WAAW,SAA2B;AAElC,UAAM,iBAAiB,KAAK;AAE5B,SAAK,iBAAiB,WAAW,OAAO;AAExC,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO,UAAU,eAAe,UAAU,OAAO,SAAS,eAAe,OAAO;AAChF,WAAK,eAAe;AACpB,WAAK,gBAAgB,MAAM;AAAA,IAC/B;AAAA,EAEJ;AAAA,EAGA,YAAY,MAAwB,OAAyB,QAA0B,KAAuB;AAE1G,UAAM,iBAAiB,KAAK;AAE5B,SAAK,iBAAiB,eAAe,IAAI;AACzC,SAAK,iBAAiB,gBAAgB,KAAK;AAC3C,SAAK,iBAAiB,iBAAiB,MAAM;AAC7C,SAAK,iBAAiB,cAAc,GAAG;AAEvC,UAAM,SAAS,KAAK;AACpB,QAAI,OAAO,UAAU,eAAe,UAAU,OAAO,SAAS,eAAe,OAAO;AAChF,WAAK,eAAe;AACpB,WAAK,gBAAgB,MAAM;AAAA,IAC/B;AAAA,EAEJ;AAAA,EAGA,UACI,SAA0B,qBAC1B,QAAyB,GACzB,QAAiB,uBAAQ,YACzB,QAAgB,SAClB;AAEE,SAAK,iBAAiB,eAAe,KAAK;AAE1C,SAAK,iBAAiB,gBAAgB,MAAM;AAE5C,SAAK,gBAAgB,cAAc;AAEnC,SAAK,iBAAiB,eAAe,KAAK;AAAA,EAE9C;AAAA,EAEA,iBAAiB,cAAsB,OAAyB;AAE5D,QAAI;AAEA,cAAI,wBAAO,KAAK,GAAG;AACf;AAAA,MACJ;AACA,cAAI,4BAAW,KAAK,KAAM,MAAiB,WAAW;AAClD,gBAAQ,KAAM,MAAiB,eAAe;AAAA,MAClD;AAGA,WAAK,MAAM,gBAAgB;AAAA,IAE/B,SACO,WAAP;AAEI,cAAQ,IAAI,SAAS;AAAA,IAEzB;AAAA,EAEJ;AAAA,EAGA,IAAI,yBAAyB;AACzB,WAAQ,KAAK,MAAM,iBAAiB;AAAA,EACxC;AAAA,EAEA,IAAI,uBAAuB,wBAAwB;AAC/C,QAAI,wBAAwB;AACxB,WAAK,MAAM,gBAAgB;AAAA,IAC/B,OACK;AACD,WAAK,MAAM,gBAAgB;AAAA,IAC/B;AAAA,EACJ;AAAA,EAGA,IAAI,kBAAkB;AAClB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,gBAAgB,iBAA0B;AAC1C,UAAM,WAAW,KAAK;AACtB,QAAI,aAAa,iBAAiB;AAC9B;AAAA,IACJ;AACA,SACI,qCAAU,gBACV,SAAS,iBAAgB,mDAAiB,gBAC1C,SAAS,oBAAmB,mDAAiB,iBAC/C;AACE;AAAA,IACJ;AACA,QAAI,EAAC,qCAAU,gBAAe,EAAC,mDAAiB,iBAC5C,qCAAU,kBAAgB,mDAAiB,cAAa;AACxD;AAAA,IACJ;AACA,SAAK,mBAAmB;AACxB,SAAK,gBAAgB,kBAAkB;AAAA,EAC3C;AAAA,EAEA,IAAI,kBAAmC;AACnC,QAAI,CAAC,KAAK,kBAAkB;AACxB,YAAM,UAAU,KAAK;AACrB,WAAK,mBAAmB,IAAI,MAAM,QAAQ,OAAO;AAAA,QAC7C,KAAK,CAAC,QAAQ,UAAU,UAAmB;AAEvC,gBAAM,kBAAkB,GAAG,KAAK,gBAAgB;AAEhD,gBAAM,gBAAgB,uBAAQ,iBAAiB,IAAI,eAAe;AAClE,cAAI,eAAe;AACf,0BAAc,cAAc;AAC5B,0BAAc,iBAAiB;AAAA,UACnC;AAEA,gBAAM,cAAc;AACpB,gBAAM,iBAAiB;AAEvB,cAAI,MAAM,aAAa;AACnB,mCAAQ,YAAY,KAAK,IAAI,QAAQ,KAAK,CAAC;AAAA,UAC/C;AAEA,iCAAQ,iBAAiB,IAAI,iBAAiB,KAAK;AAEnD,kBAAQ,IAAI,QAAQ,UAAU,MAAM,WAAW;AAC/C,iBAAO;AAAA,QAEX;AAAA,MACJ,CAAC;AAAA,IACL;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAUA,qBAAqB,UAAkB,MAAgB,UAAwB;AAE3E,UAAM,WAAW,KAAK,eAAe,IAAI,QAAQ;AAEjD,QAAI,UAAU;AACV,iBAAW,OAAO,SAAS,MAAM;AAC7B,+BAAQ,YAAY,KAAK,KAAK,gBAAgB;AAAA,MAClD;AAAA,IACJ;AAEA,SAAK,eAAe,IAAI,UAAU,EAAE,MAAM,SAAS,CAAC;AAEpD,eAAW,OAAO,MAAM;AACpB,6BAAQ,UAAU,KAAK,KAAK,gBAAgB;AAAA,IAChD;AAEA;AAAC,IAAC,KAAK,MAAc,YAAY,SAAS;AAAA,EAE9C;AAAA,EAGA,IAAI,QAAQ;AACR,WAAO,IAAK,KAAK,MAAM;AAAA,EAC3B;AAAA,EAGA,IAAI,MAAM,OAAO;AACb,SAAK,MAAM,UAAU,KAAK;AAAA,EAC9B;AAAA,EAGA,OAAO,+CACH,aACA,UACA,OACA,cAAc,iCACd,mBACA,8BACF;AAEE,aAAS,mCAAmC;AACxC,OAAC,gCAAgC,qBAAK;AACtC,MAAC,YAAyC,QAAQ,UAAQ;AACtD,YAAI,gBAAgB,SAAQ;AACxB,eAAK,mBAAmB;AAAA,QAC5B;AAAA,MACJ,CAAC;AAAA,IACL;AAEA,QAAI,kCAAY;AAGZ,UAAI,yBAAS,EAAE,yBAAyB,QAAQ,UAAU,gCAAgC;AAAA,IAE9F;AAGA,QAAI,EAAE,uBAAuB,QAAQ;AACjC,oBAAc,CAAC,WAAW;AAAA,IAC9B;AAEA,UAAM,mBAA0B,CAAC;AACjC,UAAM,sBAA6B,CAAC;AACpC,UAAM,mBAA0B,CAAC;AACjC,UAAM,oBAA2B,CAAC;AAElC,aAAS,SAAS,MAA2B;AACzC,iBAAO,oBAAG,KAAK,eAAe;AAAA,IAClC;AAEA,aAAS,IAAI,GAAG,IAAK,YAAoB,QAAQ,KAAK;AAElD,UAAI,OAAQ,YAAyC;AAErD,UAAI,SAAS,IAAI,GAAG;AAChB,eAAO,KAAK;AAAA,MAChB;AAGA,WAAK,iBAAiB,iBAAiB,qBAAqB,IAAI;AAEhE,uBAAiB,KAAK,KAAK,MAAM,UAAU;AAC3C,0BAAoB,KAAK,KAAK,MAAM,kBAAkB;AACtD,uBAAiB,KAAK,KAAK,MAAM,eAAe;AAChD,wBAAkB,KAAK,KAAK,MAAM,wBAAwB;AAE1D,WAAK,MAAM,aAAa;AACxB,WAAK,MAAM,qBAAqB,KAAK,WAAW;AAChD,WAAK,MAAM,kBAAkB,KAAK,QAAQ;AAC1C,WAAK,MAAM,2BAA2B;AAAA,IAE1C;AAEA,sBAAkB;AAElB,UAAM,mBAAmB;AAAA,MACrB,qBAAqB;AAAA,MACrB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,oBAAoB,KAAK,IAAI;AAAA,IACjC;AAEA,aAAS,8BAA8B;AACnC,eAASC,KAAI,GAAGA,KAAK,YAAoB,QAAQA,MAAK;AAClD,YAAI,OAAQ,YAAyCA;AACrD,YAAI,SAAS,IAAI,GAAG;AAChB,iBAAO,KAAK;AAAA,QAChB;AACA,aAAK,MAAM,aAAa;AACxB,aAAK,MAAM,qBAAqB,KAAK,WAAW;AAChD,aAAK,MAAM,kBAAkB,KAAK,QAAQ;AAC1C,aAAK,MAAM,aAAa,iBAAiBA;AACzC,aAAK,MAAM,qBAAqB,oBAAoBA;AACpD,aAAK,MAAM,kBAAkB,iBAAiBA;AAC9C,aAAK,MAAM,2BAA2B,kBAAkBA;AAAA,MAC5D;AAAA,IACJ;AAEA,aAAS,oBAAuC,OAA6C;AACzF,UAAI,OAAO,MAAM;AACjB,UAAI,CAAC,MAAM;AACP;AAAA,MACJ;AACA,UAAI,SAAS,IAAI,GAAG;AAChB,eAAO,KAAK;AAAA,MAChB;AACA,WAAK,MAAM,aAAa,iBAAiB;AACzC,WAAK,MAAM,qBAAqB,oBAAoB;AACpD,WAAK,MAAM,kBAAkB,iBAAiB;AAC9C,WAAK,MAAM,2BAA2B,kBAAkB;AAExD,uCAAiC;AAGjC,WAAK,oBAAoB,iBAAiB,qBAAqB,IAAI;AAAA,IAEvE;AAEA,aAAS,8BAA8B;AACnC,eAASA,KAAI,GAAGA,KAAK,YAAoB,QAAQA,MAAK;AAElD,YAAI,OAAQ,YAAyCA;AAErD,YAAI,SAAS,IAAI,GAAG;AAChB,iBAAO,KAAK;AAAA,QAChB;AAEA,aAAK,MAAM,aAAa,iBAAiBA;AACzC,aAAK,MAAM,qBAAqB,oBAAoBA;AACpD,aAAK,MAAM,kBAAkB,iBAAiBA;AAC9C,aAAK,MAAM,2BAA2B,kBAAkBA;AAGxD,aAAK,oBAAoB,iBAAiB,qBAAqB,IAAI;AAAA,MAEvE;AAAA,IAGJ;AAEA,WAAO;AAAA,EAEX;AAAA,EAEA,qBAAqB;AAAA,EAGrB;AAAA,EAUA,OAAO,4BACH,SACA,MACA,KACA,OACA,QACA,SAAS,GACT,iBAAiB,IACnB;AApyDN;AAsyDQ,QAAI,KAAC,oBAAG,OAAO,KAAK,CAAC,QAAQ,kBAAkB,CAAC,QAAQ,aAAa,gBAAgB,GAAG;AACpF;AAAA,IACJ;AAEA,YAAI,oBAAG,MAAM,GAAG;AACZ,eAAS,OAAO,eAAe;AAAA,IACnC;AAEA,YAAI,oBAAG,KAAK,GAAG;AACX,cAAQ,MAAM,eAAe;AAAA,IACjC;AAIA,qBACI,iBAAkB,KAAM,eAAe,SACtC,IAAK,eAAe,aAAa;AAEtC,UAAM,QAAQ,QAAQ;AAEtB,QAAI,QAAQ,QAAQ;AAEhB,uBAAiB,mBAAkB,iBAAM,UAAU;AAAA,QAC/C,IAAI,OAAO,iBAAiB,GAAG;AAAA,MACnC,MAFmC,mBAEhC,iBAFgC,YAEhB;AAAA,IAIvB;AAEA,YAAI,wBAAO,MAAM,GAAG;AAGhB,eAAS;AAAA,IAEb;AAKA,YAAI,wBAAO,KAAK,GAAG;AAGf,cAAQ;AAAA,IAEZ;AAKA,QAAI,eAAe,KAAK;AAExB,YAAI,wBAAO,MAAM,GAAG;AAGhB,qBAAe;AAAA,IAEnB;AAKA,UAAM,YAAY;AAClB,UAAM,SAAS;AACf,UAAM,QAAQ;AACd,UAAM,SAAS;AAAA,EAInB;AAAA,EAGA,OAAO,kBACH,eACA,mBACA,kBACF;AAEE,UAAM,OAAO,IAAI,WAAW,KAAK;AAEjC,YAAI,oBAAG,iBAAiB,SAAK,oBAAG,kBAAkB,MAAM,GAAG;AACvD,WAAK,eAAe,WAAW,aAAa,MAAM,mBAAmB,EAAE,UAAU,KAAK,CAAC,CAAC;AAAA,IAC5F;AAEA,YAAI,oBAAG,gBAAgB,SAAK,oBAAG,iBAAiB,MAAM,GAAG;AACrD,WAAK,eAAe,gBAAgB;AAAA,IACxC;AAEA,UAAM,WAAwC,CAAC;AAC/C,aAAS,OAAO,KAAK,UAAU;AAE3B,UAAI,CAAC,KAAK,SAAS,eAAe,GAAG,GAAG;AACpC;AAAA,MACJ;AAEA,UAAI,UAAU;AAEd,UAAI;AAEA,kBAAU,cAAc,cAAc,MAAM,GAAG;AAAA,MAEnD,SACO,OAAP;AAAA,MAIA;AAEA,UAAI,EAAE,WAAW,CAAC,QAAQ,kBAAkB,CAAC,QAAQ,aAAa,gBAAgB,MAAM,SAAS;AAC7F,gBAAQ,aAAa,QAAQ,YAAY,SAAS;AAClD,iBAAS,OAAO;AAAA,MACpB;AAAA,IAEJ;AAEA,QAAI,eAAuB;AAE3B,QAAI,cAAc,QAAQ;AACtB,qBAAe,cAAc;AAAA,IACjC;AAEA,UAAM,eAAe,WAAY;AAC7B,WAAK;AAAA,QACD,gBAAgB,cAAc,cAAc,OAAO;AAAA,QACnD,gBAAgB,cAAc,eAAe,OAAO;AAAA,MACxD;AACA,WAAK,OAAO,KAAK,UAAU;AAEvB,YAAI,CAAC,KAAK,SAAS,eAAe,GAAG,GAAG;AACpC;AAAA,QACJ;AAEA,cAAM,UAAU,KAAK,SAAS;AAE9B,YAAI,SAAS,MAAM;AAEf,kBAAO;AAAA,YACH,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YAER,SAAS,KAAK,OAAO,MAAM;AAAA,YAE3B,SAAS,KAAK,OAAO;AAAA,UACzB;AAAA,QACJ;AAAA,MACJ;AAEA,mBAAa,kBAAkB;AAAA,IAEnC;AAEA,iBAAa;AACb,WAAO;AAAA,EAEX;AAAA,EAGA,OAAO,2BAA2B,MAAkB;AAEhD,QAAI,iCAAW;AAGX,cAAQ,QAAQ,EAAE,KAAK,IAAI;AAAA,IAE/B,OACK;AAED,aAAO,sBAAsB,IAAI;AAAA,IAErC;AAAA,EAEJ;AAAA,EAKA,OAAO,8BAA8B;AAEjC,QAAI,QAAO,iCAAiC;AACxC;AAAA,IACJ;AAEA,YAAO,kCAAkC;AACzC,YAAO,2BAA2B,MAAM;AACpC,cAAO,kCAAkC;AACzC,cAAO,oBAAoB;AAAA,IAC/B,CAAC;AAAA,EAEL;AAAA,EAGA,OAAO,sBAAsB;AAx+DjC;AA0+DQ,QAAI,CAAC,QAAO,iCAAiC;AACzC,cAAO,4BAA4B;AAAA,IACvC;AAEA,QAAI,CAAC,QAAO,eAAe,QAAQ;AAC/B;AAAA,IACJ;AAEA,iBAAO,wBAAP,mBAA4B;AAE5B,UAAM,gBAAgB;AACtB,QAAI,YAAY;AAChB,UAAM,eAAe,oBAAI,IAAoB;AAE7C,WAAO,QAAO,eAAe,SAAS,KAAK,YAAY,eAAe;AAElE,mBAAO,wBAAP,mBAA4B,mBAAmB;AAE/C,YAAM,iBAAiB,QAAO;AAC9B,cAAO,iBAAiB,CAAC;AAEzB,YAAM,eAAe,oBAAI,IAAoB;AAE7C,eAAS,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;AAC5C,cAAM,OAAO,eAAe;AAC5B,cAAM,cAAc,aAAa,IAAI,IAAI,KAAK;AAG9C,YAAI,eAAe,GAAG;AAClB,kBAAQ,KAAK,+BAA+B,IAAI;AAChD,yDAAoB,gBAAgB,IAAI;AACxC;AAAA,QACJ;AAEA,YAAI,CAAC,aAAa,IAAI,IAAI,GAAG;AACzB,uBAAa,IAAI,MAAM,KAAK,kBAAkB,MAAM;AAAA,QACxD;AAAA,MACJ;AAEA,YAAM,cAAc,MAAM,KAAK,aAAa,KAAK,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM;AAC/D,eAAO,aAAa,IAAI,CAAC,IAAK,aAAa,IAAI,CAAC;AAAA,MACpD,CAAC;AAED,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AACzC,cAAM,OAAO,YAAY;AACzB,aAAK,eAAe;AACpB,qBAAa,IAAI,OAAO,aAAa,IAAI,IAAI,KAAK,KAAK,CAAC;AACxD,qBAAO,wBAAP,mBAA4B,cAAc;AAAA,MAC9C;AAEA;AAAA,IACJ;AAEA,iBAAO,wBAAP,mBAA4B,oBAAoB;AAAA,EAIpD;AAAA,EAKA,iBAAiB;AAxiErB;AA0iEQ,QAAI,KAAK,iBAAiB,QAAO,eAAe,SAAS,IAAI,GAAG;AAC5D;AAAA,IACJ;AAEA,SAAK,gBAAgB;AACrB,YAAO,eAAe,KAAK,IAAI;AAC/B,SAAK,wBAAwB;AAE7B,iBAAO,wBAAP,mBAA4B,0BAA0B;AAWtD,QAAI,CAAC,QAAO,iCAAiC;AACzC,cAAO,4BAA4B;AAAA,IACvC;AAAA,EAEJ;AAAA,EAGA,IAAI,cAAc;AAEd,WAAO,KAAK;AAAA,EAEhB;AAAA,EAGA,iBAAiB;AAEb,QAAI,CAAC,KAAK,eAAe;AACrB;AAAA,IACJ;AAEA,QAAI,CAAC,KAAK,oBAAoB;AAC1B,WAAK,gBAAgB;AAAA,IACzB;AAEA,QAAI;AAEA,UAAI,KAAK,OAAO,QAAQ,GAAG;AACvB;AAAA,MACJ;AAEA,WAAK,eAAe;AAAA,IAExB,SACO,WAAP;AAEI,cAAQ,IAAI,SAAS;AAAA,IAEzB;AAAA,EAEJ;AAAA,EAGA,iBAAiB;AAvmErB;AAymEQ,SAAK,mBAAmB;AAExB,QAAI,CAAC,KAAK,oBAAoB;AAC1B,WAAK,gBAAgB;AAAA,IACzB;AAGA,SAAI,UAAK,gBAAL,mBAAkB,QAAQ;AAC1B,WAAK,wBAAwB,QAAO,kBAAkB,KAAK,iBAAiB,MAAM,KAAK,WAAW;AAAA,IACtG;AACA,eAAK,0BAAL;AAEA,eAAK,mBAAL,mBAAqB;AAErB,SAAK,sBAAsB;AAE3B,aAAS,IAAI,GAAG,MAAI,UAAK,aAAL,mBAAe,SAAQ,KAAK;AAE5C,YAAM,UAAU,KAAK,SAAS;AAC9B,cAAQ,yBAAyB;AAAA,IAErC;AAMA,SAAK,kBAAkB;AAEvB,QAAI,KAAK,cAAc;AACnB,WAAK,aAAa,YAAY,KAAK;AAAA,IACvC;AAAA,EAEJ;AAAA,EAEA,wBAAwB;AACpB,aAAS,IAAI,GAAG,IAAI,KAAK,aAAa,QAAQ,KAAK;AAC/C,YAAM,aAAa,KAAK,aAAa;AACrC,UAAI,cAAc,CAAC,KAAK,gBAAgB,UAAU,SAAS,UAAU,GAAG;AACpE,aAAK,gBAAgB,UAAU,IAAI,UAAU;AAAA,MACjD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,qBAAqB;AArpEzB;AAupEQ,eAAK,mBAAL,mBAAqB;AAAA,EAEzB;AAAA,EAEA,oBAAoB;AA3pExB;AA4pEQ,eAAK,mBAAL,mBAAqB;AAcrB,UAAM,gBAAgB,KAAK,MAAM,OAAO;AACxC,QAAI,CAAC,KAAK,0BAAsB,oBAAG,KAAK,SAAS,KAAK,KAAK,oBAAoB;AAC3E,UAAI,kBAAkB,KAAK,qBAAqB;AAC5C,aAAK,sBAAsB;AAC3B,aAAK,UAAU,eAAe;AAAA,MAClC;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,KAAK;AAAA,EAChB;AAAA,EAGA,IAAI,YAAY,aAAa;AACzB,SAAK,eAAe;AAAA,EACxB;AAAA,EAEA,cAAc,YAAiB;AAC3B,SAAK,YAAY,KAAK,UAAU;AAAA,EACpC;AAAA,EAEA,+BAA+B,mBAA6B;AACxD,SAAK,cAAc,KAAK,YAAY,OAAO,WAAW,aAAa;AAAA,MAC/D;AAAA,MACA,EAAE,UAAU,KAAK;AAAA,IACrB,CAAC;AAAA,EACL;AAAA,EAEA,OAAO,mBACH,MACA,WACA,UACA,QACA,aACA,YACA,UACA,UACU;AAEV,QAAI,eAAe;AACnB,QAAI,SAAS;AACb,QAAI,MAAM;AACN,UAAI,KAAK,iBAAiB,KAAK,cAAc,OAAM,GAAG;AAClD,uBAAe;AACf,eAAO,KAAK;AAAA,MAChB;AACA,eAAS,KAAK;AAAA,IAClB;AAEA,QAAI,iBAAiB;AACrB,QAAI,WAAW;AACf,QAAI,QAAQ;AACR,UAAI,OAAO,iBAAiB,KAAK,cAAc,OAAM,GAAG;AACpD,yBAAiB;AACjB,iBAAS,OAAO;AAAA,MACpB;AACA,iBAAW,OAAO;AAAA,IACtB;AAEA,UAAM,aAAa;AAAA,MAEf,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IAEJ;AAEA,WAAO;AAAA,EAEX;AAAA,EA8BA,cAAc,QAAoC;AAC9C,QAAI;AAEJ,QAAI;AACA,0BAAoB,KAAK,gBAAgB,cAAc,MAAM,MAAM;AAAA,IACvE,SACO,OAAP;AACI,cAAQ,IAAI,KAAK;AAAA,IACrB;AAGA,QAAI,qBAAqB,kBAAkB,QAAQ;AAC/C,aAAO,kBAAkB;AAAA,IAC7B;AACA;AAAA,EACJ;AAAA,EAEA,8BAA8B;AAC1B,UAAM,SAAS,KAAK,OAAO;AAC3B,QAAI,SAAS,IAAI,+BAAY,OAAO,GAAG,OAAO,GAAG,GAAG,CAAC;AACrD,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC3C,YAAM,UAAU,KAAK,SAAS;AAC9B,UAAI,QAAQ,QAAQ;AACpB,YAAM,8BAA8B,QAAQ,4BAA4B;AACxE,cAAQ,MAAM,yBAAyB,2BAA2B;AAClE,eAAS,OAAO,yBAAyB,KAAK;AAAA,IAClD;AACA,WAAO;AAAA,EACX;AAAA,EAEA,WAAW,MAAc;AAGrB,QAAI,KAAC,oBAAG,IAAI,GAAG;AACX,aAAO;AAAA,IACX;AAEA,aAAS,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;AAC3C,YAAM,UAAU,KAAK,SAAS;AAC9B,UAAI,WAAW,MAAM;AACjB,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,oBAAoB;AACpB,UAAM,UAAkB,KAAK,gBAAgB,0BAAiC,CAAC,GAAG;AAClF,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,oBAAoB;AACpB,UAAM,UAAkB,KAAK,gBAAgB,sBAA6B,CAAC,GAAG;AAC9E,WAAO;AAAA,EACX;AAAA,EAGA,WAAW,MAAc,WAAoB;AAEzC,QAAI,CAAC,KAAK,WAAW,IAAI,SAAK,oBAAG,IAAI,GAAG;AAEpC,WAAK,oBAAoB,IAAI;AAE7B,cAAI,oBAAG,SAAS,GAAG;AACf,aAAK,gBAAgB,aAAa,KAAK,iBAAiB,UAAU,gBAAgB,WAAW;AAC7F,aAAK,SAAS,qBAAqB,KAAK,SAAS,QAAQ,SAAS,GAAG,IAAI;AAAA,MAC7E,OACK;AACD,aAAK,gBAAgB,YAAY,KAAK,eAAe;AACrD,aAAK,SAAS,KAAK,IAAI;AAAA,MAC3B;AAEA,WAAK,OAAO,KAAK;AACjB,WAAK,mBAAmB,IAAI;AAE5B,UAAI,KAAK,aAAa,KAAK,oBAAoB;AAE3C,aAAK,wBAAwB;AAAA,UACzB,MAAM,QAAO,mBAAmB;AAAA,UAChC,YAAY;AAAA,QAChB,CAAC;AAAA,MAEL;AAEA,WAAK,eAAe;AAAA,IAExB;AAAA,EAEJ;AAAA,EAGA,YAAY,OAAiB;AACzB,UAAM,QAAQ,UAAQ,KAAK,WAAW,IAAI,CAAC;AAAA,EAC/C;AAAA,EAEA,qBAAqB,MAA0B,WAAoB;AAC/D,iCAAM,WAAW,MAAM;AACvB,WAAO;AAAA,EACX;AAAA,EAGA,0BAA0B;AAEtB,YAAI,oBAAG,KAAK,SAAS,GAAG;AAEpB,YAAM,aAAa,KAAK,UAAU,SAAS;AAE3C,UAAI,cAAc,MAAM;AACpB;AAAA,MACJ;AAEA,WAAK,UAAU,SAAS,cAAc,IAAI;AAC1C,WAAK,UAAU,SAAS,qBAAqB,GAAG,IAAI;AACpD,WAAK,UAAU,gBAAgB,aAAa,KAAK,iBAAiB,WAAW,eAAe;AAAA,IAEhG;AAAA,EAEJ;AAAA,EAGA,uBAAuB;AAEnB,YAAI,oBAAG,KAAK,SAAS,GAAG;AAEpB,YAAM,UAAU,KAAK,UAAU,SAAS;AAExC,UAAI,WAAW,MAAM;AACjB;AAAA,MACJ;AAEA,WAAK,UAAU,SAAS,cAAc,IAAI;AAC1C,WAAK,UAAU,SAAS,KAAK,IAAI;AACjC,WAAK,UAAU,gBAAgB,YAAY,KAAK,eAAe;AAAA,IAEnE;AAAA,EAEJ;AAAA,EAGA,oBAAoB;AAChB,SAAK,gBAAgB;AAAA,EACzB;AAAA,EAEA,sBAAsB;AAClB,YAAI,oBAAG,KAAK,SAAS,GAAG;AACpB,WAAK,qBAAqB,UAAQ;AAC9B,aAAK,KAAK;AACV,aAAK,kBAAkB;AAAA,MAC3B,CAAC;AACD,WAAK,kBAAkB;AACvB,YAAM,QAAQ,KAAK,UAAU,SAAS,QAAQ,IAAI;AAClD,UAAI,QAAQ,IAAI;AACZ,aAAK,UAAU,SAAS,OAAO,OAAO,CAAC;AACvC,aAAK,UAAU,gBAAgB,YAAY,KAAK,eAAe;AAC/D,aAAK,YAAY;AACjB,aAAK,wBAAwB;AAAA,UACzB,MAAM,QAAO,mBAAmB;AAAA,UAChC,YAAY;AAAA,QAChB,CAAC;AAAA,MAEL;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,aAAa;AAAA,EAGb;AAAA,EAEA,oBAAoB,WAAmB;AACnC,SAAK,+BAA+B;AACpC,SAAK,+CAA+C;AAAA,EACxD;AAAA,EAEA,mBAAmB,WAAmB;AAClC,SAAK,YAAY;AAAA,EACrB;AAAA,EAOA,2CAA2C;AACvC,SAAK,qBAAqB,UAAQ,KAAK,+BAA+B,CAAC;AAAA,EAC3E;AAAA,EAGA,iCAAiC;AA/8ErC;AAg9EQ,QAAI;AACA,YAAM,cAAc,KAAK;AAEzB,YAAM,kBACF,iBAAY,KAAK,gBAAc,CAAC,WAAW,KAAK,WAAW,WAAW,CAAC,MAAvE,YACA,YAAY;AAEhB,cAAI,oBAAG,cAAc,GAAG;AACpB,cAAM,aAAa,0BAAe,OAAe,gBAA9B,mBAA2C,SAA3C,YAAmD;AACtE,aAAK,gBAAgB;AAAA,UACjB;AAAA,UACA,YAAY,MAAM,eAAe,OAAO,MAAM,KAAK,MAAM,OAAO;AAAA,QACpE;AAAA,MACJ;AAAA,IAEJ,SACO,WAAP;AAAA,IAIA;AAAA,EACJ;AAAA,EAGA,qBAAqB;AAEjB,YAAO,eAAe,QAAQ,KAAK,eAAe;AAGlD,QAAI,QAAO,gCAAgC;AACvC,WAAK,+BAA+B;AAAA,IACxC;AAAA,EAGJ;AAAA,EAEA,uBAAuB;AAAA,EAIvB;AAAA,EAEA,yBAAyB;AAErB,YAAO,eAAe,UAAU,KAAK,eAAe;AAIpD,eAAW,CAAC,KAAK,KAAK,KAAK,uBAAQ,kBAAkB;AACjD,UAAI,IAAI,WAAW,GAAG,KAAK,eAAe,GAAG;AACzC,cAAM,cAAc;AACpB,cAAM,iBAAiB;AACvB,+BAAQ,iBAAiB,OAAO,GAAG;AAAA,MACvC;AAAA,IACJ;AAGA,eAAW,EAAE,KAAK,KAAK,KAAK,eAAe,OAAO,GAAG;AACjD,iBAAW,OAAO,MAAM;AACpB,+BAAQ,YAAY,KAAK,KAAK,gBAAgB;AAAA,MAClD;AAAA,IACJ;AACA,SAAK,eAAe,MAAM;AAAA,EAE9B;AAAA,EAGA,IAAI,qBAAqB;AACrB,QAAI,UAA4C,KAAK;AACrD,aAAS,IAAI,GAAG,SAAS,IAAI,GAAG;AAC5B,UAAI,QAAQ,iBAAiB,QAAQ,iBAAiB,SAAS,MAAM;AACjE,eAAO;AAAA,MACX;AACA,gBAAU,QAAQ;AAAA,IACtB;AACA,WAAO;AAAA,EACX;AAAA,EAGA,IAAI,oBAAoB;AACpB,UAAM,SAAS,CAAC;AAChB,QAAI,OAA2B;AAC/B,aAAS,IAAI,OAAG,oBAAG,IAAI,GAAG,IAAI,GAAG;AAC7B,aAAO,KAAK,IAAI;AAChB,aAAO,KAAK;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,kCAAiD;AACjD,UAAM,SAAS,CAAC;AAChB,QAAI,OAA+D,KAAK;AACxE,aAAS,IAAI,OAAG,oBAAG,IAAI,GAAG,IAAI,GAAG;AAC7B,UAAI,CAAC,MAAM;AACP,eAAO;AAAA,MACX;AACA,aAAO,KAAK,IAAI;AAChB,aAAO,KAAK;AAAA,IAChB;AACA,WAAO;AAAA,EACX;AAAA,EAGA,gCAAgC;AAC5B,SAAK,kBAAkB,QAAQ,EAAE,aAAa,eAAe;AAAA,EACjE;AAAA,EAGA,6BAA6B;AACzB,SAAK,8BAA8B;AACnC,SAAK,eAAe;AAAA,EACxB;AAAA,EAGA,QAAQ;AACJ,SAAK,gBAAgB,MAAM;AAAA,EAC/B;AAAA,EAGA,OAAO;AACH,SAAK,gBAAgB,KAAK;AAAA,EAC9B;AAAA,EAEA,IAAI,YAAqB;AACrB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,UAAU,WAAoB;AA/kFtC;AAglFQ,QAAI,WAAW;AACX,WAAK,YAAY;AAAA,IACrB,OACK;AACD,iBAAK,mBAAL;AAAA,IACJ;AAAA,EACJ;AAAA,EAGA,YACI,qBAKI,CAAC,GACP;AAhmFN;AAkmFQ,QAAI,KAAK,WAAW;AAChB;AAAA,IACJ;AAGA,UAAM,4BAA2B,wBAAmB,6BAAnB,YAAgD,CAC7E,QACA,cACC,oBAAG,MAAM,MAAM;AAEpB,QAAI,gCAAuC,CAAC;AAC5C,QAAI;AACJ,QAAI;AAEJ,UAAM,mBAAmB,CAAC,QAAgB,UAAiB;AAhnFnE,UAAAC;AAknFY,UAAI,iBAAiB,cAAc,yBAAyB,QAAQ,KAAK,GAAG;AAExE,YAAI,CAAC,KAAK,WAAW;AAEjB,uBAAa,KAAK,MAAM;AAExB,iBAAO,uBAAuB,IAAI,uBAAQ,GAAG,CAAC;AAE9C,kBAAQ,OAAO;AAGf,iBAAO,qBAAqB,UAAQ;AAGhC,iBAAK,uBAAuB,QAAO,aAAa,eAAe,KAAK;AAAA,UAExE,CAAC;AAED,0CAAgC,MAAM,aAAa,oBAAoB;AAAA,YACnE,OAAO,EAAE,QAAQ,OAAO;AAAA,YACxB,wBAAwB;AAAA,YACxB,qBAAqB;AAAA,YACrB,2BAA2B,MAAS;AAAG;AAAA;AAAA,UAC3C,CAAC;AAED,eAAK,YAAY;AAAA,QAErB;AAEA,eAAO,QAAQ,OAAO,MACjB,eAAe,WAAW,IAAI,OAAO,qBAAqB,CAAC,EAC3D,eAAe,WAAW,IAAI,OAAO,qBAAqB,CAAC;AAEhE,SAAAA,MAAA,mBAAmB,0BAAnB,gBAAAA,IAAA,yBAA2C,MAAM;AAAA,MAErD,WACS,KAAK,WAAW;AAErB,6BAAqB,QAAQ,KAAK;AAAA,MAEtC;AAAA,IAEJ;AAEA,UAAM,uBAAuB,CAAC,QAAgB,UAAiB;AA9pFvE,UAAAA;AAgqFY,cAAI,wBAAO,KAAK,KAAK,CAAC,KAAK,WAAW;AAClC;AAAA,MACJ;AAEA,qCAAO;AAAA,QACH,CAAC,MAAM,UAAU;AAEb,eAAK,oBAAoB,8BAA8B,MAAM;AAAA,QAGjE;AAAA;AAGJ,OAAAA,MAAA,mBAAmB,0BAAnB,gBAAAA,IAAA,yBAA2C,MAAM;AAEjD,WAAK,YAAY;AAAA,IAErB;AAEA,UAAM,kBAAkB,MAAM;AAE1B,UAAI,CAAC,KAAK,WAAW;AACjB;AAAA,MACJ;AAEA,WAAK,4BAA4B,QAAO,aAAa,aAAa,gBAAgB;AAClF,WAAK;AAAA,QACD,CAAC,QAAO,aAAa,WAAW,QAAO,aAAa,aAAa;AAAA,QACjE;AAAA,MACJ;AAEA,WAAK,aAAa;AAElB,WAAK,iBAAiB;AAAA,IAE1B;AAEA,SAAK,8BAA8B,cAAc;AACjD,SAAK,8BAA8B,UAAU,gBAAgB;AAI7D,SAAK,aAAa;AAElB,SAAK,iBAAiB;AAAA,EAE1B;AAAA,EAEA,IAAI,cAAuB;AACvB,WAAO,KAAK;AAAA,EAChB;AAAA,EAGA,IAAI,YAAY,aAAsB;AArtF1C;AAstFQ,QAAI,aAAa;AACb,WAAK,cAAc;AAAA,IACvB,OACK;AACD,iBAAK,qBAAL;AAAA,IACJ;AAAA,EACJ;AAAA,EAGA,cACI,qBAUI,CAAC,GACP;AA3uFN;AA6uFQ,QAAI,KAAK,aAAa;AAClB;AAAA,IACJ;AAEA,UAAM,kBAAiB,wBAAmB,mBAAnB,YAAqC,KAAK;AAEjE,UAAM,kBAAc,oBAAG,mBAAmB,WAAW,MAAE,0BAAS,mBAAmB,cAAc,IAAI,CAAC,EAC7F,SAAK,0BAAS,MAAS,CAAC,KAC7B,eAAe,MAAM,eACrB,KAAK,MAAM,eAAe;AAE9B,UAAM,eAAc,8BAAmB,gBAAnB,mBAAgC,gBAAhC,YAGhB,uBAAQ,iBAAiB;AAG7B,UAAM,iBAAgB,wBAAmB,kBAAnB,YAAoC;AAC1D,UAAM,cAAa,wBAAmB,eAAnB,YAAiC;AAEpD,QAAI,YAAY;AAChB,QAAI,YAAY;AAEhB,UAAM,oBAAoB,MAAM;AApwFxC,UAAAA;AAqwFY,kBAAY;AACZ,kBAAY;AACZ,OAAAA,MAAA,mBAAmB,wBAAnB,gBAAAA,IAAA,yBAAyC,MAAM;AAAA,IACnD;AAEA,UAAM,kBAAkB,MAAM;AA1wFtC,UAAAA;AA2wFY,YAAM,QAAQ,KAAK;AACnB,UAAI,KAAK,MAAM,WAAW;AACtB,cAAM,SAAS;AAAA,UACX,MAAM;AAAA,cACN,qBAAAC,SAAK,KAAK,iBAAiB,KAAK,MAAM,SAAS;AAAA,QACnD,EAAE,IAAI;AAAA,MACV;AACA,UAAI,KAAK,MAAM,WAAW;AACtB,cAAM,SAAS;AAAA,UACX;AAAA,cACA,qBAAAA,SAAK,KAAK,iBAAiB,KAAK,MAAM,SAAS;AAAA,QACnD,EAAE,IAAI;AAAA,MACV;AACA,kBAAY,YAAY,KAAK,MAAM,SAAS,MAAM;AAClD,WAAK,QAAQ;AACb,OAAAD,MAAA,mBAAmB,wBAAnB,gBAAAA,IAAA,yBAAyC,MAAM;AAAA,IACnD;AAGA,UAAM,uBAAuB,CAAC,oBAA4B,QAAgB,UAAiB;AAEvF,UAAI,iBAAiB,YAAY;AAE7B,cAAM,SAAS,KAAK,gBAAgB,sBAAsB,EAAE,QAAQ,KAAK,gBAAgB;AACzF,cAAM,iBAAiB,IAAI,IAAI;AAC/B,YAAI,YAAY,MAAM,YAAY;AAClC,cAAM,YAAY,QAAO;AAEzB,YAAI,YAAY,iBAAiB,KAAK,IAAI,WAAW;AACjD,uBAAa,YAAY,YAAY,WAAW;AAChD,cAAI,aAAa,GAAG;AAChB;AAAA,UACJ;AACA,sBAAY;AACZ,sBAAY;AAAA,QAChB;AAEA,YAAI,YAAY,KAAK,IAAI,aAAa,iBAAiB,GAAG;AACtD,uBAAa,YAAY,iBAAiB,YAAY,WAAW;AACjE,cAAI,aAAa,GAAG;AAChB;AAAA,UACJ;AACA,sBAAY,YAAY;AACxB,sBAAY;AAAA,QAChB;AAEA,cAAM,QAAQ,KAAK;AACnB,cAAM,cAAe,iBAAiB,YAAa;AACnD,YAAI,aAAa,MAAM,QAAQ;AAE/B,YAAI,KAAK,MAAM,UAAU;AACrB,uBAAa;AAAA,YACT;AAAA,gBACA,qBAAAC,SAAK,KAAK,iBAAiB,KAAK,MAAM,QAAQ;AAAA,YAC9C;AAAA,UACJ,EAAE,IAAI;AAAA,QACV;AAEA,YAAI,KAAK,MAAM,UAAU;AACrB,uBAAa;AAAA,YACT;AAAA,gBACA,qBAAAA,SAAK,KAAK,iBAAiB,KAAK,MAAM,QAAQ;AAAA,UAClD,EAAE,IAAI;AAAA,QACV;AAEA,qBAAa,YAAY,MAAM,QAAQ,cAAc,YAAY;AACjE,aAAK,QAAQ,MAAM,mBAAmB,YAAY,kBAAkB;AACpE,wBAAgB;AAAA,MAEpB;AAAA,IAEJ;AAEA,UAAM,uBAAuB,CAAC,oBAA4B,QAAgB,UAAiB;AAEvF,UAAI,iBAAiB,YAAY;AAE7B,cAAM,SAAS,KAAK,gBAAgB,sBAAsB,EAAE,QAAQ,KAAK,gBAAgB;AACzF,cAAM,iBAAiB,IAAI,IAAI;AAC/B,YAAI,YAAY,MAAM,YAAY;AAClC,cAAM,YAAY,QAAO;AAEzB,YAAI,YAAY,iBAAiB,KAAK,IAAI,WAAW;AACjD,uBAAa,YAAY,YAAY,WAAW;AAChD,cAAI,aAAa,GAAG;AAChB;AAAA,UACJ;AACA,sBAAY;AACZ,sBAAY;AAAA,QAChB;AAEA,YAAI,YAAY,KAAK,IAAI,aAAa,iBAAiB,GAAG;AACtD,uBAAa,YAAY,iBAAiB,YAAY,WAAW;AACjE,cAAI,aAAa,GAAG;AAChB;AAAA,UACJ;AACA,sBAAY,YAAY;AACxB,sBAAY;AAAA,QAChB;AAEA,cAAM,QAAQ,KAAK;AACnB,cAAM,eAAgB,iBAAiB,YAAa;AACpD,YAAI,cAAc,MAAM,SAAS;AAEjC,YAAI,KAAK,MAAM,WAAW;AACtB,wBAAc;AAAA,YACV;AAAA,gBACA,qBAAAA,SAAK,KAAK,iBAAiB,KAAK,MAAM,SAAS;AAAA,YAC/C;AAAA,UACJ,EAAE,IAAI;AAAA,QACV;AAEA,YAAI,KAAK,MAAM,WAAW;AACtB,wBAAc;AAAA,YACV;AAAA,gBACA,qBAAAA,SAAK,KAAK,iBAAiB,KAAK,MAAM,SAAS;AAAA,UACnD,EAAE,IAAI;AAAA,QACV;AAEA,qBAAa,YAAY,MAAM,SAAS,eAAe,aAAa;AACpE,aAAK,QAAQ,MAAM,oBAAoB,aAAa,kBAAkB;AACtE,wBAAgB;AAAA,MAEpB;AAAA,IAEJ;AAGA,UAAM,WAAW,IAAI,QAAO,EAAE,qBAAqB;AAAA,MAC/C,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,KAAK;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,aAAS,8BAA8B,cAAc,qBAAqB,KAAK,MAAM,CAAC;AACtF,aAAS,8BAA8B,YAAY;AAEnD,UAAM,YAAY,IAAI,QAAO,EAAE,qBAAqB;AAAA,MAChD,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,cAAU,8BAA8B,cAAc,qBAAqB,KAAK,MAAM,CAAC;AACvF,cAAU,8BAA8B,YAAY;AAGpD,UAAM,aAAa,IAAI,QAAO,EAAE,qBAAqB;AAAA,MACjD,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,eAAW,8BAA8B,cAAc,qBAAqB,KAAK,MAAM,CAAC;AACxF,eAAW,8BAA8B,YAAY;AAGrD,UAAM,UAAU,IAAI,QAAO,EAAE,qBAAqB;AAAA,MAC9C,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,YAAQ,8BAA8B,cAAc,qBAAqB,KAAK,MAAM,CAAC;AACrF,YAAQ,8BAA8B,YAAY;AAGlD,UAAM,wBAAwB,CAAC,QAAgB,UAAiB;AAC5D,2BAAqB,GAAG,QAAQ,KAAK;AACrC,2BAAqB,GAAG,QAAQ,KAAK;AAAA,IACzC;AAGA,UAAM,mBAAmB,IAAI,QAAO,EAAE,qBAAqB;AAAA,MACvD,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,UAAU;AAAA,UACV,KAAK;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,qBAAiB,8BAA8B,cAAc;AAC7D,qBAAiB,8BAA8B,YAAY;AAE3D,UAAM,oBAAoB,IAAI,QAAO,EAAE,qBAAqB;AAAA,MACxD,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,OAAO;AAAA,UACP,KAAK;AAAA,UACL,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,sBAAkB,8BAA8B,cAAc;AAC9D,sBAAkB,8BAA8B,YAAY;AAG5D,UAAM,wBAAwB,CAAC,QAAgB,UAAiB;AAC5D,2BAAqB,GAAG,QAAQ,KAAK;AACrC,2BAAqB,GAAG,QAAQ,KAAK;AAAA,IACzC;AAEA,UAAM,uBAAuB,IAAI,QAAO,EAAE,qBAAqB;AAAA,MAC3D,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,yBAAqB,8BAA8B,cAAc;AACjE,yBAAqB,8BAA8B,YAAY;AAG/D,UAAM,yBAAyB,IAAI,QAAO,EAAE,qBAAqB;AAAA,MAC7D,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,2BAAuB,8BAA8B,cAAc;AACnE,2BAAuB,8BAA8B,YAAY;AAGjE,UAAM,wBAAwB,CAAC,QAAgB,UAAiB;AAC5D,2BAAqB,GAAG,QAAQ,KAAK;AACrC,2BAAqB,GAAG,QAAQ,KAAK;AAAA,IACzC;AAGA,UAAM,0BAA0B,IAAI,QAAO,EAAE,qBAAqB;AAAA,MAC9D,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,4BAAwB,8BAA8B,cAAc;AACpE,4BAAwB,8BAA8B,YAAY;AAElE,UAAM,yBAAyB,IAAI,QAAO,EAAE,qBAAqB;AAAA,MAC7D,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,2BAAuB,8BAA8B,cAAc;AACnE,2BAAuB,8BAA8B,YAAY;AAGjE,UAAM,wBAAwB,CAAC,QAAgB,UAAiB;AAC5D,2BAAqB,GAAG,QAAQ,KAAK;AACrC,2BAAqB,GAAG,QAAQ,KAAK;AAAA,IACzC;AAEA,UAAM,sBAAsB,IAAI,QAAO,EAAE,qBAAqB;AAAA,MAC1D,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,OAAO;AAAA,UACP,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,wBAAoB,8BAA8B,cAAc;AAChE,wBAAoB,8BAA8B,YAAY;AAG9D,UAAM,oBAAoB,IAAI,QAAO,EAAE,qBAAqB;AAAA,MACxD,kBAAkB;AAAA,QACd,WAAW;AAAA,QACX,OAAO;AAAA,UACH,UAAU;AAAA,UACV,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,UAAU;AAAA,UACV,KAAK;AAAA,UACL,OAAO;AAAA,UACP,QAAQ;AAAA,UACR,iBAAiB;AAAA,UACjB,eAAe;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,2BAA2B,MAAS;AAAG;AAAA;AAAA,MACvC,wBAAwB,MAAS;AAAG;AAAA;AAAA,MACpC,qBAAqB;AAAA,IACzB,CAAC;AACD,sBAAkB,8BAA8B,cAAc;AAC9D,sBAAkB,8BAA8B,YAAY;AAG5D,UAAM,QAAQ;AAAA,MAEV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAEJ;AAEA,UAAM,QAAQ,UAAQ,eAAe,YAAY,KAAK,eAAe,CAAC;AAEtE,SAAK,kBAAkB;AAEvB,SAAK,eAAe;AAEpB,SAAK,mBAAmB,MAAM;AAE1B,UAAI,CAAC,KAAK,aAAa;AACnB;AAAA,MACJ;AAEA,YAAM,aAAa,gBAAgB,OAAO;AAC1C,WAAK,mBAAmB;AACxB,WAAK,eAAe;AACpB,WAAK,kBAAkB,CAAC;AAAA,IAE5B;AAAA,EAEJ;AAAA,EAGA,OAAa,gCAAgC,MAAc,OAAgC;AAAA;AAEvF,aAAO;AAAA,IAEX;AAAA;AAAA,EAGA,OAAa,6BAA6B,MAAc,OAAgC;AAAA;AAEpF,aAAO;AAAA,IAEX;AAAA;AAAA,EAGA,OAAa,6BAA6B,MAAc,OAAgC;AAAA;AAEpF,aAAO;AAAA,IAEX;AAAA;AAAA,EAGA,OAAa,8BAA8B,MAAc,OAAgC;AAAA;AAErF,aAAO;AAAA,IAEX;AAAA;AAAA,EAEA,0BAA0B,OAAgC;AACtD,WAAO,QAAO,gCAAgC,MAAM,KAAK;AAAA,EAC7D;AAAA,EAEA,wBAAwB,OAAgC;AACpD,WAAO,QAAO,8BAA8B,MAAM,KAAK;AAAA,EAC3D;AAAA,EAEA,uBAAuB,OAAgC;AACnD,WAAO,QAAO,6BAA6B,MAAM,KAAK;AAAA,EAC1D;AAAA,EAGA,uBAAuB,OAAgC;AACnD,WAAO,QAAO,6BAA6B,MAAM,KAAK;AAAA,EAC1D;AAAA,EAEU,gBAAgB;AAGtB,UAAM,2BAAoC,sBAAO,OAAe;AAEhE,UAAM,aAAa,CAAC,OAAc,SAAS,uBAAO;AAE9C,UAAI,KAAK,uBAAuB,QAAQ;AAEpC,YAAI,MAAM,iBAAiB;AACvB,gBAAM,gBAAgB;AAAA,QAC1B;AACA,YAAI,MAAM,gBAAgB;AACtB,gBAAM,eAAe;AAAA,QACzB;AACA,cAAM,eAAe;AACrB,cAAM,cAAc;AACpB,eAAO;AAAA,MAEX;AAEA,UAAI,MAAM,mBAAmB,KAAK,8BAA8B;AAC5D,cAAM,gBAAgB;AAAA,MAC1B;AAAA,IAEJ;AAEA,UAAM,cAAc,CAAC,UAAsB;AAEvC,UAAK,KAAK,kBAAkB,4BAA4B,iBAAiB,eACnE,KAAK,oBAAiB,oBAAG,KAAK,eAAe,KAAM,KAAK,IAAI,IAAI,KAAK,kBAAmB,QACtF,iBAAiB,YAAa;AAClC;AAAA,MACJ;AAEA,WAAK,uBAAuB,QAAO,aAAa,aAAa,KAAK;AAElE,WAAK,mBAAmB;AACxB,WAAK,kBAAkB;AACvB,WAAK,6BAA6B;AAClC,WAAK,iBAAiB;AACtB,WAAK,0BAA0B,IAAI,uBAAQ,MAAM,SAAS,MAAM,OAAO;AACvE,UAAI,4BAA4B,iBAAiB,YAAY;AACzD,aAAK,kBAAkB,KAAK,IAAI;AAChC,aAAK,0BAA0B,IAAI,uBAAQ,MAAM,QAAQ,GAAG,SAAS,MAAM,QAAQ,GAAG,OAAO;AAC7F,YAAI,MAAM,QAAQ,SAAS,GAAG;AAC1B,wBAAc,KAAK;AACnB;AAAA,QACJ;AAAA,MACJ,OACK;AACD,aAAK,kBAAkB;AACvB,mBAAW,KAAK;AAAA,MACpB;AAEA,WAAK,qBAAqB;AAE1B,cAAO,qBAAqB;AAC5B,cAAO,mBAAmB;AAC1B,cAAO,qBAAqB;AAAA,IAEhC;AAEA,UAAM,eAAe;AAErB,UAAM,YAAY,CAAO,UAAsB;AAE3C,WAAK,iBAAiB;AAEtB,UAAI,CAAC,KAAK,iBAAiB;AACvB;AAAA,MACJ;AAEA,UAAK,KAAK,kBAAkB,4BAA4B,iBAAiB,cACpE,KAAK,gBAAgB,iBAAiB,YAAa;AACpD;AAAA,MACJ;AAEA,UAAI,KAAK,qBAAoB,MAAM,KAAK,0BAA0B,KAAK,IAAG;AACtE,0BAAkB,KAAK;AACvB,YAAI,CAAC,KAAK,oBAAoB;AAC1B,eAAK,uBAAuB,QAAO,aAAa,YAAY,KAAK;AAAA,QACrE;AAAA,MACJ;AAGA,WAAK,uBAAuB,QAAO,aAAa,WAAW,KAAK;AAEhE,iBAAW,KAAK;AAAA,IAEpB;AAEA,UAAM,aAAa;AAEnB,UAAM,aAAa,CAAO,UAAsB;AAE5C,UAAK,KAAK,kBAAkB,4BAA4B,iBAAiB,cACpE,KAAK,gBAAgB,iBAAiB,YAAa;AACpD;AAAA,MACJ;AAEA,UAAI,MAAM,KAAK,uBAAuB,KAAK,GAAG;AAC1C,aAAK,uBAAuB,QAAO,aAAa,cAAc,KAAK;AAAA,MACvE;AAEA,WAAK,mBAAmB;AAExB,iBAAW,KAAK;AAAA,IAEpB;AAEA,UAAM,eAAe;AAErB,UAAM,cAAc,CAAO,UAAsB;AAE7C,UAAK,KAAK,kBAAkB,4BAA4B,iBAAiB,cACpE,KAAK,gBAAgB,iBAAiB,YAAa;AACpD;AAAA,MACJ;AAEA,UAAI,MAAM,KAAK,uBAAuB,KAAK,GAAG;AAC1C,aAAK,uBAAuB,QAAO,aAAa,cAAc,KAAK;AAAA,MACvE;AAEA,WAAK,mBAAmB;AACxB,WAAK,kBAAkB;AACvB,WAAK,6BAA6B;AAElC,iBAAW,KAAK;AAAA,IAEpB;AAEA,UAAM,cAAc,CAAC,UAAsB;AAQvC,UAAI,CAAC,KAAK,mBAAmB,CAAC,KAAK,4BAA4B;AAC3D;AAAA,MACJ;AAEA,UAAK,KAAK,kBAAkB,4BAA4B,iBAAiB,cACpE,KAAK,gBAAgB,iBAAiB,YAAa;AACpD;AAAA,MACJ;AAEA,YAAM,cAAc,IAAI;AAAA,QACpB,MAAM;AAAA,QACN,MAAM;AAAA,MACV;AACA,cAAI,wBAAO,KAAK,uBAAuB,GAAG;AACtC,aAAK,0BAA0B;AAAA,MACnC;AAEA,YAAM,yBAAyB,YAAY,GAAG,KAAK,uBAAuB,EAAE;AAC5E,UAAI,yBAAyB,KAAK,uBAAuB;AACrD,aAAK,qBAAqB;AAAA,MAC9B;AAEA,WAAK,uBAAuB,QAAO,aAAa,aAAa,KAAK;AAElE,UAAI,KAAK,sBAAsB,KAAK,gBAAgB;AAChD,cAAM,SAAS,KAAK,gBAAgB,sBAAsB,EAAE,QAAQ,KAAK,gBAAgB;AACzF,cAAM,gBAAgB,KAAK,qBAAqB,GAAG,WAAW;AAC9D,aAAK,uBAAuB,IAAI,uBAAQ,cAAc,GAAG,cAAc,CAAC,EAAE,MAAM,IAAI,MAAM,EACrF,IAAI,KAAK,oBAAoB;AAClC,aAAK,uBAAuB,QAAO,aAAa,aAAa,KAAK;AAAA,MACtE;AAEA,WAAK,uBAAuB;AAE5B,iBAAW,KAAK;AAAA,IAEpB;AAEA,UAAM,cAAc,CAAO,UAAsB;AAE7C,UAAI,CAAC,KAAK,iBAAiB;AACvB;AAAA,MACJ;AAEA,UAAK,KAAK,kBAAkB,4BAA4B,iBAAiB,cACpE,KAAK,gBAAgB,iBAAiB,YAAa;AACpD;AAAA,MACJ;AAEA,UAAI,MAAM,QAAQ,SAAS,GAAG;AAC1B,oBAAY,KAAK;AACjB;AAAA,MACJ;AAEA,YAAM,QAAQ,MAAM,QAAQ;AAE5B,YAAM,cAAc,IAAI;AAAA,QACpB,MAAM;AAAA,QACN,MAAM;AAAA,MACV;AACA,YAAM,yBAAyB,YAAY,GAAG,KAAK,uBAAwB,EAAE;AAC7E,UAAI,yBAAyB,KAAK,uBAAuB;AACrD,aAAK,qBAAqB;AAAA,MAC9B;AAEA,UAAI,KAAK,oBAAoB,KAAK,mBAC9B,SAAS,iBAAiB,MAAM,SAAS,MAAM,OAAO,GAAG;AACzD,aAAK,mBAAmB;AACxB,YAAI,MAAM,KAAK,uBAAuB,KAAK,GAAG;AAC1C,eAAK,uBAAuB,QAAO,aAAa,cAAc,KAAK;AAAA,QACvE;AAAA,MACJ;AAEA,WAAK,uBAAuB,QAAO,aAAa,aAAa,KAAK;AAGlE,UAAI,KAAK,oBAAoB;AACzB,cAAM,SAAS,KAAK,gBAAgB,sBAAsB,EAAE,QAAQ,KAAK,gBAAgB;AACzF,cAAM,gBAAgB,KAAK,qBAAqB,GAAG,WAAW;AAC9D,aAAK,uBAAuB,IAAI,uBAAQ,cAAc,GAAG,cAAc,CAAC,EAAE,MAAM,IAAI,MAAM,EACrF,IAAI,KAAK,oBAAoB;AAClC,aAAK,uBAAuB,QAAO,aAAa,aAAa,KAAK;AAAA,MACtE;AAEA,WAAK,uBAAuB;AAAA,IAEhC;AAEA,UAAM,cAAc,CAAC,UAAsB;AACvC,WAAK,uBAAuB,QAAO,aAAa,iBAAiB,KAAK;AAAA,IAC1E;AACA,UAAM,oBAAoB,CAAC,UAAiB;AAExC,iBAAW,KAAK;AAChB,WAAK,iBAAiB;AACtB,WAAK,uBAAuB,QAAO,aAAa,iBAAiB,KAAK;AAAA,IAG1E;AAEA,UAAM,gBAAgB,CAAO,UAAmC;AAE5D,UAAI,CAAC,KAAK,iBAAiB;AACvB;AAAA,MACJ;AAEA,UAAK,KAAK,kBAAkB,4BAA4B,iBAAiB,cACpE,KAAK,gBAAgB,iBAAiB,YAAa;AACpD;AAAA,MACJ;AAEA,WAAK,kBAAkB;AACvB,WAAK,6BAA6B;AAClC,WAAK,iBAAiB;AAEtB,UAAI,MAAM,KAAK,wBAAwB,KAAK,GAAG;AAC3C,aAAK,uBAAuB,QAAO,aAAa,eAAe,KAAK;AAAA,MACxE;AAAA,IAEJ;AAEA,aAAS,gBAAgB,OAA4B;AACjD,UAAI,MAAM,YAAY,IAAI;AACtB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAEA,aAAS,gBAAgB,OAA4B;AACjD,UAAI,MAAM,YAAY,IAAI;AACtB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAEA,aAAS,cAAc,OAA4B;AAC/C,UAAI,MAAM,YAAY,GAAG;AACrB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAEA,aAAS,cAAc,OAAyC;AAC5D,UAAI;AACJ,UAAI,SAAS,OAAO;AAChB,iBAAU,MAAM,OAAO,YAAY,MAAM,OAAO;AAAA,MACpD,OACK;AAED,iBAAU,MAAM,WAAW;AAAA,MAC/B;AACA,aAAO;AAAA,IACX;AAEA,aAAS,eAAe,OAAsB;AAC1C,UAAI,MAAM,WAAW,IAAI;AACrB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAEA,aAAS,gBAAgB,OAAsB;AAC3C,UAAI,MAAM,WAAW,IAAI;AACrB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAEA,aAAS,eAAe,OAAsB;AAC1C,UAAI,MAAM,WAAW,IAAI;AACrB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAEA,aAAS,aAAa,OAAsB;AACxC,UAAI,MAAM,WAAW,IAAI;AACrB,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAEA,UAAM,YAAY,CAAC,UAAyB;AAExC,UAAI,gBAAgB,KAAK,GAAG;AACxB,aAAK,uBAAuB,QAAO,aAAa,WAAW,KAAK;AAAA,MACpE;AAEA,UAAI,gBAAgB,KAAK,GAAG;AACxB,aAAK,uBAAuB,QAAO,aAAa,WAAW,KAAK;AAAA,MACpE;AAEA,UAAI,cAAc,KAAK,GAAG;AACtB,aAAK,uBAAuB,QAAO,aAAa,SAAS,KAAK;AAAA,MAClE;AAEA,UAAI,cAAc,KAAK,GAAG;AACtB,aAAK,uBAAuB,QAAO,aAAa,SAAS,KAAK;AAAA,MAClE;AAEA,UAAI,eAAe,KAAK,GAAG;AACvB,aAAK,uBAAuB,QAAO,aAAa,eAAe,KAAK;AAAA,MACxE;AAEA,UAAI,gBAAgB,KAAK,GAAG;AACxB,aAAK,uBAAuB,QAAO,aAAa,gBAAgB,KAAK;AAAA,MACzE;AAEA,UAAI,eAAe,KAAK,GAAG;AACvB,aAAK,uBAAuB,QAAO,aAAa,eAAe,KAAK;AAAA,MACxE;AAEA,UAAI,aAAa,KAAK,GAAG;AACrB,aAAK,uBAAuB,QAAO,aAAa,aAAa,KAAK;AAAA,MACtE;AAEA,UAAI,MAAM,kBAAkB;AACxB,mBAAW,OAAO,mBAAG;AAAA,MACzB;AAAA,IAEJ;AAEA,UAAM,UAAU,CAAC,UAAyB;AAEtC,UAAI,gBAAgB,KAAK,GAAG;AACxB,aAAK,uBAAuB,QAAO,aAAa,SAAS,KAAK;AAAA,MAClE;AAAA,IAEJ;AAGA,UAAM,UAAU,CAAC,UAAiB;AAC9B,WAAK,uBAAuB,QAAO,aAAa,OAAO,KAAK;AAAA,IAChE;AAEA,UAAM,SAAS,CAAC,UAAiB;AAC7B,WAAK,uBAAuB,QAAO,aAAa,MAAM,KAAK;AAAA,IAC/D;AAMA,SAAK,gBAAgB,iBAAiB,aAAa,aAAa,KAAK;AACrE,SAAK,gBAAgB,iBAAiB,cAAc,cAAc,KAAK;AAOvE,SAAK,gBAAgB,iBAAiB,aAAa,aAAa,KAAK;AAIrE,SAAK,iBAAiB,cAAc;AAQpC,SAAK,gBAAgB,iBAAiB,WAAW,WAAW,KAAK;AAEjE,SAAK,gBAAgB,iBAAiB,YAAY,YAAY,KAAK;AACnE,SAAK,gBAAgB,iBAAiB,eAAe,eAAe,KAAK;AAGzE,SAAK,gBAAgB,iBAAiB,YAAY,YAAY,KAAK;AAEnE,SAAK,iBAAiB,iBAAiB,cAAc,cAAc,IAAI;AAIvE,SAAK,iBAAiB,iBAAiB,WAAW,WAAW,KAAK;AAClE,SAAK,iBAAiB,iBAAiB,SAAS,SAAS,KAAK;AAG9D,SAAK,iBAAiB,UAAU;AAChC,SAAK,iBAAiB,SAAS;AAAA,EAKnC;AAAA,EAiCA,IAAW,gCAA2E;AAElF,UAAM,YAAsB,CAAC;AAE7B,UAAM,SAAc,IAAI;AAAA,MACnB,KAAK,YAAoB;AAAA,MAC1B;AAAA,QAEI,KAAK,CAAC,QAAQ,KAAa,cAAc;AAErC,oBAAU,KAAK,GAAG;AAElB,iBAAO;AAAA,QAEX;AAAA,QACA,KAAK,CAAC,QAAQ,KAAa,OAAO,cAAc;AAE5C,oBAAU,KAAK,GAAG;AAClB,eAAK,0BAA0B,WAAW,KAAK;AAE/C,iBAAO;AAAA,QAEX;AAAA,MAEJ;AAAA,IACJ;AAEA,WAAO;AAAA,EAEX;AAAA,EAGA,0BAA0B,WAAqB,gBAAwD;AACnG,cAAU,QAAQ,SAAO,KAAK,yBAAyB,KAAK,cAAc,CAAC;AAAA,EAC/E;AAAA,EAEA,yBACI,UACA,gBACF;AAEE,QAAI,UAAU,KAAK,qBAAqB;AAExC,QAAI,CAAC,SAAS;AAEV,gBAAU,CAAC;AACX,WAAK,qBAAqB,YAAY;AAAA,IAC1C;AAEA,UAAM,UAAU,eAAe,YAAY,SAAS;AAEpD,QAAI,CAAC,SAAS;AACV,UAAI,QAAQ,QAAQ,cAAc,KAAK,IAAI;AACvC,gBAAQ,KAAK,cAAc;AAAA,MAC/B;AACA;AAAA,IACJ;AAEA,UAAM,UAAU,CAAC,QAAgB,UAAiB;AAC9C,YAAM,YAAY,KAAK,6BAA6B;AAAA,QAChD,CAAAC,YAAUA,QAAO,qBAAqB;AAAA,MAC1C;AACA,UAAI,WAAW;AACX;AAAA,MACJ;AAEA,YAAM,SAAuC,EAAE,kBAAkB,SAAS;AAC1E,WAAK,6BAA6B,KAAK,MAAM;AAE7C,YAAM,UAAW,eAA4B,QAAQ,OAAO;AAAA,QACxD,sBAAsB,MAAM;AACxB,eAAK,6BAA6B,cAAc,MAAM;AAAA,QAC1D;AAAA,MACJ,CAAC;AAED,cAAQ,QAAQ,MAAM;AAClB,aAAK,6BAA6B,cAAc,MAAM;AAAA,MAC1D,CAAC;AAAA,IACL;AAEA,QAAI,QAAQ,QAAQ,OAAO,KAAK,IAAI;AAChC,cAAQ,KAAK,OAAO;AAAA,IACxB;AAAA,EAEJ;AAAA,EAEA,4BAA4B,UAAkB,gBAAwD;AAClG,UAAM,UAAU,KAAK,qBAAqB;AAC1C,QAAI,CAAC,SAAS;AACV;AAAA,IACJ;AACA,UAAM,QAAQ,QAAQ,QAAQ,cAAc;AAC5C,QAAI,SAAS,IAAI;AACb,cAAQ,OAAO,OAAO,CAAC;AAAA,IAC3B;AAAA,EACJ;AAAA,EAEA,6BAA6B,WAAqB,gBAAwD;AACtG,cAAU,QAAQ,SAAO,KAAK,4BAA4B,KAAK,cAAc,CAAC;AAAA,EAClF;AAAA,EAGA,mCACI,OACA,gBACI;AACJ,UAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACxD,eAAW,QAAQ,UAAQ;AACvB,UAAI,UAAU,KAAK,uBAAuB;AAC1C,UAAI,CAAC,SAAS;AACV,kBAAU,CAAC;AACX,aAAK,uBAAuB,QAAQ;AAAA,MACxC;AACA,UAAI,QAAQ,QAAQ,cAAc,KAAK,IAAI;AACvC,gBAAQ,KAAK,cAAc;AAAA,MAC/B;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,yCACI,OACA,gBACI;AACJ,UAAM,aAAa,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACxD,eAAW,QAAQ,UAAQ;AACvB,YAAM,UAAU,KAAK,uBAAuB;AAC5C,UAAI,CAAC,SAAS;AACV;AAAA,MACJ;AACA,YAAM,QAAQ,QAAQ,QAAQ,cAAc;AAC5C,UAAI,SAAS,IAAI;AACb,gBAAQ,OAAO,OAAO,CAAC;AAAA,MAC3B;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAGA,uBAAuB,UAAkB,aAAqB;AAC1D,QAAI,UAAU,KAAK,qBAAqB;AACxC,QAAI,CAAC,SAAS;AACV;AAAA,IACJ;AACA,cAAU,QAAQ,KAAK;AACvB,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,YAAM,SAAS,QAAQ;AACvB,aAAO,MAAM,WAAW;AAAA,IAC5B;AAAA,EACJ;AAAA,EAYA,wBAAwB,OAA6B;AACjD,SAAK,qBAAqB,UAAQ;AAC9B,WAAK,yBAAyB,KAAK;AACnC,cAAI,oBAAG,KAAK,cAAc,GAAG;AACzB,aAAK,eAAe,6BAA6B,KAAK;AAAA,MAC1D;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAGA,yBAAyB,OAA6B;AAElD,UAAM,mBAAmB,KAAK,uBAAuB,MAAM;AAC3D,QAAI,kBAAkB;AAClB,YAAM,UAAU,iBAAiB,KAAK;AACtC,WAAK,uBAAuB,MAAM,QAAQ,CAAC;AAC3C,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,gBAAQ,GAAG,KAAK;AAAA,MACpB;AAAA,IACJ;AAEA,QAAI,MAAM,QAAQ,QAAO,mBAAmB,eAAe;AACvD,WAAK,kBAAkB;AAAA,IAC3B;AAEA,QAAI,MAAM,QAAQ,QAAO,mBAAmB,iBAAiB;AACzD,WAAK,mBAAmB;AAAA,IAC5B;AAEA,QAAI,MAAM,QAAQ,QAAO,mBAAmB,qBAAqB;AAC7D,WAAK,uBAAuB;AAAA,IAChC;AAEA,QAAI,MAAM,QAAQ,QAAO,mBAAmB,mBAAmB,MAAM,QACjE,QAAO,mBAAmB,iBAAiB;AAC3C,WAAK,+BAA+B;AACpC,WAAK,+CAA+C;AAAA,IACxD;AAAA,EAEJ;AAAA,EAGA,qBAAqB,gBAAwC;AACzD,mBAAe,IAAI;AACnB,SAAK,SAAS,aAAa,qBAAqB,cAAc;AAAA,EAClE;AAAA,EAEA,gBAAgB,WAAwB,MAAc,uBAAuB,oBAAI;AA15HrF;AA45HQ,QAAI,CAAC,yBAAyB,CAAC,KAAK,sBAAsB,CAAC,KAAK,qBAAqB;AACjF,aAAO;AAAA,IACX;AAGA,UAAM,2BAA2B,KAAK;AAGtC,UAAM,sCAAsC,KAAK,gCAAgC;AAAA,MAC7E;AAAA,MACA,KAAK,gCAAgC;AAAA,QACjC,iBAAe,yBAAyB,SAAS,WAAW;AAAA,MAChE,IAAI;AAAA,IACR;AACA,UAAM,gBAAgB,oCAAoC;AAC1D,UAAM,0CAA0C,yBAAyB;AAAA,MACrE;AAAA,MACA,yBAAyB,UAAU,iBAAe,eAAe,aAAa,IAAI;AAAA,IACtF;AAGA,QAAI,kBAAkB,IAAI,uBAAQ,GAAG,CAAC;AAEtC,aAAS,IAAI,GAAG,IAAI,oCAAoC,SAAS,GAAG,KAAK;AACrE,YAAM,UAAU,oCAAoC;AACpD,wBAAkB,gBAAgB;AAAA,SAC9B,mBAAQ,iBAAR,mBAAsB,MAAM,QAA5B,YAAmC,IAAI,uBAAQ,QAAQ,YAAY,QAAQ,SAAS;AAAA,MACxF;AAAA,IAGJ;AAEA,QAAI,kBAAkB,IAAI,uBAAQ,GAAG,CAAC;AAEtC,aAAS,IAAI,GAAG,IAAI,wCAAwC,SAAS,GAAG,KAAK;AACzE,YAAM,UAAU,wCAAwC;AACxD,wBAAkB,gBAAgB;AAAA,SAC9B,mBAAQ,iBAAR,mBAAsB,MAAM,QAA5B,YAAmC,IAAI,uBAAQ,QAAQ,YAAY,QAAQ,SAAS;AAAA,MACxF;AAAA,IAGJ;AAEA,UAAM,cAAc,gBAAgB,SAAS,eAAe;AAE5D,WAAO,UAAU,KAAK,EAAE,cAAc,WAAW;AAAA,EAErD;AAAA,EAGA,kBAAkB,WAAwB,MAAc;AACpD,WAAO,KAAK,gBAAgB,WAAW,IAAI;AAAA,EAC/C;AAAA,EAGA,IAAI,gBAA6B;AAE7B,UAAM,SAAS,KAAK;AACpB,UAAM,SAAS,KAAK;AAEpB,WAAO,IAAI;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO,SAAS,OAAO,MAAM,OAAO;AAAA,MACpC,OAAO,QAAQ,OAAO,OAAO,OAAO;AAAA,IACxC;AAAA,EAEJ;AAAA,EAEA,uBAAuB,OAA4B;AAC/C,SAAK,iBAAiB,EAAE,KAAK,OAAO,MAAM,OAAO,QAAQ,OAAO,OAAO,MAAM;AAC7E,UAAM,SAAS,KAAK;AACpB,WAAO,IAAI;AAAA,MACP;AAAA,MACA;AAAA,MACA,OAAO,SAAS,QAAQ;AAAA,MACxB,OAAO,QAAQ,QAAQ;AAAA,IAC3B;AAAA,EACJ;AAAA,EAEA,wBACI,MACA,OACA,QACA,KACW;AACX,SAAK,iBAAiB,EAAE,MAAM,OAAO,QAAQ,IAAI;AACjD,UAAM,SAAS,KAAK;AACpB,WAAO,IAAI;AAAA,MACP;AAAA,MACA;AAAA,MACA,OAAO,SAAS,MAAM;AAAA,MACtB,OAAO,QAAQ,OAAO;AAAA,IAC1B;AAAA,EACJ;AAAA,EAEU,0BAA0B,oBAA4B,mBAAmC;AAC/F,WAAO,KAAK,yBAAyB;AAAA,EACzC;AAAA,EAEU,wBAAwB,UAA2C;AAhgIjF;AAigIQ,QAAI,KAAK,oCAAoC;AACzC,cAAO,aAAO,2BAA2B,IAAI,KAAK,kCAAkC,MAA7E,mBAAiF;AAAA,IAC5F;AACA,WAAO,KAAK,qBAAqB;AAAA,EACrC;AAAA,EAEU,wBAAwB,UAAkB,MAAyB;AACzE,QAAI,KAAK,oCAAoC;AACzC,UAAI,SAAS,QAAO,2BAA2B;AAAA,QAC3C,KAAK;AAAA,MACT;AACA,UAAI,CAAC,QAAQ;AACT,iBAAS,CAAC;AACV,gBAAO,2BAA2B,IAAI,KAAK,oCAAoC,MAAM;AAAA,MACzF;AACA,aAAO,YAAY,KAAK,KAAK;AAC7B;AAAA,IACJ;AACA,SAAK,qBAAqB,YAAY,KAAK,KAAK;AAAA,EACpD;AAAA,EAcA,0BAAgC;AAliIpC;AAoiIQ,UAAM,gBAAgB,KAAK,qCACH,QAAO,2BAA2B,IAAI,KAAK,kCAAkC,IAC7E,OAAO,KAAK,KAAK,oBAAoB,EAAE,SAAS;AAExE,QAAI,KAAK,oCAAoC;AACzC,cAAO,2BAA2B,OAAO,KAAK,kCAAkC;AAAA,IACpF,OACK;AACD,WAAK,uBAAuB,CAAC;AAAA,IACjC;AACA,SAAK,iCAAiC;AACtC,SAAK,cAAc;AAEnB,SAAI,UAAK,cAAL,mBAAgB,wCAAwC;AACxD,WAAK,UAAU,wBAAwB;AAGvC,UAAI,iBAAiB,CAAC,KAAK,oBAAoB;AAC3C,aAAK,UAAU,eAAe;AAAA,MAClC;AAAA,IACJ;AAAA,EAEJ;AAAA,EAEA,oCAAoC,qBAA6B,GAAG,oBAA4B,GAAG;AAE/F,wBAAoB,KAAK,IAAI,mBAAmB,CAAC;AACjD,yBAAqB,KAAK,IAAI,oBAAoB,CAAC;AAEnD,UAAM,WAAW,KAAK,0BAA0B,oBAAoB,iBAAiB;AACrF,UAAM,eAAe,KAAK,wBAAwB,QAAQ;AAC1D,QAAI,cAAc;AACd,aAAO;AAAA,IACX;AAIA,UAAM,SAAS,IAAI,+BAAY,GAAG,GAAG,GAAG,CAAC;AACzC,QAAI,KAAK,SAAS,wBAAwB;AACtC,aAAO;AAAA,IACX;AAEA,QAAI,wBAAwB;AAC5B,QAAI,oBAAiC;AACrC,QAAI,CAAC,KAAK,oBAAoB;AAC1B,eAAS,KAAK,YAAY,KAAK,eAAe;AAC9C,8BAAwB;AACxB,0BAAoB,KAAK,gBAAgB;AAAA,IAC7C;AAEA,UAAM,SAAS,KAAK,MAAM;AAC1B,UAAM,QAAQ,KAAK,MAAM;AAEzB,SAAK,MAAM,SAAS,KAAK,qBAAqB;AAC9C,SAAK,MAAM,QAAQ,KAAK,oBAAoB;AAG5C,UAAM,OAAO,KAAK,MAAM;AACxB,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,SAAS,KAAK,MAAM;AAC1B,UAAM,MAAM,KAAK,MAAM;AAEvB,SAAK,MAAM,OAAO;AAClB,SAAK,MAAM,QAAQ;AACnB,SAAK,MAAM,SAAS;AACpB,SAAK,MAAM,MAAM;AAGjB,UAAM,eAAe,KAAK,gBAAgB;AAG1C,UAAM,aAAa,KAAK,MAAM;AAC9B,SAAK,MAAM,aAAa;AAExB,UAAM,cAAc,KAAK,gBAAgB;AAEzC,SAAK,MAAM,aAAa;AAGxB,SAAK,MAAM,SAAS;AACpB,SAAK,MAAM,QAAQ;AAEnB,SAAK,MAAM,OAAO;AAClB,SAAK,MAAM,QAAQ;AACnB,SAAK,MAAM,SAAS;AACpB,SAAK,MAAM,MAAM;AAEjB,QAAI,uBAAuB;AACvB,eAAS,KAAK,YAAY,KAAK,eAAe;AAC9C,UAAI,KAAK,WAAW;AAChB,YAAI,mBAAmB;AACnB,eAAK,UAAU,gBAAgB,aAAa,KAAK,iBAAiB,iBAAiB;AAAA,QACvF,OACK;AACD,eAAK,UAAU,gBAAgB,YAAY,KAAK,eAAe;AAAA,QACnE;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO,SAAS;AAChB,WAAO,QAAQ;AAEf,SAAK,wBAAwB,UAAU,MAAM;AAE7C,WAAO;AAAA,EAEX;AAAA,EAGQ,mCAAmC;AAjpI/C;AAmpIQ,UAAM,cAAyB,CAAC;AAChC,SAAK,SAAS,QAAQ,aAAW;AAC7B,UAAI,WAAW,KAAK,gBAAgB,QAAQ,cAAc;AACtD;AAAA,MACJ;AACA,UAAI,QAAQ,wCAAwC;AAChD,gBAAQ,eAAe;AAAA,MAC3B;AACA,kBAAY,KAAK,QAAQ,MAAM,GAAG;AAClC,kBAAY,KAAK,QAAQ,MAAM,GAAG;AAAA,IACtC,CAAC;AAGD,UAAM,cAAc,+BAAY,qBAAqB,WAAW,EAC3D;AAAA,MACG,GAAC,UAAK,mBAAL,mBAAqB;AAAA,MACtB,GAAC,UAAK,mBAAL,mBAAqB;AAAA,MACtB,GAAC,UAAK,mBAAL,mBAAqB;AAAA,MACtB,GAAC,UAAK,mBAAL,mBAAqB;AAAA,IAC1B;AACJ,WAAO;AAAA,EACX;AAAA,EAGA,sBAAsB,qBAA6B,GAAW;AAE1D,yBAAqB,KAAK,IAAI,oBAAoB,CAAC;AAEnD,UAAM,WAAW,KAAK,0BAA0B,oBAAoB,CAAC;AACrE,UAAM,SAAS,KAAK,wBAAwB,QAAQ;AACpD,QAAI,QAAQ;AACR,aAAO,OAAO;AAAA,IAClB;AAEA,QAAI,KAAK,wCAAwC;AAC7C,WAAK,mBAAmB;AACxB,UAAI;AACJ,UAAI;AACA,aAAK,QAAQ,KAAK,MAAM,oBAAoB,kBAAkB,EAAE,mBAAmB,CAAC;AACpF,aAAK,eAAe;AACpB,sBAAc,KAAK,iCAAiC;AAAA,MACxD,UACA;AACI,aAAK,oBAAoB;AAAA,MAC7B;AAEA,WAAK,wBAAwB,UAAU,IAAI,+BAAY,GAAG,GAAG,YAAY,QAAQ,YAAY,KAAK,CAAC;AACnG,aAAO,YAAY;AAAA,IACvB;AAEA,UAAM,OAAO,KAAK,oCAAoC,oBAAoB,CAAC;AAC3E,WAAO,KAAK;AAAA,EAEhB;AAAA,EAGA,uBAAuB,oBAA4B,GAAW;AAE1D,wBAAoB,KAAK,IAAI,mBAAmB,CAAC;AAEjD,UAAM,WAAW,KAAK,0BAA0B,GAAG,iBAAiB;AACpE,UAAM,SAAS,KAAK,wBAAwB,QAAQ;AACpD,QAAI,QAAQ;AACR,aAAO,OAAO;AAAA,IAClB;AAEA,QAAI,KAAK,wCAAwC;AAC7C,WAAK,mBAAmB;AACxB,UAAI;AACJ,UAAI;AACA,aAAK,QAAQ,KAAK,MAAM,mBAAmB,iBAAiB;AAC5D,aAAK,eAAe;AACpB,sBAAc,KAAK,iCAAiC;AAAA,MACxD,UACA;AACI,aAAK,oBAAoB;AAAA,MAC7B;AAEA,WAAK,wBAAwB,UAAU,IAAI,+BAAY,GAAG,GAAG,YAAY,QAAQ,YAAY,KAAK,CAAC;AACnG,aAAO,YAAY;AAAA,IACvB;AAEA,UAAM,OAAO,KAAK,oCAAoC,GAAG,iBAAiB;AAE1E,QAAI,MAAM,KAAK,MAAM,GAAG;AACpB,cAAQ,MAAM,iCAAiC,IAAI;AACnD,UAAI,MAAM;AAAA,IACd;AAEA,WAAO,KAAK;AAAA,EAEhB;AAAA,EAGA,uBAAoC;AAEhC,UAAM,WAAW,KAAK,0BAA0B,GAAG,CAAC;AACpD,UAAM,SAAS,KAAK,wBAAwB,QAAQ;AACpD,QAAI,QAAQ;AACR,aAAO;AAAA,IACX;AAEA,QAAI,KAAK,wCAAwC;AAC7C,WAAK,mBAAmB;AACxB,UAAI;AACJ,UAAI;AACA,aAAK,eAAe;AACpB,sBAAc,KAAK,iCAAiC;AAAA,MACxD,UACA;AACI,aAAK,oBAAoB;AAAA,MAC7B;AAEA,WAAK,wBAAwB,UAAU,WAAW;AAClD,aAAO;AAAA,IACX;AAEA,WAAO;AAAA,EAEX;AAGJ;AA1lIO,IAAM,SAAN;AAAM,OA+EF,eAAuB;AA/ErB,OAkFF,iBAA2B,CAAC;AAlF1B,OAuFF,aAAa;AAvFX,OAoGF,kBAAkB,MAAM;AAC3B,WAAS,MAAM,MAAM,KAAK,MAAM;AAC5B,0BAAsB,MAAM;AAzRxC;AA0RgB,iDAAkB,YAAY;AAC9B,YAAM,YAAW,gCAAO,SAAP,mBAAa,uBAAb,mBAAiC;AAClD,UAAI,CAAC,UAAU;AACX;AAAA,MACJ;AACA,eAAS,qBAAqB,UAAQ;AAClC,aAAK,wBAAwB;AAC7B,aAAK,cAAc;AACnB,aAAK,qBAAqB;AAC1B,aAAK,eAAe;AAAA,MACxB,CAAC;AACD,cAAO,oBAAoB;AAAA,IAC/B,CAAC;AAAA,EACL,CAAC;AACD,SAAO;AACX,GAAG;AAtHM,OAwHF,iBAAiB,IAAI,eAAe,CAAC,SAAS,aAAa;AA3StE;AA4SQ,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACrC,UAAM,QAAQ,QAAQ;AAEtB,UAAM,OAAe,MAAM,OAAO;AAClC,uCAAM,cAAN,8BAAkB;AAAA,EACtB;AACJ,CAAC;AA/HQ,OAgLF,qBAAkD;AAhLhD,OAiLF,qBAAkD;AAjLhD,OAkLF,mBAAgD;AAlL9C,OAgMF,6BAAuE,oBAAI,IAAI;AAhM7E,OA0MM,yBAAyB;AA1M/B,OA4SM,4BAA4B;AA5SlC,OA6SM,6BAA6B;AA7SnC,OAkmDF,uBAAwB,eAAe,SAAS,gBAAgB,QAAS,cAAc,YACxF,uBAAuB,SAAS,gBAAgB,QAAS,sBAAsB,iBAC/E,oBAAoB,SAAS,gBAAgB,QAAS,mBAAmB,iBACzE,mBAAmB,SAAS,gBAAgB,QAAS,kBAAkB,iBACvE,kBAAkB,SAAS,gBAAgB,QAAS,iBAAiB;AAtmDlE,OAoyDF,kCAAkC;AApyDhC,OAqkEF,sBAAsB;AAAA,EAEzB,QAAQ,WAAW,UAAU;AAAA,EAC7B,SAAS,WAAW,UAAU;AAAA,EAC9B,UAAU,WAAW,UAAU;AAAA,EAC/B,OAAO,WAAW,UAAU;AAAA,EAC5B,WAAW,WAAW,UAAU;AAAA,EAChC,WAAW,WAAW,UAAU;AAAA,EAChC,UAAU,WAAW,UAAU;AAAA,EAC/B,SAAS,WAAW,UAAU;AAAA,EAC9B,UAAU,WAAW,UAAU;AAAA,EAE/B,YAAY,WAAW,UAAU;AAAA,EACjC,YAAY,WAAW,UAAU;AAErC;AAplES,OAulEF,qBAAqB;AAAA,EAExB,SAAS,WAAW,SAAS;AAAA,EAC7B,mBAAmB,WAAW,SAAS;AAAA,EACvC,sBAAsB,WAAW,SAAS;AAE9C;AA7lES,OAoxEF,iCAAiC;AApxE/B,OA0/GK,eAAe;AAAA,EAEzB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,aAAa;AAAA,EACb,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,WAAW;AAAA,EACX,aAAa;AAAA,EACb,WAAW;AAAA,EACX,WAAW;AAAA,EACX,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,SAAS;AAAA,EACT,QAAQ;AAEZ;AAnhHS,OA+qHF,qBAAqB;AAAA,EAExB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,mBAAmB;AAAA,EACnB,iBAAiB;AAErB;AAuaJ,MAAM,0BAA0B,CAAC,UAAsB;AAEnD,SAAO,mBAAmB,KAAK;AAGnC;AACA,MAAM,+BAA+B,CAAC,UAAsB;AAExD,QAAM,kBAAkB,OAAO;AAE/B,SAAO,qBAAqB;AAC5B,SAAO,mBAAmB;AAK1B,kBAAgB,KAAK;AAEzB;AACA,OAAO,iBAAiB,aAAa,uBAAuB;AAC5D,OAAO,iBAAiB,WAAW,8BAA8B,IAAI;AACrE,SAAS,KAAK,iBAAiB,cAAc,4BAA4B;AAEzE,MAAM,sBAAsB,MAAM;AAE9B,SAAO,qBAAqB;AAC5B,SAAO,mBAAmB;AAI9B;AACA,OAAO,iBAAiB,aAAa,OAAO,oBAAoB,IAAI;AACpE,OAAO,iBAAiB,WAAW,qBAAqB,IAAI;AAE5D,SAAS,MAAM,KAAU;AACrB,QAAM,IAAI,CAAC;AACX,SAAO,OAAO,MAAM,MAAM,OAAO,eAAe,GAAG,GAAG;AAClD,UAAM,KAAK,OAAO,oBAAoB,GAAG;AACzC,aAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;AAChC,UAAI,EAAE,QAAQ,GAAG,EAAE,KAAK,IAAI;AACxB,UAAE,KAAK,GAAG,EAAE;AAAA,MAChB;AAAA,IACJ;AAAA,EACJ;AACA,SAAO;AACX;AAEA,MAAM,sBAAsB,MAAM,OAAO,SAAS,EAAE,OAAO,IAAI,OAAO,EAAE,OAAO;AAC/E,MAAM,gCAAgC,MAAM,yCAAiB,SAAS,EACjE,OAAO,IAAI,yCAAiB,mBAAG,EAAE,OAAO;",
4
+ "sourcesContent": ["import { IS_FIREFOX, IS_SAFARI } from \"./ClientCheckers\"\nimport toPx from \"./SizeConverter\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport \"./UICoreExtensions\"\nimport type { UIDialogView } from \"./UIDialogView\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { UILayoutCycleTracer } from \"./UILayoutCycleTracer\"\nimport { UILayoutDebugger } from \"./UILayoutDebugger\"\nimport {\n FIRST,\n FIRST_OR_NIL,\n IF,\n IS,\n IS_DEFINED,\n IS_NIL,\n IS_NOT,\n IS_NOT_LIKE_NULL,\n nil,\n NO,\n RETURNER, UIInitializerObject,\n UIObject,\n YES\n} from \"./UIObject\"\nimport { UIPoint } from \"./UIPoint\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UITextMeasurement } from \"./UITextMeasurement\"\nimport { UIViewController } from \"./UIViewController\"\n\n\ndeclare module AutoLayout {\n \n \n class Constraint {\n \n [key: string]: any\n \n }\n \n \n class View {\n \n [key: string]: any\n \n }\n \n \n class VisualFormat {\n \n static parse(arg0: any, arg1: any): any;\n \n [key: string]: any\n \n }\n \n \n const enum Attribute {\n \n LEFT = 0,\n RIGHT = 1,\n BOTTOM = 2,\n TOP = 3,\n CENTERX = 4,\n CENTERY = 5,\n WIDTH = 6,\n HEIGHT = 7,\n ZINDEX = 8,\n VARIABLE = 9,\n NOTANATTRIBUTE = 10\n \n }\n \n \n const enum Relation {\n \n EQU = 0,\n LEQ = 1,\n GEQ = 2\n \n }\n \n \n}\n\n// @ts-ignore\nif (!window.AutoLayout) {\n \n // @ts-ignore\n window.AutoLayout = nil\n \n}\n\n\ndeclare global {\n \n interface HTMLElement {\n \n UIViewObject?: UIView;\n \n }\n \n}\n\n\nexport interface LooseObject {\n [key: string]: any\n}\n\n\nexport interface ControlEventTargetsObject {\n \n [key: string]: Function[];\n \n}\n\n\nexport interface UIViewBroadcastEvent {\n \n name: string;\n parameters?: {\n [key: string]: string | string[];\n }\n \n}\n\n\ntype Mutable<T> = {\n -readonly [P in keyof T]: T[P]\n};\n\ntype ColorStyleProxy = {\n [K in keyof CSSStyleDeclaration as K extends string\n ? (Lowercase<K> extends `${string}color${string}` ? K : never)\n : never]?: UIColor\n}\n\nexport type UIViewAddControlEventTargetObject<T extends { controlEvent: Record<string, any> }> = Mutable<{\n \n -readonly [K in keyof T[\"controlEvent\"]]: ((\n sender: UIView,\n event: Event\n) => void) & Partial<UIViewAddControlEventTargetObject<T>>\n\n}>\n\n\ninterface Constraint {\n constant: number;\n multiplier: number;\n view1: any;\n attr2: any;\n priority: number;\n attr1: any;\n view2: any;\n relation: any\n}\n\n\nexport interface IUILoadingView extends UIView {\n theme: \"light\" | \"dark\";\n // Add any other specific methods you need to call from UIView\n}\n\n\n/**\n * A template literal tag to enable CSS highlighting in IDEs.\n * Example: css` .myClass { color: red; } `\n */\nexport function css(strings: TemplateStringsArray, ...values: any[]): string {\n // Simply combine the strings and values to return a valid CSS string\n return strings.reduce((acc, str, i) => acc + str + (values[i] ?? \"\"), \"\")\n}\n\n\nexport function UIComponentView(target: Function, context: ClassDecoratorContext) {\n console.log(\"Recording annotation UIComponentView on \" + target.name)\n UIObject.recordAnnotation(UIComponentView, target)\n}\n\n\nexport class UIView extends UIObject {\n \n \n _nativeSelectionEnabled: boolean = YES\n _shouldLayout?: boolean\n _UITableViewRowIndex?: number\n _UITableViewReusabilityIdentifier: any\n _UIViewIntrinsicTemporaryWidth?: string\n _UIViewIntrinsicTemporaryHeight?: string\n _enabled: boolean = YES\n _frame?: UIRectangle & { zIndex?: number }\n _frameCache?: UIRectangle\n _backgroundColor: UIColor = nil\n _colorStyleProxy?: ColorStyleProxy\n _liveCSSValues: Map<string, { keys: string[], producer: () => string }> = new Map()\n _liveCSSCallback: () => void = () => {\n for (const [property, { producer }] of this._liveCSSValues) {\n (this.style as any)[property] = producer()\n }\n }\n \n _overlayView?: UIView\n get overlayView(): UIView | undefined {\n return this._overlayView\n }\n \n set overlayView(view: UIView) {\n if (IS(view)) {\n this.addSubview(view)\n }\n else {\n this._overlayView?.removeFromSuperview()\n }\n this._overlayView = view\n \n }\n \n _viewHTMLElement!: HTMLElement & LooseObject\n \n // Dynamic innerHTML\n _innerHTMLKey?: string\n _defaultInnerHTML?: string\n _parameters?: { [x: string]: (string | UILocalizedTextObject) }\n \n _localizedTextObject?: UILocalizedTextObject\n \n _controlEventTargets: ControlEventTargetsObject = {} //{ \"PointerDown\": Function[]; \"PointerMove\": Function[];\n // \"PointerLeave\": Function[]; \"PointerEnter\": Function[];\n // \"PointerUpInside\": Function[]; \"PointerUp\": Function[];\n // \"PointerHover\": Function[]; };\n _broadcastEventTargets: { [eventName: string]: ((event: UIViewBroadcastEvent) => void)[] } = {}\n _ongoingControlEventHandlers: { _controlEventKey: string }[] = []\n _frameTransform: string\n viewController?: UIViewController\n _updateLayoutFunction?: Function\n // @ts-ignore\n _constraints: any[] //AutoLayout.Constraint[];\n superview?: UIView\n subviews: UIView[] = []\n _styleClasses: any[]\n _isHidden: boolean = NO\n \n pausesPointerEvents: boolean = NO\n stopsPointerEventPropagation: boolean = YES\n pointerDraggingPoint: UIPoint = new UIPoint(0, 0)\n _previousClientPoint: UIPoint = new UIPoint(0, 0)\n _isPointerInside?: boolean\n _isPointerValid?: boolean\n _isPointerValidForMovement?: boolean\n _isPointerDown = NO\n _initialPointerPosition?: UIPoint\n _hasPointerDragged?: boolean\n _pointerDragThreshold = 2\n \n ignoresTouches: boolean = NO\n ignoresMouse: boolean = NO\n \n core: UICore = UICore.main\n \n static _UIViewIndex: number = -1\n _UIViewIndex: number\n \n static _viewsToLayout: UIView[] = []\n \n forceIntrinsicSizeZero: boolean = NO\n _touchEventTime?: number\n \n static _pageScale = 1\n _scale: number = 1\n isInternalScaling: boolean = YES\n // When the page's fonts finish loading the browser's glyph metrics change,\n // making all previously cached text measurements stale. We hook the native\n // FontFaceSet.ready promise once at class-load time. When it fires we:\n // 1. Clear all UITextMeasurement style caches (stale fallback-font metrics)\n // 2. Clear every view's intrinsic size cache and frame cache\n // 3. Force a full re-layout, mirroring what the window resize handler does\n // document.fonts.ready resolves once all fonts have loaded, but the browser\n // may not yet have applied the new glyphs to rendered elements at that point.\n // A requestAnimationFrame defers the cache-bust and re-layout by one paint\n // cycle, ensuring getComputedStyle and the canvas measurer see real metrics.\n static _fontReadyHook = (() => {\n document.fonts.ready.then(() => {\n requestAnimationFrame(() => {\n UITextMeasurement.clearCaches()\n const rootView = UICore.main?.rootViewController?.view\n if (!rootView) {\n return\n }\n rootView.forEachViewInSubtree(view => {\n view.clearIntrinsicSizeCache()\n view._frameCache = undefined\n view.documentFontsDidLoad()\n view.setNeedsLayout()\n })\n UIView.layoutViewsIfNeeded()\n })\n })\n return YES\n })()\n \n static resizeObserver = new ResizeObserver((entries, observer) => {\n for (let i = 0; i < entries.length; i++) {\n const entry = entries[i]\n // @ts-ignore\n const view: UIView = entry.target.UIView\n view?.didResize?.(entry)\n }\n })\n \n private _isMovable = NO\n makeNotMovable?: () => void\n \n private _isResizable = NO\n makeNotResizable?: () => void\n resizingHandles: UIView[] = []\n \n public static LoadingViewClass: new () => IUILoadingView\n private _loadingView?: IUILoadingView\n \n public set loading(isLoading: boolean) {\n this.userInteractionEnabled = !isLoading\n if (isLoading) {\n if (!IS(this._loadingView)) {\n if (UIView.LoadingViewClass) {\n this._loadingView = new UIView.LoadingViewClass()\n }\n else {\n console.warn(\"UILoadingView class not registered yet.\")\n return\n }\n }\n \n // Add to superview if not already added\n if (this._loadingView.superview != this) {\n this.addSubview(this._loadingView)\n // Ensure it sits above other content\n this._loadingView.style.zIndex = \"1000\"\n }\n \n // Force an immediate layout update to position the overlay\n // this._loadingView.setFrame(this.bounds)\n \n }\n else {\n this._loadingView?.removeFromSuperview()\n }\n }\n \n public get loading(): boolean {\n return IS(this._loadingView) && IS(this._loadingView.superview)\n }\n \n \n private _isMoving: boolean = NO\n _isCBEditorTemporaryResizable = NO\n _isCBEditorTemporaryMovable = NO\n static _onWindowTouchMove: (event: TouchEvent) => void = nil\n static _onWindowMouseMove: (event: MouseEvent) => void = nil\n static _onWindowMouseup: (event: MouseEvent) => void = nil\n private _resizeObserverEntry?: ResizeObserverEntry\n protected _intrinsicSizesCache: Record<string, UIRectangle> = {}\n \n /** When set, this view reads and writes its intrinsic size cache entries from the\n * static shared map keyed by this identifier rather than from its own per-instance\n * cache. All views that share the same identifier share the same cached sizes, so\n * only the first measurement in a group is ever computed.\n *\n * Invalidate with UIView.invalidateSharedIntrinsicSizeCache(identifier). */\n sharedIntrinsicSizeCacheIdentifier?: string\n \n /** Static shared intrinsic size cache, keyed by sharedIntrinsicSizeCacheIdentifier.\n * Each bucket mirrors the per-instance _intrinsicSizesCache format. */\n static _sharedIntrinsicSizeCaches: Map<string, Record<string, UIRectangle>> = new Map()\n \n static invalidateSharedIntrinsicSizeCache(identifier: string): void {\n UIView._sharedIntrinsicSizeCaches.delete(identifier)\n }\n \n static invalidateAllSharedIntrinsicSizeCaches(): void {\n UIView._sharedIntrinsicSizeCaches.clear()\n }\n \n private static _virtualLayoutingDepth = 0\n \n static get isVirtualLayouting(): boolean {\n return this._virtualLayoutingDepth > 0\n }\n \n get isVirtualLayouting(): boolean {\n return UIView._virtualLayoutingDepth > 0\n }\n \n startVirtualLayout() {\n UIView._virtualLayoutingDepth = UIView._virtualLayoutingDepth + 1\n }\n \n finishVirtualLayout() {\n if (UIView._virtualLayoutingDepth === 0) {\n throw new Error(\"Unbalanced finishVirtualLayout()\")\n }\n UIView._virtualLayoutingDepth = UIView._virtualLayoutingDepth - 1\n }\n \n _frameForVirtualLayouting?: UIRectangle\n _frameCacheForVirtualLayouting?: UIRectangle\n \n // Change this to no if the view contains pure HTML content that does not\n // use frame logic that can influence the intrinsic size\n usesVirtualLayoutingForIntrinsicSizing = YES\n \n _contentInsets = { top: 0, left: 0, bottom: 0, right: 0 }\n \n get contentInsets() {\n return this._contentInsets\n }\n \n set contentInsets(insets: { left: number, right: number, bottom: number, top: number }) {\n this._contentInsets = insets\n this.setNeedsLayout()\n }\n \n \n constructor(\n elementID: string = (\"UIView\" + UIView.nextIndex),\n viewHTMLElement: HTMLElement & LooseObject | null = null,\n elementType: string | null = null,\n preInitConfiguratorObject?: any\n ) {\n \n super()\n \n this.configureWithObject(preInitConfiguratorObject)\n \n // Instance variables\n \n UIView._UIViewIndex = UIView.nextIndex\n this._UIViewIndex = UIView._UIViewIndex\n \n this._styleClasses = []\n \n this._initViewHTMLElement(elementID, viewHTMLElement, elementType)\n \n this._constraints = []\n \n this._frameTransform = \"\"\n \n this._initViewCSSSelectorsIfNeeded()\n \n this._loadUIEvents()\n this.setNeedsLayout()\n \n }\n \n static get nextIndex() {\n return UIView._UIViewIndex + 1\n }\n \n \n // static get pageHeight() {\n // const body = document.body\n // const html = document.documentElement\n // return Math.max(\n // body.scrollHeight,\n // body.offsetHeight,\n // html.clientHeight,\n // html.scrollHeight,\n // html.offsetHeight\n // )\n // }\n //\n // static get pageWidth() {\n // const body = document.body\n // const html = document.documentElement\n // return Math.max(body.scrollWidth, body.offsetWidth, html.clientWidth, html.scrollWidth, html.offsetWidth)\n // }\n \n //#region Static Properties - Page Dimensions Cache\n \n private static _cachedPageWidth: number | undefined\n private static _cachedPageHeight: number | undefined\n private static _pageDimensionsCacheValid = false\n private static _resizeObserverInitialized = false\n \n //#endregion\n \n //#region Static Methods - Page Dimensions\n \n /**\n * Initialize resize observer to invalidate cache when page dimensions change.\n * This is called lazily on first access.\n */\n private static _initializePageDimensionsCacheIfNeeded() {\n if (this._resizeObserverInitialized) {\n return\n }\n \n this._resizeObserverInitialized = true\n \n // Invalidate cache on window resize\n window.addEventListener(\"resize\", () => {\n this._pageDimensionsCacheValid = false\n }, { passive: true })\n \n // Observe document.body for mutations that might affect dimensions\n const bodyObserver = new ResizeObserver(() => {\n this._pageDimensionsCacheValid = false\n })\n \n // Start observing once body is available\n if (document.body) {\n bodyObserver.observe(document.body)\n }\n else {\n // Wait for DOMContentLoaded if body isn't ready yet\n document.addEventListener(\"DOMContentLoaded\", () => {\n bodyObserver.observe(document.body)\n }, { once: true })\n }\n \n // Also invalidate on DOM mutations that might add/remove content\n const mutationObserver = new MutationObserver(() => {\n this._pageDimensionsCacheValid = false\n })\n \n const observeMutations = () => {\n mutationObserver.observe(document.body, {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\"style\", \"class\"]\n })\n }\n \n if (document.body) {\n observeMutations()\n }\n else {\n document.addEventListener(\"DOMContentLoaded\", observeMutations, { once: true })\n }\n }\n \n /**\n * Compute and cache page dimensions.\n * Only triggers reflow when cache is invalid.\n */\n private static _updatePageDimensionsCacheIfNeeded() {\n if (this._pageDimensionsCacheValid &&\n this._cachedPageWidth !== undefined &&\n this._cachedPageHeight !== undefined) {\n return\n }\n \n const body = document.body\n const html = document.documentElement\n \n // Compute both at once to minimize reflows\n this._cachedPageWidth = Math.max(\n body.scrollWidth,\n body.offsetWidth,\n html.clientWidth,\n html.scrollWidth,\n html.offsetWidth\n )\n \n this._cachedPageHeight = Math.max(\n body.scrollHeight,\n body.offsetHeight,\n html.clientHeight,\n html.scrollHeight,\n html.offsetHeight\n )\n \n this._pageDimensionsCacheValid = true\n }\n \n static get pageWidth() {\n this._initializePageDimensionsCacheIfNeeded()\n this._updatePageDimensionsCacheIfNeeded()\n return this._cachedPageWidth!\n }\n \n static get pageHeight() {\n this._initializePageDimensionsCacheIfNeeded()\n this._updatePageDimensionsCacheIfNeeded()\n return this._cachedPageHeight!\n }\n \n /**\n * Manually invalidate the page dimensions cache.\n * Useful if you know dimensions changed and want to force a recalculation.\n */\n static invalidatePageDimensionsCache() {\n this._pageDimensionsCacheValid = false\n }\n \n //#endregion\n \n \n centerInContainer() {\n this.style.left = \"50%\"\n this.style.top = \"50%\"\n this.style.transform = \"translateX(-50%) translateY(-50%)\"\n }\n \n \n centerXInContainer() {\n this.style.left = \"50%\"\n this.style.transform = \"translateX(-50%)\"\n }\n \n \n centerYInContainer() {\n this.style.top = \"50%\"\n this.style.transform = \"translateY(-50%)\"\n }\n \n \n _initViewHTMLElement(\n elementID: string,\n viewHTMLElement: (HTMLElement & LooseObject) | null,\n elementType?: string | null\n ) {\n \n if (!IS(elementType)) {\n elementType = \"div\"\n }\n \n if (!IS(viewHTMLElement)) {\n \n this._viewHTMLElement = this.createElement(elementID, elementType)\n \n this.style.position = \"absolute\"\n this.style.margin = \"0\"\n \n }\n else {\n \n this._viewHTMLElement = viewHTMLElement\n \n }\n \n if (IS(elementID)) {\n this.viewHTMLElement.id = elementID\n }\n \n this.viewHTMLElement.obeyAutolayout = YES\n this.viewHTMLElement.UIViewObject = this\n this.addStyleClass(this.styleClassName)\n \n }\n \n \n set nativeSelectionEnabled(selectable: boolean) {\n this._nativeSelectionEnabled = selectable\n if (!selectable) {\n this.style.cssText = this.style.cssText +\n \" -webkit-touch-callout: none; -webkit-user-select: none; \" +\n \"-khtml-user-select: none; -moz-user-select: none; \" +\n \"-ms-user-select: none; user-select: none;\"\n }\n else {\n this.style.cssText = this.style.cssText +\n \" -webkit-touch-callout: text; -webkit-user-select: text; \" +\n \"-khtml-user-select: text; -moz-user-select: text; \" +\n \"-ms-user-select: text; user-select: text;\"\n }\n }\n \n get nativeSelectionEnabled() {\n return this._nativeSelectionEnabled\n }\n \n get styleClassName() {\n return \"UICore_UIView_\" + this.class.name\n }\n \n protected _initViewCSSSelectorsIfNeeded() {\n if (!this.class._areViewCSSSelectorsInitialized) {\n this.initViewStyleSelectors()\n this.class._areViewCSSSelectorsInitialized = YES\n }\n }\n \n \n initViewStyleSelectors() {\n \n // Override this in a subclass\n \n }\n \n initStyleSelector(selector: string, style: string) {\n const styleRules = UIView.getStyleRules(selector)\n if (!styleRules) {\n UIView.createStyleSelector(selector, style)\n }\n }\n \n createElement(elementID: string, elementType: string) {\n let result = document.getElementById(elementID)\n if (!result) {\n result = document.createElement(elementType)\n }\n return result\n }\n \n \n public get viewHTMLElement() {\n return this._viewHTMLElement\n }\n \n \n public get elementID() {\n return this.viewHTMLElement.id\n }\n \n setInnerHTML(key: string, defaultString: string, parameters?: { [x: string]: string | UILocalizedTextObject }) {\n \n this._innerHTMLKey = key\n this._defaultInnerHTML = defaultString\n this._parameters = parameters\n \n const languageName = UICore.languageService.currentLanguageKey\n const result = UICore.languageService.stringForKey(key, languageName, defaultString, parameters)\n \n this.innerHTML = result ?? \"\"\n \n }\n \n \n protected _setInnerHTMLFromKeyIfPossible() {\n if (this._innerHTMLKey && this._defaultInnerHTML) {\n this.setInnerHTML(this._innerHTMLKey, this._defaultInnerHTML, this._parameters)\n }\n }\n \n protected _setInnerHTMLFromLocalizedTextObjectIfPossible() {\n if (IS(this._localizedTextObject)) {\n this.innerHTML = UICore.languageService.stringForCurrentLanguage(this._localizedTextObject)\n }\n }\n \n \n get localizedTextObject() {\n return this._localizedTextObject\n }\n \n \n set localizedTextObject(localizedTextObject: UILocalizedTextObject | undefined) {\n this._localizedTextObject = localizedTextObject\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n \n get innerHTML() {\n return this.viewHTMLElement.innerHTML\n }\n \n set innerHTML(innerHTML) {\n if (this.innerHTML != innerHTML) {\n this.viewHTMLElement.innerHTML = FIRST(innerHTML, \"\")\n }\n }\n \n \n set hoverText(hoverText: string | undefined | null) {\n if (IS_NOT_LIKE_NULL(hoverText)) {\n this.viewHTMLElement.setAttribute(\"title\", hoverText)\n }\n else {\n this.viewHTMLElement.removeAttribute(\"title\")\n }\n }\n \n get hoverText() {\n return this.viewHTMLElement.getAttribute(\"title\")\n }\n \n \n get scrollSize() {\n return new UIRectangle(0, 0, this.viewHTMLElement.scrollHeight, this.viewHTMLElement.scrollWidth)\n }\n \n \n get dialogView(): UIDialogView | undefined {\n if (!IS(this.superview)) {\n return\n }\n if (!((this as any)[\"_isAUIDialogView\"])) {\n return this.superview.dialogView\n }\n return this as any as UIDialogView\n }\n \n get rootView(): UIView {\n if (IS(this.superview)) {\n return this.superview.rootView\n }\n return this\n }\n \n public set enabled(enabled: boolean) {\n this._enabled = enabled\n this.updateContentForCurrentEnabledState()\n }\n \n \n public get enabled(): boolean {\n return this._enabled\n }\n \n updateContentForCurrentEnabledState() {\n this.hidden = !this.enabled\n this.userInteractionEnabled = this.enabled\n }\n \n \n public get tabIndex(): number {\n return Number(this.viewHTMLElement.getAttribute(\"tabindex\"))\n }\n \n \n public set tabIndex(index: number) {\n this.viewHTMLElement.setAttribute(\"tabindex\", \"\" + index)\n }\n \n \n get propertyDescriptors(): { object: UIObject; name: string }[] {\n \n let result: any[] = []\n \n function isPlainObject(value: any): value is object {\n return value instanceof Object && Object.getPrototypeOf(value) === Object.prototype\n }\n \n function isAnArray(value: any): value is any[] {\n return value instanceof Array && Object.getPrototypeOf(value) === Array.prototype\n }\n \n this.withAllSuperviews.forEach(view => {\n \n const descriptorFromObject = function (\n this: UIView,\n object?: object,\n pathRootObject: object = object!,\n existingPathComponents: string[] = [],\n lookInArrays = YES,\n depthLeft = 5\n ): {\n subObjects: { object: object; key: string }[];\n descriptor: { name: string; object: object } | undefined\n } {\n \n let resultDescriptor: { name: string; object: object } | undefined\n const subObjects: { object: object, key: string }[] = []\n const subArrays: { array: any[], key: string }[] = []\n \n FIRST_OR_NIL(object).forEach((value, key, stopLooping) => {\n \n if (this == value) {\n \n existingPathComponents.push(key)\n \n resultDescriptor = { object: pathRootObject!, name: existingPathComponents.join(\".\") }\n stopLooping()\n return\n \n }\n \n \n if (\n isPlainObject(value) &&\n !_UIViewPropertyKeys.contains(key) &&\n !_UIViewControllerPropertyKeys.contains(key)\n ) {\n subObjects.push({ object: value, key: key })\n }\n if (\n lookInArrays &&\n isAnArray(value) &&\n !_UIViewPropertyKeys.contains(key) &&\n !_UIViewControllerPropertyKeys.contains(key)\n ) {\n subArrays.push({ array: value, key: key })\n }\n \n })\n \n if (!resultDescriptor && lookInArrays) {\n \n subArrays.copy().forEach(value => {\n \n if (value.key.startsWith(\"_\")) {\n \n subArrays.removeElement(value)\n subArrays.push(value)\n \n }\n \n })\n \n subArrays.find(arrayObject =>\n arrayObject.array.find((value, index) => {\n if (this == value) {\n existingPathComponents.push(arrayObject.key + \".\" + index)\n resultDescriptor = { object: pathRootObject!, name: existingPathComponents.join(\".\") }\n return YES\n }\n return NO\n })\n )\n \n }\n \n // if (!resultDescriptor && depthLeft) {\n //\n // // @ts-ignore\n // resultDescriptor = subObjects.find(object => descriptorFromObject(\n // object,\n // pathRootObject,\n // existingPathComponents,\n // NO,\n // depthLeft - 1\n // ))\n //\n // }\n \n if (resultDescriptor?.object?.constructor?.name == \"Object\") {\n \n var asd = 1\n \n }\n \n const result = {\n descriptor: resultDescriptor,\n subObjects: subObjects\n }\n \n return result\n \n }.bind(this)\n \n const viewControllerResult = descriptorFromObject(view.viewController)\n \n if (viewControllerResult?.descriptor) {\n \n result.push(viewControllerResult.descriptor)\n \n }\n \n const viewResult = descriptorFromObject(view)\n \n if (viewResult?.descriptor) {\n \n result.push(viewResult.descriptor)\n \n }\n else if (this.superview && this.superview == view) {\n \n result.push({ object: view, key: \"subviews.\" + view.subviews.indexOf(this) })\n \n }\n \n \n // view.forEach((value, key, stopLooping) => {\n //\n // if (this == value) {\n //\n // result.push({ object: view, name: key })\n //\n // stopLooping()\n //\n // }\n //\n // })\n \n \n })\n \n return result\n \n }\n \n get styleClasses() {\n return this._styleClasses\n }\n \n set styleClasses(styleClasses) {\n this._styleClasses = styleClasses\n }\n \n hasStyleClass(styleClass: string) {\n \n // This is for performance reasons\n if (!IS(styleClass)) {\n return NO\n }\n \n const index = this.styleClasses.indexOf(styleClass)\n if (index > -1) {\n return YES\n }\n return NO\n \n }\n \n \n addStyleClass(styleClass: string) {\n \n if (!IS(styleClass)) {\n return\n }\n \n if (!this.hasStyleClass(styleClass)) {\n this._styleClasses.push(styleClass)\n }\n \n }\n \n \n removeStyleClass(styleClass: string) {\n \n // This is for performance reasons\n if (!IS(styleClass)) {\n return\n }\n \n const index = this.styleClasses.indexOf(styleClass)\n if (index > -1) {\n this.styleClasses.splice(index, 1)\n }\n \n }\n \n \n static findViewWithElementID(elementID: string): UIView | undefined {\n const viewHTMLElement = document.getElementById(elementID)\n if (IS_NOT(viewHTMLElement)) {\n return\n }\n // @ts-ignore\n return viewHTMLElement.UIView\n }\n \n \n static injectCSS(cssText: string, id?: string) {\n if (id) {\n const existing = document.getElementById(id) as HTMLStyleElement | null\n if (existing) {\n if (existing.textContent !== cssText) {\n existing.textContent = cssText\n }\n return\n }\n }\n \n const style = document.createElement(\"style\")\n if (id) {\n style.id = id\n }\n \n style.textContent = cssText\n document.head.appendChild(style)\n }\n \n static createStyleSelector(selector: string, style: string) {\n this.injectCSS(selector + \" { \" + style + \" }\")\n }\n \n static getStyleRules(selector: string) {\n \n // https://stackoverflow.com/questions/324486/how-do-you-read-css-rule-values-with-javascript\n //Inside closure so that the inner functions don't need regeneration on every call.\n const getCssClasses = (function () {\n function normalize(str: string) {\n if (!str) {\n return \"\"\n }\n str = String(str).replace(/\\s*([>~+])\\s*/g, \" $1 \") //Normalize symbol spacing.\n return str.replace(/(\\s+)/g, \" \").trim() //Normalize whitespace\n }\n \n function split(str: string, on: string) { //Split, Trim, and remove empty elements\n return str.split(on).map(x => x.trim()).filter(x => x)\n }\n \n function containsAny(selText: string | any[], ors: any[]) {\n return selText ? ors.some(x => selText.indexOf(x) >= 0) : false\n }\n \n return function (selector: string) {\n const logicalORs = split(normalize(selector), \",\")\n const sheets = Array.from(window.document.styleSheets)\n const ruleArrays = sheets.map((x) => Array.from(x.rules || x.cssRules || []))\n const allRules = ruleArrays.reduce((all, x) => all.concat(x), [])\n // @ts-ignore\n return allRules.filter((x) => containsAny(normalize(x.selectorText), logicalORs))\n }\n })()\n \n return getCssClasses(selector)\n \n // selector = selector.toLowerCase()\n // let styleRules\n // for (let i = 0; i < document.styleSheets.length; i++) {\n // const styleSheet = document.styleSheets[i] as any\n //\n // try {\n //\n // styleRules = styleSheet.cssRules ? styleSheet.cssRules : styleSheet.rules\n //\n // } catch (error) {\n //\n // console.log(error)\n //\n // }\n //\n // }\n //\n // return styleRules\n \n }\n \n get style() {\n return this.viewHTMLElement.style\n }\n \n \n get computedStyle() {\n return getComputedStyle(this.viewHTMLElement)\n }\n \n public get hidden(): boolean {\n return this._isHidden\n }\n \n public set hidden(v: boolean) {\n \n this._isHidden = v\n \n if (this._isHidden) {\n this.style.visibility = \"hidden\"\n }\n else {\n this.style.visibility = \"visible\"\n }\n \n \n }\n \n \n static set pageScale(scale: number) {\n \n UIView._pageScale = scale\n \n const zoom = scale\n const width = 100 / zoom\n const viewHTMLElement = UICore.main.rootViewController.view.viewHTMLElement\n viewHTMLElement.style.transformOrigin = \"left top\"\n viewHTMLElement.style.transform = \"scale(\" + zoom + \")\"\n viewHTMLElement.style.width = width + \"%\"\n \n }\n \n static get pageScale() {\n return UIView._pageScale\n }\n \n \n set scale(scale: number) {\n \n this._scale = scale\n \n const zoom = scale\n // const width = 100 / zoom\n // const height = 100 / zoom\n const viewHTMLElement = this.viewHTMLElement\n viewHTMLElement.style.transformOrigin = \"left top\"\n viewHTMLElement.style.transform = viewHTMLElement.style.transform.replace(\n (viewHTMLElement.style.transform.match(\n new RegExp(\"scale\\\\(.*\\\\)\", \"g\")\n )?.firstElement ?? \"\"),\n \"\"\n ) + \"scale(\" + zoom + \")\"\n // viewHTMLElement.style.width = width + \"%\"\n // viewHTMLElement.style.height = height + \"%\"\n \n if (this.isInternalScaling) {\n \n this.setFrame(this.frame, this.frame.zIndex, YES)\n \n }\n \n }\n \n get scale() {\n \n return this._scale\n \n }\n \n // Use this method to calculate the frame for the view itself\n // This can be used when adding subviews to existing views like buttons\n calculateAndSetViewFrame() {\n \n }\n \n \n public get frame() {\n let result: UIRectangle & { zIndex?: number }\n if (!this.isVirtualLayouting) {\n result = this._frame?.copy() as any\n }\n else {\n result = this._frameForVirtualLayouting?.copy() as any\n }\n if (!result) {\n result = new UIRectangle(\n this._resizeObserverEntry?.contentRect.left ?? this.viewHTMLElement.offsetLeft,\n this._resizeObserverEntry?.contentRect.top ?? this.viewHTMLElement.offsetTop,\n this._resizeObserverEntry?.contentRect.height ?? this.viewHTMLElement.offsetHeight,\n this._resizeObserverEntry?.contentRect.width ?? this.viewHTMLElement.offsetWidth\n ) as any\n result.zIndex = 0\n }\n return result\n }\n \n public set frame(rectangle: UIRectangle & { zIndex?: number }) {\n if (IS(rectangle)) {\n this.setFrame(rectangle, rectangle.zIndex)\n }\n }\n \n // If YES, then the view is not counted in intrinsic content size calculation.\n // This should be used for things like background views that just take the shape of the parent view.\n hasWeakFrame = NO\n \n // Set view as having a weak frame and set the frame.\n public set weakFrame(rectangle: UIRectangle & { zIndex?: number }) {\n this.hasWeakFrame = YES\n this.frame = rectangle\n }\n \n // Set view as having a strong frame and set the frame.\n public set strongFrame(rectangle: UIRectangle & { zIndex?: number }) {\n this.hasWeakFrame = NO\n this.frame = rectangle\n }\n \n \n setFrame(rectangle: UIRectangle & { zIndex?: number }, zIndex = 0, performUncheckedLayout = NO) {\n \n const frame: (UIRectangle & { zIndex?: number }) = this._frame || new UIRectangle(nil, nil, nil, nil) as any\n \n if (!rectangle) {\n return\n }\n \n rectangle.materialize()\n \n if (zIndex != undefined) {\n rectangle.zIndex = zIndex\n }\n if (!this.isVirtualLayouting) {\n this._frame = rectangle\n }\n else {\n this._frameForVirtualLayouting = rectangle\n }\n \n if (frame && frame != nil && frame.isEqualTo(\n rectangle) && frame.zIndex == rectangle.zIndex && !performUncheckedLayout) {\n return\n }\n \n if (this.isInternalScaling) {\n rectangle.scale(1 / this.scale)\n }\n \n if (!this.isVirtualLayouting) {\n UIView._setAbsoluteSizeAndPosition(\n this.viewHTMLElement,\n rectangle.topLeft.x,\n rectangle.topLeft.y,\n rectangle.width,\n rectangle.height,\n rectangle.zIndex,\n this.frameTransform\n )\n }\n \n const haveBoundsChanged = (frame.height.integerValue != rectangle.height.integerValue) ||\n (frame.width.integerValue != rectangle.width.integerValue)\n if (haveBoundsChanged || performUncheckedLayout) {\n this.setNeedsLayout()\n this.boundsDidChange(this.bounds)\n }\n \n }\n \n get bounds() {\n \n let _frame: (UIRectangle & { zIndex?: number }) | undefined\n if (!this.isVirtualLayouting) {\n _frame = this._frame\n }\n else {\n _frame = this._frameForVirtualLayouting\n }\n \n let result: UIRectangle\n if (IS_NOT(_frame)) {\n let cachedFrame: UIRectangle | undefined\n if (!this.isVirtualLayouting) {\n cachedFrame = this._frameCache\n }\n else {\n cachedFrame = this._frameCacheForVirtualLayouting\n }\n result = cachedFrame ?? new UIRectangle(\n 0,\n 0,\n this._resizeObserverEntry?.contentRect.height ?? this.viewHTMLElement.offsetHeight,\n this._resizeObserverEntry?.contentRect.width ?? this.viewHTMLElement.offsetWidth\n )\n if (!this.isVirtualLayouting && this.isMemberOfViewTree && this.viewHTMLElement.isConnected) {\n this._frameCache = result\n }\n else if (this.isMemberOfViewTree && this.viewHTMLElement.isConnected) {\n this._frameCacheForVirtualLayouting = result\n }\n \n }\n else {\n let frame: (UIRectangle & { zIndex?: number })\n if (!this.isVirtualLayouting) {\n frame = this.frame\n }\n else {\n frame = this._frameForVirtualLayouting ?? this.frame\n }\n result = frame.copy()\n result.x = 0\n result.y = 0\n }\n \n result.minHeight = 0\n result.minWidth = 0\n \n return result\n }\n \n \n set bounds(rectangle: UIRectangle) {\n const frame = this.frame\n const newFrame = new UIRectangle(frame.topLeft.x, frame.topLeft.y, rectangle.height, rectangle.width)\n // @ts-ignore\n newFrame.zIndex = frame.zIndex\n this.frame = newFrame\n }\n \n boundsDidChange(bounds: UIRectangle) {\n \n \n }\n \n didResize(entry: ResizeObserverEntry) {\n \n this._resizeObserverEntry = entry\n this._frameCache = undefined\n this._frameCacheForVirtualLayouting = undefined\n this.setNeedsLayout()\n \n this.boundsDidChange(new UIRectangle(0, 0, entry.contentRect.height, entry.contentRect.width))\n \n }\n \n get frameTransform(): string {\n return this._frameTransform\n }\n \n set frameTransform(value: string) {\n \n this._frameTransform = value\n \n this.setFrame(this.frame, this.frame.zIndex, YES)\n \n }\n \n setPosition(\n left: number | string = nil,\n right: number | string = nil,\n bottom: number | string = nil,\n top: number | string = nil,\n height: number | string = nil,\n width: number | string = nil\n ) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"left\", left)\n this.setStyleProperty(\"right\", right)\n this.setStyleProperty(\"bottom\", bottom)\n this.setStyleProperty(\"top\", top)\n this.setStyleProperty(\"height\", height)\n this.setStyleProperty(\"width\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n setSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"height\", height)\n this.setStyleProperty(\"width\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n setMinSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"minHeight\", height)\n this.setStyleProperty(\"minWidth\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n setMaxSizes(height?: number | string, width?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"maxHeight\", height)\n this.setStyleProperty(\"maxWidth\", width)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n setMargin(margin?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"margin\", margin)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n setMargins(left?: number | string, right?: number | string, bottom?: number | string, top?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"marginLeft\", left)\n this.setStyleProperty(\"marginRight\", right)\n this.setStyleProperty(\"marginBottom\", bottom)\n this.setStyleProperty(\"marginTop\", top)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n \n setPadding(padding?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"padding\", padding)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n \n setPaddings(left?: number | string, right?: number | string, bottom?: number | string, top?: number | string) {\n \n const previousBounds = this.bounds\n \n this.setStyleProperty(\"paddingLeft\", left)\n this.setStyleProperty(\"paddingRight\", right)\n this.setStyleProperty(\"paddingBottom\", bottom)\n this.setStyleProperty(\"paddingTop\", top)\n \n const bounds = this.bounds\n if (bounds.height != previousBounds.height || bounds.width != previousBounds.width) {\n this.setNeedsLayout()\n this.boundsDidChange(bounds)\n }\n \n }\n \n \n setBorder(\n radius: number | string = nil,\n width: number | string = 1,\n color: UIColor = UIColor.blackColor,\n style: string = \"solid\"\n ) {\n \n this.setStyleProperty(\"borderStyle\", style)\n \n this.setStyleProperty(\"borderRadius\", radius)\n \n this.colorStyleProxy.borderColor = color\n \n this.setStyleProperty(\"borderWidth\", width)\n \n }\n \n setStyleProperty(propertyName: string, value?: number | string) {\n \n try {\n \n if (IS_NIL(value)) {\n return\n }\n if (IS_DEFINED(value) && (value as Number).isANumber) {\n value = \"\" + (value as number).integerValue + \"px\"\n }\n \n // @ts-ignore\n this.style[propertyName] = value\n \n }\n catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n \n get userInteractionEnabled() {\n return (this.style.pointerEvents != \"none\")\n }\n \n set userInteractionEnabled(userInteractionEnabled) {\n if (userInteractionEnabled) {\n this.style.pointerEvents = \"\"\n }\n else {\n this.style.pointerEvents = \"none\"\n }\n }\n \n \n get backgroundColor() {\n return this._backgroundColor\n }\n \n set backgroundColor(backgroundColor: UIColor) {\n const previous = this._backgroundColor\n if (previous === backgroundColor) {\n return\n }\n if (\n previous?.semanticKey &&\n previous.semanticKey === backgroundColor?.semanticKey &&\n previous._semanticClass === backgroundColor?._semanticClass\n ) {\n return\n }\n if (!previous?.semanticKey && !backgroundColor?.semanticKey &&\n previous?.stringValue === backgroundColor?.stringValue) {\n return\n }\n this._backgroundColor = backgroundColor\n this.colorStyleProxy.backgroundColor = backgroundColor\n }\n \n get colorStyleProxy(): ColorStyleProxy {\n if (!this._colorStyleProxy) {\n const element = this._viewHTMLElement\n this._colorStyleProxy = new Proxy(element.style, {\n set: (target, property, value: UIColor) => {\n \n const registrationKey = `${this._UIViewIndex}_${property as string}`\n \n const previousColor = UIColor._registrationMap.get(registrationKey)\n if (previousColor) {\n previousColor._elementRef = undefined\n previousColor._styleProperty = undefined\n }\n \n value._elementRef = element\n value._styleProperty = property as string\n \n if (value.semanticKey) {\n UIColor._liveColors.push(new WeakRef(value))\n }\n \n UIColor._registrationMap.set(registrationKey, value)\n \n Reflect.set(target, property, value.stringValue)\n return true\n \n }\n }) as unknown as ColorStyleProxy\n }\n return this._colorStyleProxy\n }\n \n \n /**\n * Registers a producer function that generates a composite CSS string value\n * (e.g. a gradient or box-shadow with embedded colors) and re-runs it\n * automatically whenever any of the given semantic keys are updated via\n * applySemanticColors(). Replaces any previous registration for the same\n * CSS property. The initial value is written immediately.\n */\n registerLiveCSSValue(property: string, keys: string[], producer: () => string) {\n \n const previous = this._liveCSSValues.get(property)\n \n if (previous) {\n for (const key of previous.keys) {\n UIColor.unsubscribe(key, this._liveCSSCallback)\n }\n }\n \n this._liveCSSValues.set(property, { keys, producer })\n \n for (const key of keys) {\n UIColor.subscribe(key, this._liveCSSCallback)\n }\n \n ;(this.style as any)[property] = producer()\n \n }\n \n \n get alpha() {\n return 1 * (this.style.opacity as any)\n }\n \n \n set alpha(alpha) {\n this.style.opacity = \"\" + alpha\n }\n \n \n static animateViewOrViewsWithDurationDelayAndFunction(\n viewOrViews: UIView | HTMLElement | UIView[] | HTMLElement[],\n duration: number,\n delay: number,\n timingStyle = \"cubic-bezier(0.25,0.1,0.25,1)\",\n transformFunction: Function,\n transitioncompletionFunction: Function\n ) {\n \n function callTransitioncompletionFunction() {\n (transitioncompletionFunction || nil)();\n (viewOrViews as UIView[] | HTMLElement[]).forEach(view => {\n if (view instanceof UIView) {\n view.animationDidFinish()\n }\n })\n }\n \n if (IS_FIREFOX) {\n \n // Firefox does not fire the transition completion event properly\n new UIObject().performFunctionWithDelay(delay + duration, callTransitioncompletionFunction)\n \n }\n \n \n if (!(viewOrViews instanceof Array)) {\n viewOrViews = [viewOrViews] as any\n }\n \n const transitionStyles: any[] = []\n const transitionDurations: any[] = []\n const transitionDelays: any[] = []\n const transitionTimings: any[] = []\n \n function isUIView(view: any): view is UIView {\n return IS(view.viewHTMLElement)\n }\n \n for (var i = 0; i < (viewOrViews as any).length; i++) {\n \n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n \n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n \n // @ts-ignore\n view.addEventListener(\"transitionend\", transitionDidFinish, true)\n \n transitionStyles.push(view.style.transition)\n transitionDurations.push(view.style.transitionDuration)\n transitionDelays.push(view.style.transitionDelay)\n transitionTimings.push(view.style.transitionTimingFunction)\n \n view.style.transition = \"all\"\n view.style.transitionDuration = \"\" + duration + \"s\"\n view.style.transitionDelay = \"\" + delay + \"s\"\n view.style.transitionTimingFunction = timingStyle\n \n }\n \n transformFunction()\n \n const transitionObject = {\n \"finishImmediately\": finishTransitionImmediately,\n \"didFinish\": transitionDidFinishManually,\n \"views\": viewOrViews,\n \"registrationTime\": Date.now()\n }\n \n function finishTransitionImmediately() {\n for (var i = 0; i < (viewOrViews as any).length; i++) {\n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n view.style.transition = \"all\"\n view.style.transitionDuration = \"\" + duration + \"s\"\n view.style.transitionDelay = \"\" + delay + \"s\"\n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n }\n }\n \n function transitionDidFinish(this: HTMLElement, event: { srcElement: HTMLElement | UIView }) {\n let view = event.srcElement\n if (!view) {\n return\n }\n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n \n callTransitioncompletionFunction()\n \n // @ts-ignore\n view.removeEventListener(\"transitionend\", transitionDidFinish, true)\n \n }\n \n function transitionDidFinishManually() {\n for (let i = 0; i < (viewOrViews as any).length; i++) {\n \n let view = (viewOrViews as UIView[] | HTMLElement[])[i]\n \n if (isUIView(view)) {\n view = view.viewHTMLElement\n }\n \n view.style.transition = transitionStyles[i]\n view.style.transitionDuration = transitionDurations[i]\n view.style.transitionDelay = transitionDelays[i]\n view.style.transitionTimingFunction = transitionTimings[i]\n \n // @ts-ignore\n view.removeEventListener(\"transitionend\", transitionDidFinish, true)\n \n }\n \n \n }\n \n return transitionObject\n \n }\n \n animationDidFinish() {\n \n \n }\n \n \n static _transformAttribute = ((\"transform\" in document.documentElement.style) ? \"transform\" : undefined) ||\n ((\"-webkit-transform\" in document.documentElement.style) ? \"-webkit-transform\" : \"undefined\") ||\n ((\"-moz-transform\" in document.documentElement.style) ? \"-moz-transform\" : \"undefined\") ||\n ((\"-ms-transform\" in document.documentElement.style) ? \"-ms-transform\" : \"undefined\") ||\n ((\"-o-transform\" in document.documentElement.style) ? \"-o-transform\" : \"undefined\")\n \n \n static _setAbsoluteSizeAndPosition(\n element: HTMLElement & LooseObject,\n left: number,\n top: number,\n width: string | number,\n height: string | number,\n zIndex = 0,\n frameTransform = \"\"\n ) {\n \n if (!IS(element) || !element.obeyAutolayout && !element.getAttribute(\"obeyAutolayout\")) {\n return\n }\n \n if (IS(height)) {\n height = height.integerValue + \"px\"\n }\n \n if (IS(width)) {\n width = width.integerValue + \"px\"\n }\n \n //let str = element.style.cssText\n \n frameTransform =\n \"translate3d(\" + (left).integerValue + \"px, \" +\n (top).integerValue + \"px, 0px)\" + frameTransform\n \n const style = element.style\n \n if (element.UIView) {\n \n frameTransform = frameTransform + (style.transform.match(\n new RegExp(\"scale\\\\(.*\\\\)\", \"g\")\n )?.firstElement ?? \"\")\n \n //str = str + UIView._transformAttribute + \": \" + frameTransform + \";\"\n \n }\n \n if (IS_NIL(height)) {\n \n //str = str + \" height: unset;\"\n height = \"unset\"\n \n }\n // else {\n // str = str + \" height:\" + height + \";\"\n // }\n \n if (IS_NIL(width)) {\n \n //str = str + \" width: unset;\"\n width = \"unset\"\n \n }\n // else {\n // str = str + \" width:\" + width + \";\"\n // }\n \n let zIndexString = \"\" + zIndex\n \n if (IS_NIL(zIndex)) {\n \n //str = str + \" z-index: unset;\"\n zIndexString = \"unset\"\n \n }\n // else {\n // str = str + \" z-index:\" + zIndex + \";\"\n // }\n \n style.transform = frameTransform\n style.height = height\n style.width = width\n style.zIndex = zIndexString\n \n //element.style.cssText = element.style.cssText + str\n \n }\n \n \n static performAutoLayout(\n parentElement: HTMLElement & LooseObject,\n visualFormatArray: string | any[] | null,\n constraintsArray: string | any[]\n ) {\n \n const view = new AutoLayout.View()\n \n if (IS(visualFormatArray) && IS(visualFormatArray.length)) {\n view.addConstraints(AutoLayout.VisualFormat.parse(visualFormatArray, { extended: true }))\n }\n \n if (IS(constraintsArray) && IS(constraintsArray.length)) {\n view.addConstraints(constraintsArray)\n }\n \n const elements: Record<string, HTMLElement> = {}\n for (var key in view.subViews) {\n \n if (!view.subViews.hasOwnProperty(key)) {\n continue\n }\n \n var element = nil\n \n try {\n \n element = parentElement.querySelector(\"#\" + key)\n \n }\n catch (error) {\n \n //console.log(\"Error occurred \" + error);\n \n }\n \n if (!(element && !element.obeyAutolayout && !element.getAttribute(\"obeyAutolayout\")) && element) {\n element.className += element.className ? \" abs\" : \"abs\"\n elements[key] = element\n }\n \n }\n \n let parentUIView: UIView = nil\n \n if (parentElement.UIView) {\n parentUIView = parentElement.UIView\n }\n \n const updateLayout = function () {\n view.setSize(\n parentElement ? parentElement.clientWidth : window.innerWidth,\n parentElement ? parentElement.clientHeight : window.innerHeight\n )\n for (key in view.subViews) {\n \n if (!view.subViews.hasOwnProperty(key)) {\n continue\n }\n \n const subView = view.subViews[key]\n \n if (elements[key]) {\n \n UIView._setAbsoluteSizeAndPosition(\n elements[key],\n subView.left,\n subView.top,\n subView.width,\n subView.height,\n // @ts-ignore\n elements[key].UIView.frame.zIndex,\n // @ts-ignore\n elements[key].UIView.frameTransform\n )\n }\n }\n \n parentUIView.didLayoutSubviews()\n \n }\n \n updateLayout()\n return updateLayout\n \n }\n \n \n static runFunctionBeforeNextFrame(step: () => void) {\n \n if (IS_SAFARI) {\n \n // This creates a microtask\n Promise.resolve().then(step)\n \n }\n else {\n \n window.requestAnimationFrame(step)\n \n }\n \n }\n \n \n static _isLayoutViewsIfNeededScheduled = NO\n \n static scheduleLayoutViewsIfNeeded() {\n \n if (UIView._isLayoutViewsIfNeededScheduled) {\n return\n }\n \n UIView._isLayoutViewsIfNeededScheduled = YES\n UIView.runFunctionBeforeNextFrame(() => {\n UIView._isLayoutViewsIfNeededScheduled = NO\n UIView.layoutViewsIfNeeded()\n })\n \n }\n \n \n static layoutViewsIfNeeded() {\n \n if (!UIView._isLayoutViewsIfNeededScheduled) {\n UIView.scheduleLayoutViewsIfNeeded()\n }\n \n if (!UIView._viewsToLayout.length) {\n return\n }\n \n window.UILayoutCycleTracer?.willBeginLayoutPass()\n window.UILayoutDebugger?.willBeginLayoutPass(UIView._viewsToLayout)\n \n const maxIterations = 10\n let iteration = 0\n const layoutCounts = new Map<UIView, number>() // Track how many times each view has been laid out\n \n while (UIView._viewsToLayout.length > 0 && iteration < maxIterations) {\n \n window.UILayoutCycleTracer?.willBeginIteration(iteration)\n window.UILayoutDebugger?.willBeginIteration(iteration)\n \n const viewsToProcess = UIView._viewsToLayout\n UIView._viewsToLayout = []\n \n const viewDepthMap = new Map<UIView, number>()\n \n for (let i = 0; i < viewsToProcess.length; i++) {\n const view = viewsToProcess[i]\n const layoutCount = layoutCounts.get(view) || 0\n \n // Skip if this view has been laid out too many times (cycle detection)\n if (layoutCount >= 5) {\n console.warn(\"View layout cycle detected:\", view)\n UILayoutCycleTracer.printViewReport(view)\n continue\n }\n \n if (!viewDepthMap.has(view)) {\n viewDepthMap.set(view, view.withAllSuperviews.length)\n }\n }\n \n const sortedViews = Array.from(viewDepthMap.keys()).sort((a, b) => {\n return viewDepthMap.get(a)! - viewDepthMap.get(b)!\n })\n \n for (let i = 0; i < sortedViews.length; i++) {\n const view = sortedViews[i]\n window.UILayoutDebugger?.willLayoutView(view)\n if (window.UILayoutDebugger?._shouldHitBreakpoint(view)) {\n const breakpointOnThisLine = \"Add a breakpoint on this line to step through layout.\"\n }\n view.layoutIfNeeded()\n layoutCounts.set(view, (layoutCounts.get(view) || 0) + 1)\n window.UILayoutCycleTracer?.didLayoutView(view)\n window.UILayoutDebugger?.didLayoutView(view)\n }\n \n iteration++\n }\n \n window.UILayoutCycleTracer?.didFinishLayoutPass(iteration)\n window.UILayoutDebugger?.didFinishLayoutPass(iteration)\n \n // console.log(iteration + \" iterations to finish layout\")\n \n }\n \n \n _lastReportedHeight: number = -1\n \n setNeedsLayout() {\n \n if (this._shouldLayout && UIView._viewsToLayout.contains(this)) {\n return\n }\n \n this._shouldLayout = YES\n UIView._viewsToLayout.push(this)\n this.clearIntrinsicSizeCache()\n \n window.UILayoutCycleTracer?.viewDidCallSetNeedsLayout(this)\n window.UILayoutDebugger?.viewDidCallSetNeedsLayout(this)\n \n // // Auto-propagate if intrinsic height changed\n // if (IS(this.superview) && this.superview.usesVirtualLayoutingForIntrinsicSizing) {\n // const newHeight = this.intrinsicContentHeight(this.bounds.width)\n // if (newHeight !== this._lastReportedIntrinsicHeight) {\n // this._lastReportedIntrinsicHeight = newHeight\n // this.superview.setNeedsLayout()\n // }\n // }\n \n if (!UIView._isLayoutViewsIfNeededScheduled) {\n UIView.scheduleLayoutViewsIfNeeded()\n }\n \n }\n \n \n get needsLayout() {\n \n return this._shouldLayout\n \n }\n \n \n layoutIfNeeded() {\n \n if (!this._shouldLayout) {\n return\n }\n \n if (!this.isVirtualLayouting) {\n this._shouldLayout = NO\n }\n \n try {\n \n if (this.bounds.width < 0 || (!this.isVirtualLayouting && !this.isMemberOfViewTree)) {\n return\n }\n \n this.layoutSubviews()\n \n }\n catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n \n layoutSubviews() {\n \n this.willLayoutSubviews()\n \n if (!this.isVirtualLayouting) {\n this._shouldLayout = NO\n }\n \n // Autolayout\n if (this.constraints?.length) {\n this._updateLayoutFunction = UIView.performAutoLayout(this.viewHTMLElement, null, this.constraints)\n }\n this._updateLayoutFunction?.()\n \n this.viewController?.layoutViewSubviews()\n \n this.applyClassesAndStyles()\n \n window.UILayoutDebugger?.willSetSubviewFrames(this)\n for (let i = 0; i < this.subviews?.length; i++) {\n \n const subview = this.subviews[i]\n subview.calculateAndSetViewFrame()\n \n }\n window.UILayoutDebugger?.didSetSubviewFrames(this)\n \n // if (this._loadingView && this._loadingView.superview == this) {\n // this._loadingView.setFrame(this.bounds)\n // }\n \n this.didLayoutSubviews()\n \n if (this._overlayView) {\n this._overlayView.weakFrame = this.bounds\n }\n \n }\n \n applyClassesAndStyles() {\n for (let i = 0; i < this.styleClasses.length; i++) {\n const styleClass = this.styleClasses[i]\n if (styleClass && !this.viewHTMLElement.classList.contains(styleClass)) {\n this.viewHTMLElement.classList.add(styleClass)\n }\n }\n }\n \n willLayoutSubviews() {\n \n this.viewController?.viewWillLayoutSubviews()\n \n }\n \n didLayoutSubviews() {\n this.viewController?.viewDidLayoutSubviews()\n \n // After every real layout pass, check whether this view's rendered height\n // changed. If it did, the superview's cached intrinsic measurement of us is\n // stale. Calling setNeedsLayout on it clears its intrinsic size cache (via\n // the existing setNeedsLayout \u2192 clearIntrinsicSizeCache chain) and schedules\n // a re-layout so it can re-measure with the new height. That re-layout will\n // in turn call didLayoutSubviews on the superview, propagating the signal\n // upward one level at a time until the height stabilises \u2014 without any\n // explicit upward walk here.\n //\n // We read frame.height directly: it is already committed to _frame after a\n // real layout pass, so this is a free field read with zero reflow or\n // recomputation cost.\n const currentHeight = this.frame.height.integerValue\n if (!this.isVirtualLayouting && IS(this.superview) && this.isMemberOfViewTree) {\n if (currentHeight !== this._lastReportedHeight) {\n this._lastReportedHeight = currentHeight\n this.superview.setNeedsLayout()\n }\n }\n }\n \n get constraints() {\n return this._constraints\n }\n \n \n set constraints(constraints) {\n this._constraints = constraints\n }\n \n addConstraint(constraint: any) {\n this.constraints.push(constraint)\n }\n \n addConstraintsWithVisualFormat(visualFormatArray: string[]) {\n this.constraints = this.constraints.concat(AutoLayout.VisualFormat.parse(\n visualFormatArray,\n { extended: true }\n ))\n }\n \n static constraintWithView(\n view: { isKindOfClass: (arg0: typeof UIView) => any; viewHTMLElement: any; id: any },\n attribute: any,\n relation: any,\n toView: { isKindOfClass: any; viewHTMLElement: any; id: any },\n toAttribute: any,\n multiplier: number,\n constant: number,\n priority: number\n ): Constraint {\n \n let UIViewObject = nil\n let viewID = null\n if (view) {\n if (view.isKindOfClass && view.isKindOfClass(UIView)) {\n UIViewObject = view\n view = view.viewHTMLElement\n }\n viewID = view.id\n }\n \n let toUIViewObject = nil\n let toViewID = null\n if (toView) {\n if (toView.isKindOfClass && view.isKindOfClass(UIView)) {\n toUIViewObject = toView\n toView = toView.viewHTMLElement\n }\n toViewID = toView.id\n }\n \n const constraint = {\n \n view1: viewID,\n attr1: attribute,\n relation: relation,\n view2: toViewID,\n attr2: toAttribute,\n multiplier: multiplier,\n constant: constant,\n priority: priority\n \n }\n \n return constraint\n \n }\n \n \n static constraintAttribute = {\n \n \"left\": AutoLayout.Attribute.LEFT,\n \"right\": AutoLayout.Attribute.RIGHT,\n \"bottom\": AutoLayout.Attribute.BOTTOM,\n \"top\": AutoLayout.Attribute.TOP,\n \"centerX\": AutoLayout.Attribute.CENTERX,\n \"centerY\": AutoLayout.Attribute.CENTERY,\n \"height\": AutoLayout.Attribute.HEIGHT,\n \"width\": AutoLayout.Attribute.WIDTH,\n \"zIndex\": AutoLayout.Attribute.ZINDEX,\n // Not sure what these are for\n \"constant\": AutoLayout.Attribute.NOTANATTRIBUTE,\n \"variable\": AutoLayout.Attribute.VARIABLE\n \n } as const\n \n \n static constraintRelation = {\n \n \"equal\": AutoLayout.Relation.EQU,\n \"lessThanOrEqual\": AutoLayout.Relation.LEQ,\n \"greaterThanOrEqual\": AutoLayout.Relation.GEQ\n \n } as const\n \n \n subviewWithID(viewID: string): UIView | undefined {\n let resultHTMLElement: Element & { UIView: UIView } | null\n \n try {\n resultHTMLElement = this.viewHTMLElement.querySelector(\"#\" + viewID)\n }\n catch (error) {\n console.log(error)\n }\n \n // @ts-ignore\n if (resultHTMLElement && resultHTMLElement.UIView) {\n return resultHTMLElement.UIView\n }\n return\n }\n \n rectangleContainingSubviews() {\n const center = this.bounds.center\n let result = new UIRectangle(center.x, center.y, 0, 0)\n for (let i = 0; i < this.subviews.length; i++) {\n const subview = this.subviews[i]\n let frame = subview.frame\n const rectangleContainingSubviews = subview.rectangleContainingSubviews()\n frame = frame.concatenateWithRectangle(rectangleContainingSubviews)\n result = result.concatenateWithRectangle(frame)\n }\n return result\n }\n \n hasSubview(view: UIView) {\n \n // This is for performance reasons\n if (!IS(view)) {\n return NO\n }\n \n for (let i = 0; i < this.subviews.length; i++) {\n const subview = this.subviews[i]\n if (subview == view) {\n return YES\n }\n }\n return NO\n }\n \n get viewBelowThisView() {\n const result: UIView = (this.viewHTMLElement.previousElementSibling as any || {}).UIView\n return result\n }\n \n get viewAboveThisView() {\n const result: UIView = (this.viewHTMLElement.nextElementSibling as any || {}).UIView\n return result\n }\n \n \n addSubview(view: UIView, aboveView?: UIView) {\n \n if (!this.hasSubview(view) && IS(view)) {\n \n view.willMoveToSuperview(this)\n \n if (IS(aboveView)) {\n this.viewHTMLElement.insertBefore(view.viewHTMLElement, aboveView.viewHTMLElement.nextSibling)\n this.subviews.insertElementAtIndex(this.subviews.indexOf(aboveView), view)\n }\n else {\n this.viewHTMLElement.appendChild(view.viewHTMLElement)\n this.subviews.push(view)\n }\n \n view.core = this.core\n view.didMoveToSuperview(this)\n \n if (this.superview && this.isMemberOfViewTree) {\n \n view.broadcastEventInSubtree({\n name: UIView.broadcastEventName.AddedToViewTree,\n parameters: undefined\n })\n \n }\n \n this.setNeedsLayout()\n \n }\n \n }\n \n \n addSubviews(views: UIView[]) {\n views.forEach(view => this.addSubview(view))\n }\n \n addedAsSubviewToView(view: UIView | undefined, aboveView?: UIView) {\n view?.addSubview(this, aboveView)\n return this\n }\n \n \n moveToBottomOfSuperview() {\n \n if (IS(this.superview)) {\n \n const bottomView = this.superview.subviews.firstElement\n \n if (bottomView == this) {\n return\n }\n \n this.superview.subviews.removeElement(this)\n this.superview.subviews.insertElementAtIndex(0, this)\n this.superview.viewHTMLElement.insertBefore(this.viewHTMLElement, bottomView.viewHTMLElement)\n \n }\n \n }\n \n \n moveToTopOfSuperview() {\n \n if (IS(this.superview)) {\n \n const topView = this.superview.subviews.lastElement\n \n if (topView == this) {\n return\n }\n \n this.superview.subviews.removeElement(this)\n this.superview.subviews.push(this)\n this.superview.viewHTMLElement.appendChild(this.viewHTMLElement)\n \n }\n \n }\n \n \n cancelNeedsLayout() {\n this._shouldLayout = NO\n }\n \n removeFromSuperview() {\n if (IS(this.superview)) {\n this.forEachViewInSubtree(view => {\n view.blur()\n view.cancelNeedsLayout()\n })\n this.cancelNeedsLayout()\n const index = this.superview.subviews.indexOf(this)\n if (index > -1) {\n this.superview.subviews.splice(index, 1)\n this.superview.viewHTMLElement.removeChild(this.viewHTMLElement)\n this.superview = undefined\n this.broadcastEventInSubtree({\n name: UIView.broadcastEventName.RemovedFromViewTree,\n parameters: undefined\n })\n \n }\n }\n }\n \n willAppear() {\n \n \n }\n \n willMoveToSuperview(superview: UIView) {\n this._setInnerHTMLFromKeyIfPossible()\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n didMoveToSuperview(superview: UIView) {\n this.superview = superview\n }\n \n // Write the _path attribute on the viewHTMLElement when a view is added to the view tree\n // to make it easier to debug in the element inspector\n static annotatePathOnViewHTMLElements = NO\n // Write the _path attribute on the viewHTMLElements in all views in the tree to make it easier to debug in\n // the element inspector\n _annotatePathOnViewHTMLElementsInSubtree() {\n this.forEachViewInSubtree(view => view._annotatePathOnViewHTMLElement())\n }\n \n // Write the _path attribute on the viewHTMLElement to make it easier to debug in the element inspector\n _annotatePathOnViewHTMLElement() {\n try {\n const descriptors = this.propertyDescriptors\n \n const bestDescriptor =\n descriptors.find(descriptor => !descriptor.name.startsWith(\"subviews.\")) ??\n descriptors.firstElement\n \n if (IS(bestDescriptor)) {\n const ownerName = (bestDescriptor.object as any).constructor?.name ?? \"\"\n this.viewHTMLElement.setAttribute(\n \"_path\",\n ownerName + \".\" + bestDescriptor.name + \"{\" + this.class.name + \"}\"\n )\n }\n \n }\n catch (exception) {\n \n // Nothing here\n \n }\n }\n \n \n wasAddedToViewTree() {\n \n UIView.resizeObserver.observe(this.viewHTMLElement)\n \n /// #if DEV\n if (UIView.annotatePathOnViewHTMLElements) {\n this._annotatePathOnViewHTMLElement()\n }\n /// #endif\n \n }\n \n documentFontsDidLoad() {\n \n // Override in subclasses to respond to the page fonts finishing loading.\n \n }\n \n wasRemovedFromViewTree() {\n \n UIView.resizeObserver.unobserve(this.viewHTMLElement)\n \n // Clean up all color registrations for this view so the liveColorMap\n // and registrationMap don't retain entries for destroyed views.\n for (const [key, color] of UIColor._registrationMap) {\n if (key.startsWith(`${this._UIViewIndex}_`)) {\n color._elementRef = undefined\n color._styleProperty = undefined\n UIColor._registrationMap.delete(key)\n }\n }\n \n // Unsubscribe all live CSS value producers.\n for (const { keys } of this._liveCSSValues.values()) {\n for (const key of keys) {\n UIColor.unsubscribe(key, this._liveCSSCallback)\n }\n }\n this._liveCSSValues.clear()\n \n }\n \n \n get isMemberOfViewTree() {\n let element: HTMLElement & LooseObject | null = this.viewHTMLElement\n for (let i = 0; element; i = i) {\n if (element.parentElement && element.parentElement == document.body) {\n return YES\n }\n element = element.parentElement\n }\n return NO\n }\n \n \n get withAllSuperviews() {\n const result = []\n let view: UIView | undefined = this\n for (let i = 0; IS(view); i = i) {\n result.push(view)\n view = view.superview\n }\n return result\n }\n \n get elementWithAllSuperviewElements(): HTMLElement[] {\n const result = []\n let view: (HTMLElement & { UIView?: UIView }) | undefined | null = this.viewHTMLElement\n for (let i = 0; IS(view); i = i) {\n if (!view) {\n return result\n }\n result.push(view)\n view = view.parentElement\n }\n return result\n }\n \n \n setNeedsLayoutOnAllSuperviews() {\n this.withAllSuperviews.reverse().everyElement.setNeedsLayout()\n }\n \n \n setNeedsLayoutUpToRootView() {\n this.setNeedsLayoutOnAllSuperviews()\n this.setNeedsLayout()\n }\n \n \n focus() {\n this.viewHTMLElement.focus()\n }\n \n \n blur() {\n this.viewHTMLElement.blur()\n }\n \n get isMovable(): boolean {\n return this._isMovable\n }\n \n set isMovable(isMovable: boolean) {\n if (isMovable) {\n this.makeMovable()\n }\n else {\n this.makeNotMovable?.()\n }\n }\n \n \n makeMovable(\n optionalParameters: {\n shouldMoveWithMouseEvent?: (\n sender: UIView,\n event: MouseEvent\n ) => boolean; viewDidMoveToPosition?: (view: UIView, isMovementCompleted: boolean) => void\n } = {}\n ) {\n \n if (this.isMovable) {\n return\n }\n \n //const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement\n const shouldMoveWithMouseEvent = optionalParameters.shouldMoveWithMouseEvent ?? ((\n sender,\n event\n ) => IS(event.altKey))\n \n let viewValuesBeforeModifications: any[] = []\n let startPoint: UIPoint\n let views: UIView[]\n \n const movementFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent && shouldMoveWithMouseEvent(sender, event)) {\n \n if (!this._isMoving) {\n \n startPoint = this.frame.min\n \n sender.pointerDraggingPoint = new UIPoint(0, 0)\n //const neighbouringViews = sender.superview.subviews\n views = sender.withAllSuperviews //.concat(neighbouringViews)\n // sender.moveToTopOfSuperview()\n \n sender.forEachViewInSubtree(view => {\n \n // Cancel pointer\n view.sendControlEventForKey(UIView.controlEvent.PointerCancel, event)\n \n })\n \n viewValuesBeforeModifications = views.everyElement.configureWithObject({\n style: { cursor: \"move\" },\n nativeSelectionEnabled: NO,\n pausesPointerEvents: YES,\n shouldCallPointerUpInside: async () => NO\n }) as any[]\n \n this._isMoving = YES\n \n }\n \n sender.frame = sender.frame\n .rectangleWithX(startPoint.x + sender.pointerDraggingPoint.x)\n .rectangleWithY(startPoint.y + sender.pointerDraggingPoint.y)\n \n optionalParameters.viewDidMoveToPosition?.(this, NO)\n \n }\n else if (this._isMoving) {\n \n movementStopFunction(sender, event)\n \n }\n \n }\n \n const movementStopFunction = (sender: UIView, event: Event) => {\n \n if (IS_NIL(event) || !this._isMoving) {\n return\n }\n \n views?.forEach(\n (view, index) => {\n \n view.configureWithObject(viewValuesBeforeModifications[index])\n //view.shouldCallPointerUpInside = () => UIView.shouldCallPointerUpInsideOnView(view)\n \n }\n )\n \n optionalParameters.viewDidMoveToPosition?.(this, YES)\n \n this._isMoving = NO\n \n }\n \n const cleanupFunction = () => {\n \n if (!this.isMovable) {\n return\n }\n \n this.removeTargetForControlEvent(UIView.controlEvent.PointerDrag, movementFunction)\n this.removeTargetForControlEvents(\n [UIView.controlEvent.PointerUp, UIView.controlEvent.PointerCancel],\n movementStopFunction\n )\n \n this._isMovable = NO\n \n this.makeNotMovable = undefined\n \n }\n \n this.controlEventTargetAccumulator.PointerDrag = movementFunction\n this.controlEventTargetAccumulator.PointerUp.PointerCancel = movementStopFunction\n \n //UIObject.configureWithObject(overlayElement, { remove: EXTEND(() => cleanupFunction()) })\n \n this._isMovable = YES\n \n this.makeNotMovable = cleanupFunction\n \n }\n \n get isResizable(): boolean {\n return this._isResizable\n }\n \n \n set isResizable(isResizable: boolean) {\n if (isResizable) {\n this.makeResizable()\n }\n else {\n this.makeNotResizable?.()\n }\n }\n \n \n makeResizable(\n optionalParameters: {\n overlayElement?: HTMLElement;\n borderWidth?: number;\n borderColor?: UIColor;\n cornerSize?: string;\n maxCornerSize?: string;\n viewDidChangeToSize?: (\n view: UIView,\n isMovementCompleted: boolean\n ) => void\n } = {}\n ) {\n \n if (this.isResizable) {\n return\n }\n \n const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement\n \n const borderWidth = IF(optionalParameters.borderWidth)(RETURNER(optionalParameters.borderWidth + \"px\"))\n .ELSE(RETURNER(undefined)) ||\n overlayElement.style.borderWidth ||\n this.style.borderWidth || \"5px\"\n \n const borderColor = optionalParameters.borderColor?.stringValue ??\n // overlayElement.style.borderColor ??\n // view.style.borderColor ??\n UIColor.transparentColor.stringValue\n //this.transformColorForView(view).stringValue\n \n const maxCornerSize = optionalParameters.maxCornerSize ?? \"10px\"\n const cornerSize = optionalParameters.cornerSize ?? \"5%\"\n \n let yOverflow = 0\n let xOverflow = 0\n \n const pointerUpFunction = () => {\n yOverflow = 0\n xOverflow = 0\n optionalParameters.viewDidChangeToSize?.(this, YES)\n }\n \n const frameWasChanged = () => {\n const frame = this.frame\n if (this.style.minHeight) {\n frame.height = [\n frame.height,\n toPx(this.viewHTMLElement, this.style.minHeight)\n ].max()\n }\n if (this.style.maxHeight) {\n frame.height = [\n frame,\n toPx(this.viewHTMLElement, this.style.maxHeight)\n ].min()\n }\n yOverflow = yOverflow + this.frame.height - frame.height\n this.frame = frame\n optionalParameters.viewDidChangeToSize?.(this, NO)\n }\n \n \n const PointerXDragFunction = (centeredOnPosition: number, sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n const scaleX = this.viewHTMLElement.getBoundingClientRect().width / this.viewHTMLElement.offsetWidth\n const signMultiplier = 1 - 2 * centeredOnPosition\n let movementX = event.movementX / scaleX\n const pageScale = UIView.pageScale\n \n if (xOverflow * signMultiplier > 0 && 0 > movementX) {\n xOverflow = (xOverflow + movementX / pageScale).integerValue\n if (xOverflow >= 0) {\n return\n }\n movementX = xOverflow\n xOverflow = 0\n }\n \n if (xOverflow > 0 && 0 < movementX && signMultiplier < 0) {\n xOverflow = (xOverflow + signMultiplier * movementX / pageScale).integerValue\n if (xOverflow >= 0) {\n return\n }\n movementX = xOverflow * signMultiplier\n xOverflow = 0\n }\n \n const frame = this.frame\n const widthChange = (signMultiplier * movementX) / pageScale\n let frameWidth = frame.width + widthChange\n \n if (this.style.minWidth) {\n frameWidth = [\n frameWidth,\n toPx(this.viewHTMLElement, this.style.minWidth),\n 0\n ].max()\n }\n \n if (this.style.maxWidth) {\n frameWidth = [\n frameWidth,\n toPx(this.viewHTMLElement, this.style.maxWidth)\n ].min()\n }\n \n xOverflow = (xOverflow + frame.width + widthChange - frameWidth).integerValue\n this.frame = frame.rectangleWithWidth(frameWidth, centeredOnPosition)\n frameWasChanged()\n \n }\n \n }\n \n const PointerYDragFunction = (centeredOnPosition: number, sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n const scaleX = this.viewHTMLElement.getBoundingClientRect().width / this.viewHTMLElement.offsetWidth\n const signMultiplier = 1 - 2 * centeredOnPosition\n let movementY = event.movementY / scaleX\n const pageScale = UIView.pageScale\n \n if (yOverflow * signMultiplier > 0 && 0 > movementY) {\n yOverflow = (yOverflow + movementY / pageScale).integerValue\n if (yOverflow >= 0) {\n return\n }\n movementY = yOverflow\n yOverflow = 0\n }\n \n if (yOverflow > 0 && 0 < movementY && signMultiplier < 0) {\n yOverflow = (yOverflow + signMultiplier * movementY / pageScale).integerValue\n if (yOverflow >= 0) {\n return\n }\n movementY = yOverflow * signMultiplier\n yOverflow = 0\n }\n \n const frame = this.frame\n const heightChange = (signMultiplier * movementY) / pageScale\n let frameHeight = frame.height + heightChange\n \n if (this.style.minHeight) {\n frameHeight = [\n frameHeight,\n toPx(this.viewHTMLElement, this.style.minHeight),\n 0\n ].max()\n }\n \n if (this.style.maxHeight) {\n frameHeight = [\n frameHeight,\n toPx(this.viewHTMLElement, this.style.maxHeight)\n ].min()\n }\n \n yOverflow = (yOverflow + frame.height + heightChange - frameHeight).integerValue\n this.frame = frame.rectangleWithHeight(frameHeight, centeredOnPosition)\n frameWasChanged()\n \n }\n \n }\n \n \n const leftEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"leftEdge\",\n style: {\n position: \"absolute\",\n height: \"100%\",\n width: borderWidth,\n top: \"0px\",\n left: \"0px\",\n cursor: \"col-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n leftEdge.controlEventTargetAccumulator.PointerDrag = PointerXDragFunction.bind(this, 1)\n leftEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n const rightEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"rightEdge\",\n style: {\n position: \"absolute\",\n height: \"100%\",\n width: borderWidth,\n top: \"0px\",\n right: \"0px\",\n cursor: \"col-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n rightEdge.controlEventTargetAccumulator.PointerDrag = PointerXDragFunction.bind(this, 0)\n rightEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n // noinspection JSSuspiciousNameCombination\n const bottomEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomEdge\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: \"100%\",\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"row-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n bottomEdge.controlEventTargetAccumulator.PointerDrag = PointerYDragFunction.bind(this, 0)\n bottomEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n // noinspection JSSuspiciousNameCombination\n const topEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topEdge\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: \"100%\",\n top: \"0px\",\n right: \"0px\",\n cursor: \"row-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n topEdge.controlEventTargetAccumulator.PointerDrag = PointerYDragFunction.bind(this, 1)\n topEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const pointerDragTLFunction = (sender: UIView, event: Event) => {\n PointerXDragFunction(1, sender, event)\n PointerYDragFunction(1, sender, event)\n }\n \n // noinspection JSSuspiciousNameCombination\n const topLeftCornerTop = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topLeftCornerTop\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n top: \"0px\",\n left: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n topLeftCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n topLeftCornerTop.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n const topLeftCornerLeft = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topLeftCornerLeft\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n top: \"0px\",\n left: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n topLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n topLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const pointerDragBLFunction = (sender: UIView, event: Event) => {\n PointerXDragFunction(1, sender, event)\n PointerYDragFunction(0, sender, event)\n }\n \n const bottomLeftCornerLeft = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomLeftCornerLeft\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n // noinspection JSSuspiciousNameCombination\n const bottomLeftCornerBottom = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomLeftCornerBottom\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n bottom: \"0px\",\n left: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const pointerDragBRFunction = (sender: UIView, event: Event) => {\n PointerXDragFunction(0, sender, event)\n PointerYDragFunction(0, sender, event)\n }\n \n // noinspection JSSuspiciousNameCombination\n const bottomRightCornerBottom = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomRightCornerBottom\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n bottom: \"0px\",\n right: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n bottomRightCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n bottomRightCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n const bottomRightCornerRight = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"bottomRightCornerRight\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n bottom: \"0px\",\n right: \"0px\",\n cursor: \"nwse-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n bottomRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n bottomRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const pointerDragTRFunction = (sender: UIView, event: Event) => {\n PointerXDragFunction(0, sender, event)\n PointerYDragFunction(1, sender, event)\n }\n \n const topRightCornerRight = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topRightCornerRight\",\n style: {\n position: \"absolute\",\n height: cornerSize,\n maxHeight: maxCornerSize,\n width: borderWidth,\n top: \"0px\",\n right: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n topRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n topRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n // noinspection JSSuspiciousNameCombination\n const topRightCornerTop = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"topRightCornerTop\",\n style: {\n position: \"absolute\",\n height: borderWidth,\n width: cornerSize,\n maxWidth: maxCornerSize,\n top: \"0px\",\n right: \"0px\",\n cursor: \"nesw-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n topRightCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n topRightCornerTop.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const views = [\n \n leftEdge,\n rightEdge,\n bottomEdge,\n topEdge,\n \n topRightCornerTop,\n topLeftCornerTop,\n topLeftCornerLeft,\n bottomLeftCornerLeft,\n bottomLeftCornerBottom,\n bottomRightCornerBottom,\n bottomRightCornerRight,\n topRightCornerRight\n \n ]\n \n views.forEach(view => overlayElement.appendChild(view.viewHTMLElement))\n \n this.resizingHandles = views\n \n this._isResizable = YES\n \n this.makeNotResizable = () => {\n \n if (!this.isResizable) {\n return\n }\n \n views.everyElement.viewHTMLElement.remove()\n this.makeNotResizable = undefined\n this._isResizable = NO\n this.resizingHandles = []\n \n }\n \n }\n \n // noinspection JSUnusedLocalSymbols\n static async shouldCallPointerUpInsideOnView(view: UIView, event: MouseEvent | TouchEvent) {\n \n return YES\n \n }\n \n // noinspection JSUnusedLocalSymbols\n static async shouldCallPointerHoverOnView(view: UIView, event: MouseEvent | TouchEvent) {\n \n return YES\n \n }\n \n // noinspection JSUnusedLocalSymbols\n static async shouldCallPointerLeaveOnView(view: UIView, event: MouseEvent | TouchEvent) {\n \n return YES\n \n }\n \n // noinspection JSUnusedLocalSymbols\n static async shouldCallPointerCancelOnView(view: UIView, event: MouseEvent | TouchEvent) {\n \n return YES\n \n }\n \n shouldCallPointerUpInside(event: MouseEvent | TouchEvent) {\n return UIView.shouldCallPointerUpInsideOnView(this, event)\n }\n \n shouldCallPointerCancel(event: MouseEvent | TouchEvent) {\n return UIView.shouldCallPointerCancelOnView(this, event)\n }\n \n shouldCallPointerHover(event: MouseEvent | TouchEvent) {\n return UIView.shouldCallPointerHoverOnView(this, event)\n }\n \n \n shouldCallPointerLeave(event: MouseEvent | TouchEvent) {\n return UIView.shouldCallPointerLeaveOnView(this, event)\n }\n \n protected _loadUIEvents() {\n \n \n const isTouchEventClassDefined: boolean = NO || (window as any).TouchEvent\n \n const pauseEvent = (event: Event, forced = NO) => {\n \n if (this.pausesPointerEvents || forced) {\n \n if (event.stopPropagation) {\n event.stopPropagation()\n }\n if (event.preventDefault) {\n event.preventDefault()\n }\n event.cancelBubble = true\n event.returnValue = false\n return false\n \n }\n \n if (event.stopPropagation && this.stopsPointerEventPropagation) {\n event.stopPropagation()\n }\n \n }\n \n const onMouseDown = (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n ((this.ignoresMouse || (IS(this._touchEventTime) && (Date.now() - this._touchEventTime) > 500)) &&\n event instanceof MouseEvent)) {\n return\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerDown, event)\n \n this._isPointerInside = YES\n this._isPointerValid = YES\n this._isPointerValidForMovement = YES\n this._isPointerDown = YES\n this._initialPointerPosition = new UIPoint(event.clientX, event.clientY)\n if (isTouchEventClassDefined && event instanceof TouchEvent) {\n this._touchEventTime = Date.now()\n this._initialPointerPosition = new UIPoint(event.touches[0].clientX, event.touches[0].clientY)\n if (event.touches.length > 1) {\n onTouchCancel(event)\n return\n }\n }\n else {\n this._touchEventTime = nil\n pauseEvent(event)\n }\n \n this._hasPointerDragged = NO\n \n UIView._onWindowTouchMove = onTouchMove\n UIView._onWindowMouseup = onmouseup\n UIView._onWindowMouseMove = onMouseMove\n \n }\n \n const onTouchStart = onMouseDown as any\n \n const onmouseup = async (event: MouseEvent) => {\n \n this._isPointerDown = NO\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (this._isPointerInside && await this.shouldCallPointerUpInside(event)) {\n onPointerUpInside(event)\n if (!this._hasPointerDragged) {\n this.sendControlEventForKey(UIView.controlEvent.PointerTap, event)\n }\n }\n \n // This has to be sent after the more specific event so that UIButton can ignore it when not highlighted\n this.sendControlEventForKey(UIView.controlEvent.PointerUp, event)\n \n pauseEvent(event)\n \n }\n \n const onTouchEnd = onmouseup\n \n const onmouseout = async (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (await this.shouldCallPointerLeave(event)) {\n this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\n }\n \n this._isPointerInside = NO\n \n pauseEvent(event)\n \n }\n \n const onTouchLeave = onmouseout\n \n const onmouseover = async (event: MouseEvent) => {\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (await this.shouldCallPointerHover(event)) {\n this.sendControlEventForKey(UIView.controlEvent.PointerHover, event)\n }\n \n this._isPointerInside = YES\n this._isPointerValid = YES\n this._isPointerValidForMovement = YES\n \n pauseEvent(event)\n \n }\n \n const onMouseMove = (event: MouseEvent) => {\n \n // if (this._isPointerDown) {\n //\n // console.log(\"Mouse move\")\n //\n // }\n \n if (!this._isPointerValid && !this._isPointerValidForMovement) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n const clientPoint = new UIPoint(\n event.clientX,\n event.clientY\n )\n if (IS_NOT(this._initialPointerPosition)) {\n this._initialPointerPosition = clientPoint\n }\n \n const distanceToInitialPoint = clientPoint.to(this._initialPointerPosition).length\n if (distanceToInitialPoint > this._pointerDragThreshold) {\n this._hasPointerDragged = YES\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerMove, event)\n \n if (this._hasPointerDragged && this._isPointerDown) {\n const scaleX = this.viewHTMLElement.getBoundingClientRect().width / this.viewHTMLElement.offsetWidth\n const movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / scaleX)\n .add(this.pointerDraggingPoint)\n this.sendControlEventForKey(UIView.controlEvent.PointerDrag, event)\n }\n \n this._previousClientPoint = clientPoint\n \n pauseEvent(event)\n \n }\n \n const onTouchMove = async (event: TouchEvent) => {\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n if (event.touches.length > 1) {\n onTouchZoom(event)\n return\n }\n \n const touch = event.touches[0]\n \n const clientPoint = new UIPoint(\n touch.clientX,\n touch.clientY\n )\n const distanceToInitialPoint = clientPoint.to(this._initialPointerPosition!).length\n if (distanceToInitialPoint > this._pointerDragThreshold) {\n this._hasPointerDragged = YES\n }\n \n if (this._isPointerInside && this.viewHTMLElement !=\n document.elementFromPoint(touch.clientX, touch.clientY)) {\n this._isPointerInside = NO\n if (await this.shouldCallPointerLeave(event)) {\n this.sendControlEventForKey(UIView.controlEvent.PointerLeave, event)\n }\n }\n \n this.sendControlEventForKey(UIView.controlEvent.PointerMove, event)\n \n \n if (this._hasPointerDragged) {\n const scaleX = this.viewHTMLElement.getBoundingClientRect().width / this.viewHTMLElement.offsetWidth\n const movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / scaleX)\n .add(this.pointerDraggingPoint)\n this.sendControlEventForKey(UIView.controlEvent.PointerDrag, event)\n }\n \n this._previousClientPoint = clientPoint\n \n }\n \n const onTouchZoom = (event: TouchEvent) => {\n this.sendControlEventForKey(UIView.controlEvent.MultipleTouches, event)\n }\n const onPointerUpInside = (event: Event) => {\n \n pauseEvent(event)\n this._isPointerDown = NO\n this.sendControlEventForKey(UIView.controlEvent.PointerUpInside, event)\n \n \n }\n \n const onTouchCancel = async (event: MouseEvent | TouchEvent) => {\n \n if (!this._isPointerValid) {\n return\n }\n \n if ((this.ignoresTouches && isTouchEventClassDefined && event instanceof TouchEvent) ||\n (this.ignoresMouse && event instanceof MouseEvent)) {\n return\n }\n \n this._isPointerValid = NO\n this._isPointerValidForMovement = NO\n this._isPointerDown = NO\n \n if (await this.shouldCallPointerCancel(event)) {\n this.sendControlEventForKey(UIView.controlEvent.PointerCancel, event)\n }\n \n }\n \n function eventKeyIsEnter(event: { keyCode: number }) {\n if (event.keyCode !== 13) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsSpace(event: { keyCode: number }) {\n if (event.keyCode !== 32) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsTab(event: { keyCode: number }) {\n if (event.keyCode !== 9) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsEsc(event: { key: string; keyCode: number }) {\n let result: boolean\n if (\"key\" in event) {\n result = (event.key == \"Escape\" || event.key == \"Esc\")\n }\n else {\n // @ts-ignore\n result = (event.keyCode == 27)\n }\n return result\n }\n \n function eventKeyIsLeft(event: KeyboardEvent) {\n if (event.keyCode != 37) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsRight(event: KeyboardEvent) {\n if (event.keyCode != 39) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsDown(event: KeyboardEvent) {\n if (event.keyCode != 40) {\n return NO\n }\n return YES\n }\n \n function eventKeyIsUp(event: KeyboardEvent) {\n if (event.keyCode != 38) {\n return NO\n }\n return YES\n }\n \n const onKeyDown = (event: KeyboardEvent) => {\n \n if (eventKeyIsEnter(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EnterDown, event)\n }\n \n if (eventKeyIsSpace(event)) {\n this.sendControlEventForKey(UIView.controlEvent.SpaceDown, event)\n }\n \n if (eventKeyIsEsc(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EscDown, event)\n }\n \n if (eventKeyIsTab(event)) {\n this.sendControlEventForKey(UIView.controlEvent.TabDown, event)\n }\n \n if (eventKeyIsLeft(event)) {\n this.sendControlEventForKey(UIView.controlEvent.LeftArrowDown, event)\n }\n \n if (eventKeyIsRight(event)) {\n this.sendControlEventForKey(UIView.controlEvent.RightArrowDown, event)\n }\n \n if (eventKeyIsDown(event)) {\n this.sendControlEventForKey(UIView.controlEvent.DownArrowDown, event)\n }\n \n if (eventKeyIsUp(event)) {\n this.sendControlEventForKey(UIView.controlEvent.UpArrowDown, event)\n }\n \n if (event.defaultPrevented) {\n pauseEvent(event, YES)\n }\n \n }\n \n const onKeyUp = (event: KeyboardEvent) => {\n \n if (eventKeyIsEnter(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EnterUp, event)\n }\n \n }\n \n \n const onfocus = (event: Event) => {\n this.sendControlEventForKey(UIView.controlEvent.Focus, event)\n }\n \n const onblur = (event: Event) => {\n this.sendControlEventForKey(UIView.controlEvent.Blur, event)\n }\n \n \n // Mouse and touch start events\n // this._viewHTMLElement.onmousedown = onMouseDown\n // this._viewHTMLElement.ontouchstart = onTouchStart\n this.viewHTMLElement.addEventListener(\"mousedown\", onMouseDown, false)\n this.viewHTMLElement.addEventListener(\"touchstart\", onTouchStart, false)\n // //this.viewHTMLElement.addEventListener(\"mouseenter\", onMouseEnter.bind(this), false);\n \n // Mouse and touch move events\n // this._viewHTMLElement.onmousemove = onMouseMove\n // this._viewHTMLElement.ontouchmove = onTouchMove\n //this.viewHTMLElement.addEventListener(\"mousemove\", onMouseMove, false)\n this.viewHTMLElement.addEventListener(\"touchmove\", onTouchMove, false)\n \n //this.viewHTMLElement.addEventListener(\"mousewheel\", onmousewheel.bind(this), false)\n \n this._viewHTMLElement.onmouseover = onmouseover\n // this.viewHTMLElement.addEventListener(\"mouseover\", onmouseover.bind(this), false)\n \n // Mouse and touch end events\n // this._viewHTMLElement.onmouseup = onmouseup\n // // @ts-ignore\n // this._viewHTMLElement.ontouchend = onTouchEnd\n // this._viewHTMLElement.ontouchcancel = onTouchCancel\n this.viewHTMLElement.addEventListener(\"mouseup\", onmouseup, false)\n // @ts-ignore\n this.viewHTMLElement.addEventListener(\"touchend\", onTouchEnd, false)\n this.viewHTMLElement.addEventListener(\"touchcancel\", onTouchCancel, false)\n \n //this._viewHTMLElement.onmouseout = onmouseout\n this.viewHTMLElement.addEventListener(\"mouseout\", onmouseout, false)\n // @ts-ignore\n this._viewHTMLElement.addEventListener(\"touchleave\", onTouchLeave, true)\n \n // this.viewHTMLElement.onkeydown = onkeydown\n // this.viewHTMLElement.onkeyup = onkeyup\n this._viewHTMLElement.addEventListener(\"keydown\", onKeyDown, false)\n this._viewHTMLElement.addEventListener(\"keyup\", onKeyUp, false)\n \n // Focus events\n this._viewHTMLElement.onfocus = onfocus\n this._viewHTMLElement.onblur = onblur\n // this.viewHTMLElement.addEventListener(\"focus\", onfocus, true)\n // this.viewHTMLElement.addEventListener(\"blur\", onblur, true)\n \n \n }\n \n public static controlEvent = {\n \n \"PointerDown\": \"PointerDown\",\n \"PointerMove\": \"PointerMove\",\n \"PointerDrag\": \"PointerDrag\",\n \"PointerLeave\": \"PointerLeave\",\n \"PointerEnter\": \"PointerEnter\",\n \"PointerUpInside\": \"PointerUpInside\",\n \"PointerTap\": \"PointerTap\",\n \"PointerUp\": \"PointerUp\",\n \"MultipleTouches\": \"PointerZoom\",\n \"PointerCancel\": \"PointerCancel\",\n \"PointerHover\": \"PointerHover\",\n \"EnterDown\": \"EnterDown\",\n \"EnterUp\": \"EnterUp\",\n \"SpaceDown\": \"SpaceDown\",\n \"EscDown\": \"EscDown\",\n \"TabDown\": \"TabDown\",\n \"LeftArrowDown\": \"LeftArrowDown\",\n \"RightArrowDown\": \"RightArrowDown\",\n \"DownArrowDown\": \"DownArrowDown\",\n \"UpArrowDown\": \"UpArrowDown\",\n \"Focus\": \"Focus\",\n \"Blur\": \"Blur\"\n \n } as const\n \n \n controlEvent = UIView.controlEvent\n \n \n public get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<UIView> {\n \n const eventKeys: string[] = []\n \n const result: any = new Proxy(\n (this.constructor as any).controlEvent,\n {\n \n get: (target, key: string, _receiver) => {\n \n eventKeys.push(key)\n \n return result\n \n },\n set: (target, key: string, value, _receiver) => {\n \n eventKeys.push(key)\n this.addTargetForControlEvents(eventKeys, value)\n \n return true\n \n }\n \n }\n )\n \n return result\n \n }\n \n \n addTargetForControlEvents(eventKeys: string[], targetFunction: (sender: UIView, event: Event) => void) {\n eventKeys.forEach(key => this.addTargetForControlEvent(key, targetFunction))\n }\n \n addTargetForControlEvent(\n eventKey: string,\n targetFunction: (sender: UIView, event: Event, callbackControl: { allowConcurrentCalls: () => void }) => any | Promise<any>\n ) {\n \n let targets = this._controlEventTargets[eventKey]\n \n if (!targets) {\n // @ts-ignore\n targets = []\n this._controlEventTargets[eventKey] = targets\n }\n \n const isAsync = targetFunction.constructor.name === \"AsyncFunction\"\n \n if (!isAsync) {\n if (targets.indexOf(targetFunction) == -1) {\n targets.push(targetFunction)\n }\n return\n }\n \n const wrapper = (sender: UIView, event: Event) => {\n const isBlocked = this._ongoingControlEventHandlers.some(\n handle => handle._controlEventKey === eventKey\n )\n if (isBlocked) {\n return\n }\n \n const handle: { _controlEventKey: string } = { _controlEventKey: eventKey }\n this._ongoingControlEventHandlers.push(handle)\n \n const promise = (targetFunction as Function)(sender, event, {\n allowConcurrentCalls: () => {\n this._ongoingControlEventHandlers.removeElement(handle)\n }\n }) as Promise<any>\n \n promise.finally(() => {\n this._ongoingControlEventHandlers.removeElement(handle)\n })\n }\n \n if (targets.indexOf(wrapper) == -1) {\n targets.push(wrapper)\n }\n \n }\n \n removeTargetForControlEvent(eventKey: string, targetFunction: (sender: UIView, event: Event) => void) {\n const targets = this._controlEventTargets[eventKey]\n if (!targets) {\n return\n }\n const index = targets.indexOf(targetFunction)\n if (index != -1) {\n targets.splice(index, 1)\n }\n }\n \n removeTargetForControlEvents(eventKeys: string[], targetFunction: (sender: UIView, event: Event) => void) {\n eventKeys.forEach(key => this.removeTargetForControlEvent(key, targetFunction))\n }\n \n \n performFunctionAfterBroadcastEvent(\n event: string | string[],\n targetFunction: (event: UIViewBroadcastEvent) => void\n ): void {\n const eventNames = Array.isArray(event) ? event : [event]\n eventNames.forEach(name => {\n let targets = this._broadcastEventTargets[name]\n if (!targets) {\n targets = []\n this._broadcastEventTargets[name] = targets\n }\n if (targets.indexOf(targetFunction) == -1) {\n targets.push(targetFunction)\n }\n })\n }\n \n removePerformFunctionAfterBroadcastEvent(\n event: string | string[],\n targetFunction: (event: UIViewBroadcastEvent) => void\n ): void {\n const eventNames = Array.isArray(event) ? event : [event]\n eventNames.forEach(name => {\n const targets = this._broadcastEventTargets[name]\n if (!targets) {\n return\n }\n const index = targets.indexOf(targetFunction)\n if (index != -1) {\n targets.splice(index, 1)\n }\n })\n }\n \n \n sendControlEventForKey(eventKey: string, nativeEvent?: Event) {\n let targets = this._controlEventTargets[eventKey]\n if (!targets) {\n return\n }\n targets = targets.copy()\n for (let i = 0; i < targets.length; i++) {\n const target = targets[i]\n target(this, nativeEvent)\n }\n }\n \n \n static broadcastEventName = {\n \n \"LanguageChanged\": \"LanguageChanged\",\n \"RemovedFromViewTree\": \"RemovedFromViewTree\",\n \"AddedToViewTree\": \"AddedToViewTree\",\n \"PageDidScroll\": \"PageDidScroll\"\n \n } as const\n \n broadcastEventInSubtree(event: UIViewBroadcastEvent) {\n this.forEachViewInSubtree(view => {\n view.didReceiveBroadcastEvent(event)\n if (IS(view.viewController)) {\n view.viewController.viewDidReceiveBroadcastEvent(event)\n }\n })\n }\n \n \n didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n const broadcastTargets = this._broadcastEventTargets[event.name]\n if (broadcastTargets) {\n const targets = broadcastTargets.copy()\n this._broadcastEventTargets[event.name] = []\n for (let i = 0; i < targets.length; i++) {\n targets[i](event)\n }\n }\n \n if (event.name == UIView.broadcastEventName.PageDidScroll) {\n this._isPointerValid = NO\n }\n \n if (event.name == UIView.broadcastEventName.AddedToViewTree) {\n this.wasAddedToViewTree()\n }\n \n if (event.name == UIView.broadcastEventName.RemovedFromViewTree) {\n this.wasRemovedFromViewTree()\n }\n \n if (event.name == UIView.broadcastEventName.LanguageChanged || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n this._setInnerHTMLFromKeyIfPossible()\n this._setInnerHTMLFromLocalizedTextObjectIfPossible()\n }\n \n }\n \n \n forEachViewInSubtree(functionToCall: (view: UIView) => void) {\n functionToCall(this)\n this.subviews.everyElement.forEachViewInSubtree(functionToCall)\n }\n \n rectangleInView(rectangle: UIRectangle, view: UIView, forceIfNotInViewTree = NO) {\n \n if (!forceIfNotInViewTree && (!view.isMemberOfViewTree || !this.isMemberOfViewTree)) {\n return nil\n }\n \n // Get all the superview elements\n const allViewSuperviewElements = view.elementWithAllSuperviewElements\n \n // Find the first common element and the views in between\n const superviewElementsUntilCommonElement = this.elementWithAllSuperviewElements.slice(\n 0,\n this.elementWithAllSuperviewElements.findIndex(\n viewElement => allViewSuperviewElements.contains(viewElement)\n ) + 1\n )\n const commonElement = superviewElementsUntilCommonElement.lastElement\n const viewSuperviewElementsUntilCommonElement = allViewSuperviewElements.slice(\n 0,\n allViewSuperviewElements.findIndex(viewElement => viewElement == commonElement) + 1\n )\n \n // Step until the common element and record the offsets\n let selfOffsetPoint = new UIPoint(0, 0)\n //let selfScale = 1\n for (let i = 0; i < superviewElementsUntilCommonElement.length - 1; i++) {\n const element = superviewElementsUntilCommonElement[i]\n selfOffsetPoint = selfOffsetPoint.add(\n element.UIViewObject?.frame.min ?? new UIPoint(element.offsetLeft, element.offsetTop)\n )\n //selfScale = selfScale * (element.UIView?.scale ?? (element.getBoundingClientRect().width /\n // element.offsetWidth))\n }\n \n let viewOffsetPoint = new UIPoint(0, 0)\n //let viewScale = 1\n for (let i = 0; i < viewSuperviewElementsUntilCommonElement.length - 1; i++) {\n const element = viewSuperviewElementsUntilCommonElement[i]\n viewOffsetPoint = viewOffsetPoint.add(\n element.UIViewObject?.frame.min ?? new UIPoint(element.offsetLeft, element.offsetTop)\n )\n //viewScale = viewScale * (element.UIView?.scale ?? (element.getBoundingClientRect().width /\n // element.offsetWidth))\n }\n \n const offsetPoint = selfOffsetPoint.subtract(viewOffsetPoint)\n \n return rectangle.copy().offsetByPoint(offsetPoint)\n \n }\n \n \n rectangleFromView(rectangle: UIRectangle, view: UIView) {\n return view.rectangleInView(rectangle, this)\n }\n \n \n get contentBounds(): UIRectangle {\n \n const bounds = this.bounds\n const insets = this._contentInsets\n \n return new UIRectangle(\n insets.left,\n insets.top,\n bounds.height - insets.top - insets.bottom,\n bounds.width - insets.left - insets.right\n )\n \n }\n \n contentBoundsWithInset(inset: number): UIRectangle {\n this._contentInsets = { top: inset, left: inset, bottom: inset, right: inset }\n const bounds = this.bounds\n return new UIRectangle(\n inset,\n inset,\n bounds.height - inset * 2,\n bounds.width - inset * 2\n )\n }\n \n contentBoundsWithInsets(\n left: number,\n right: number,\n bottom: number,\n top: number\n ): UIRectangle {\n this._contentInsets = { left, right, bottom, top }\n const bounds = this.bounds\n return new UIRectangle(\n left,\n top,\n bounds.height - top - bottom,\n bounds.width - left - right\n )\n }\n \n protected _getIntrinsicSizeCacheKey(constrainingHeight: number, constrainingWidth: number): string {\n return `h_${constrainingHeight}__w_${constrainingWidth}`\n }\n \n protected _getCachedIntrinsicSize(cacheKey: string): UIRectangle | undefined {\n if (this.sharedIntrinsicSizeCacheIdentifier) {\n return UIView._sharedIntrinsicSizeCaches.get(this.sharedIntrinsicSizeCacheIdentifier)?.[cacheKey]\n }\n return this._intrinsicSizesCache[cacheKey]\n }\n \n protected _setCachedIntrinsicSize(cacheKey: string, size: UIRectangle): void {\n if (this.sharedIntrinsicSizeCacheIdentifier) {\n let bucket = UIView._sharedIntrinsicSizeCaches.get(\n this.sharedIntrinsicSizeCacheIdentifier\n )\n if (!bucket) {\n bucket = {}\n UIView._sharedIntrinsicSizeCaches.set(this.sharedIntrinsicSizeCacheIdentifier, bucket)\n }\n bucket[cacheKey] = size.copy()\n window.UILayoutDebugger?.didSetCachedIntrinsicSize(this, cacheKey, size)\n return\n }\n this._intrinsicSizesCache[cacheKey] = size.copy()\n window.UILayoutDebugger?.didSetCachedIntrinsicSize(this, cacheKey, size)\n }\n \n // clearIntrinsicSizeCache(): void {\n // this._intrinsicSizesCache = {}\n //\n // this._frameCacheForVirtualLayouting = undefined\n // this._frameCache = undefined\n //\n // // Optionally clear parent cache if this view affects parent's intrinsic size\n // if (this.superview?.usesVirtualLayoutingForIntrinsicSizing) {\n // this.superview.clearIntrinsicSizeCache()\n // }\n // }\n \n clearIntrinsicSizeCache(): void {\n \n const hadCachedSize = this.sharedIntrinsicSizeCacheIdentifier\n ? UIView._sharedIntrinsicSizeCaches.has(this.sharedIntrinsicSizeCacheIdentifier)\n : Object.keys(this._intrinsicSizesCache).length > 0\n \n if (this.sharedIntrinsicSizeCacheIdentifier) {\n UIView._sharedIntrinsicSizeCaches.delete(this.sharedIntrinsicSizeCacheIdentifier)\n }\n else {\n this._intrinsicSizesCache = {}\n }\n this._frameCacheForVirtualLayouting = undefined\n this._frameCache = undefined\n \n if (this.superview?.usesVirtualLayoutingForIntrinsicSizing) {\n this.superview.clearIntrinsicSizeCache()\n \n // If we had cached sizes, a parent was measuring us and needs to re-layout\n if (hadCachedSize && !this.isVirtualLayouting) {\n this.superview.setNeedsLayout()\n }\n }\n \n }\n \n intrinsicContentSizeWithConstraints(constrainingHeight: number = 0, constrainingWidth: number = 0) {\n \n constrainingWidth = Math.max(constrainingWidth, 0)\n constrainingHeight = Math.max(constrainingHeight, 0)\n \n const cacheKey = this._getIntrinsicSizeCacheKey(constrainingHeight, constrainingWidth)\n const cachedResult = this._getCachedIntrinsicSize(cacheKey)\n if (cachedResult) {\n return cachedResult\n }\n \n // This works but is slow\n \n const result = new UIRectangle(0, 0, 0, 0)\n if (this.rootView.forceIntrinsicSizeZero) {\n return result\n }\n \n let temporarilyInViewTree = NO\n let nodeAboveThisView: Node | null = null\n if (!this.isMemberOfViewTree) {\n document.body.appendChild(this.viewHTMLElement)\n temporarilyInViewTree = YES\n nodeAboveThisView = this.viewHTMLElement.nextSibling\n }\n \n const height = this.style.height\n const width = this.style.width\n \n this.style.height = \"\" + constrainingHeight + \"px\"\n this.style.width = \"\" + constrainingWidth + \"px\"\n \n \n const left = this.style.left\n const right = this.style.right\n const bottom = this.style.bottom\n const top = this.style.top\n \n this.style.left = \"\"\n this.style.right = \"\"\n this.style.bottom = \"\"\n this.style.top = \"\"\n \n \n const resultHeight = this.viewHTMLElement.scrollHeight\n \n \n const whiteSpace = this.style.whiteSpace\n this.style.whiteSpace = \"nowrap\"\n \n const resultWidth = this.viewHTMLElement.scrollWidth\n \n this.style.whiteSpace = whiteSpace\n \n \n this.style.height = height\n this.style.width = width\n \n this.style.left = left\n this.style.right = right\n this.style.bottom = bottom\n this.style.top = top\n \n if (temporarilyInViewTree) {\n document.body.removeChild(this.viewHTMLElement)\n if (this.superview) {\n if (nodeAboveThisView) {\n this.superview.viewHTMLElement.insertBefore(this.viewHTMLElement, nodeAboveThisView)\n }\n else {\n this.superview.viewHTMLElement.appendChild(this.viewHTMLElement)\n }\n }\n }\n \n result.height = resultHeight\n result.width = resultWidth\n \n this._setCachedIntrinsicSize(cacheKey, result)\n \n return result\n \n }\n \n \n private _intrinsicFrameFromSubviewFrames() {\n \n const framePoints: UIPoint[] = []\n this.subviews.forEach(subview => {\n if (subview == this._loadingView || subview.hasWeakFrame) {\n return\n }\n if (subview.usesVirtualLayoutingForIntrinsicSizing) {\n subview.layoutIfNeeded()\n }\n framePoints.push(subview.frame.min)\n framePoints.push(subview.frame.max)\n })\n // Since this is always called inside a virtual layouting context,\n // we will add padding based on the _contentInsets\n const resultFrame = UIRectangle.boundingBoxForPoints(framePoints)\n .rectangleWithInsets(\n -this._contentInsets?.left ?? 0,\n -this._contentInsets?.right ?? 0,\n -this._contentInsets?.bottom ?? 0,\n -this._contentInsets?.top ?? 0\n )\n return resultFrame\n }\n \n \n intrinsicContentWidth(constrainingHeight: number = 0): number {\n \n constrainingHeight = Math.max(constrainingHeight, 0)\n \n const cacheKey = this._getIntrinsicSizeCacheKey(constrainingHeight, 0)\n const cached = this._getCachedIntrinsicSize(cacheKey)\n if (cached) {\n return cached.width\n }\n \n if (this.usesVirtualLayoutingForIntrinsicSizing) {\n this.startVirtualLayout()\n let resultFrame: UIRectangle\n try {\n this.frame = this.frame.rectangleWithHeight(constrainingHeight).rectangleWithWidth(0)\n this.layoutIfNeeded()\n resultFrame = this._intrinsicFrameFromSubviewFrames()\n }\n finally {\n this.finishVirtualLayout()\n }\n \n this._setCachedIntrinsicSize(cacheKey, new UIRectangle(0, 0, resultFrame.height, resultFrame.width))\n return resultFrame.width\n }\n \n const size = this.intrinsicContentSizeWithConstraints(constrainingHeight, 0)\n return size.width\n \n }\n \n \n intrinsicContentHeight(constrainingWidth: number = 0): number {\n \n constrainingWidth = Math.max(constrainingWidth, 0)\n \n const cacheKey = this._getIntrinsicSizeCacheKey(0, constrainingWidth)\n const cached = this._getCachedIntrinsicSize(cacheKey)\n if (cached) {\n return cached.height\n }\n \n if (this.usesVirtualLayoutingForIntrinsicSizing) {\n this.startVirtualLayout()\n let resultFrame: UIRectangle\n try {\n this.frame = this.frame.rectangleWithWidth(constrainingWidth)\n this.layoutIfNeeded()\n resultFrame = this._intrinsicFrameFromSubviewFrames()\n }\n finally {\n this.finishVirtualLayout()\n }\n \n this._setCachedIntrinsicSize(cacheKey, new UIRectangle(0, 0, resultFrame.height, resultFrame.width))\n return resultFrame.height\n }\n \n const size = this.intrinsicContentSizeWithConstraints(0, constrainingWidth)\n \n if (isNaN(size.height)) {\n console.error(\"NaN in intrinsicContentHeight\", this)\n var asd = 1\n }\n \n return size.height\n \n }\n \n \n intrinsicContentSize(): UIRectangle {\n \n const cacheKey = this._getIntrinsicSizeCacheKey(0, 0)\n const cached = this._getCachedIntrinsicSize(cacheKey)\n if (cached) {\n return cached\n }\n \n if (this.usesVirtualLayoutingForIntrinsicSizing) {\n this.startVirtualLayout()\n let resultFrame: UIRectangle\n try {\n this.layoutIfNeeded()\n resultFrame = this._intrinsicFrameFromSubviewFrames()\n }\n finally {\n this.finishVirtualLayout()\n }\n \n this._setCachedIntrinsicSize(cacheKey, resultFrame)\n return resultFrame\n }\n \n return nil\n \n }\n \n \n /**\n * \u26A0\uFE0F NUCLEAR OPTION \u2014 DO NOT CALL IN NORMAL CODE \u26A0\uFE0F\n *\n * Performs a full-scorched-earth cache purge across the entire view subtree rooted\n * at `this`, then drives an immediate synchronous layout pass, as if the app had\n * just cold-started.\n *\n * What gets destroyed:\n * \u2022 Every per-instance intrinsic-size cache entry (`_intrinsicSizesCache`)\n * \u2022 Every shared intrinsic-size cache bucket (`UIView._sharedIntrinsicSizeCaches`)\n * \u2022 Every frame cache (`_frameCache`) and virtual-layout frame cache\n * (`_frameCacheForVirtualLayouting`) on every view in the subtree\n * \u2022 Every UITextMeasurement style cache (canvas glyph metrics,\n * computed-style snapshots, etc.)\n *\n * After the purge every view in the subtree is unconditionally marked dirty via\n * `setNeedsLayout()`, then `UIView.layoutViewsIfNeeded()` is called immediately\n * to flush the queue rather than waiting for the next rAF tick.\n *\n * Legitimate uses (exhaustive list):\n * - Recovery from a confirmed cache-corruption bug while a proper fix ships\n * - Test harness reset between isolated rendering assertions\n * - Post-hot-module-replacement refresh in development tooling\n *\n * Do NOT use this to fix a layout glitch you don't understand.\n * Fix the root cause instead. If you find yourself calling this in production\n * code for any reason other than the above, that is a bug \u2014 file it.\n *\n * Complexity: O(n) where n = total views in the subtree.\n * All shared caches are wiped globally, not just for the subtree.\n */\n performForcedSubtreeLayout(): void {\n \n // 1. Nuke all text measurement caches globally \u2014 these are shared across\n // the entire document and cannot be scoped to a subtree.\n UITextMeasurement.clearCaches()\n \n // 2. Wipe all shared intrinsic-size cache buckets globally. These are\n // keyed by sharedIntrinsicSizeCacheIdentifier and may be shared across\n // views outside this subtree, but stale global state is worse than a\n // cold remeasure of an unrelated view.\n UIView.invalidateAllSharedIntrinsicSizeCaches()\n \n // 3. Walk every view in the subtree and obliterate all per-instance caches,\n // then unconditionally schedule it for layout.\n this.forEachViewInSubtree(view => {\n view._intrinsicSizesCache = {}\n view._frameCache = undefined\n view._frameCacheForVirtualLayouting = undefined\n view.setNeedsLayout()\n })\n \n // 4. Drive the layout queue right now, synchronously \u2014 don't wait for the\n // scheduled rAF tick. Callers of this method expect the tree to be\n // fully laid out by the time the call returns.\n UIView.layoutViewsIfNeeded()\n \n }\n \n \n}\n\n\nconst windowMouseMoveFunction = (event: MouseEvent) => {\n \n UIView._onWindowMouseMove(event)\n //pauseEvent(event, YES)\n \n}\nconst windowMouseUpOrLeaveFunction = (event: MouseEvent) => {\n \n const onWindowMouseUp = UIView._onWindowMouseup\n \n UIView._onWindowMouseMove = nil\n UIView._onWindowMouseup = nil\n \n // window.removeEventListener(\"mousemove\", windowMouseMoveFunction)\n // window.removeEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\n // document.body.removeEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n onWindowMouseUp(event)\n \n}\nwindow.addEventListener(\"mousemove\", windowMouseMoveFunction)\nwindow.addEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\ndocument.body.addEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n\nconst windowTouchFunction = () => {\n \n UIView._onWindowTouchMove = nil\n UIView._onWindowMouseup = nil\n // window.removeEventListener(\"touchmove\", UIView._onWindowTouchMove, true)\n // window.removeEventListener(\"mouseup\", windowTouchFunction, true)\n \n}\nwindow.addEventListener(\"touchmove\", UIView._onWindowTouchMove, true)\nwindow.addEventListener(\"mouseup\", windowTouchFunction, true)\n\nfunction props(obj: any) {\n const p = []\n for (; obj != null; obj = Object.getPrototypeOf(obj)) {\n const op = Object.getOwnPropertyNames(obj)\n for (let i = 0; i < op.length; i++) {\n if (p.indexOf(op[i]) == -1) {\n p.push(op[i])\n }\n }\n }\n return p\n}\n\nconst _UIViewPropertyKeys = props(UIView.prototype).concat(new UIView().allKeys)\nconst _UIViewControllerPropertyKeys = props(UIViewController.prototype)\n .concat(new UIViewController(nil).allKeys)\n\n"],
5
+ "mappings": "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",
6
6
  "names": ["result", "selector", "i", "_a", "toPx", "handle"]
7
7
  }