uicore-ts 1.0.178 → 1.0.182

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.
@@ -394,16 +394,16 @@ const _UIView = class extends import_UIObject.UIObject {
394
394
  calculateAndSetViewFrame() {
395
395
  }
396
396
  get frame() {
397
- var _a;
398
- let result = (_a = this._frame) == null ? void 0 : _a.copy();
397
+ var _a, _b, _c, _d, _e, _f;
398
+ let result;
399
399
  if (!result) {
400
400
  result = new import_UIRectangle.UIRectangle(
401
- this.viewHTMLElement.offsetLeft,
402
- this.viewHTMLElement.offsetTop,
401
+ (_b = (_a = this._frame) == null ? void 0 : _a.x) != null ? _b : this.viewHTMLElement.offsetLeft,
402
+ (_d = (_c = this._frame) == null ? void 0 : _c.y) != null ? _d : this.viewHTMLElement.offsetTop,
403
403
  this.viewHTMLElement.offsetHeight,
404
404
  this.viewHTMLElement.offsetWidth
405
405
  );
406
- result.zIndex = 0;
406
+ result.zIndex = (_f = (_e = this._frame) == null ? void 0 : _e.zIndex) != null ? _f : 0;
407
407
  }
408
408
  return result;
409
409
  }
@@ -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 { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport \"./UICoreExtensions\"\nimport type { UIDialogView } from \"./UIDialogView\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport {\n EXTEND,\n FIRST,\n FIRST_OR_NIL, IF,\n IS,\n IS_DEFINED,\n IS_NIL,\n IS_NOT,\n nil,\n NO,\n RETURNER,\n UIObject,\n YES\n} from \"./UIObject\"\nimport { UIPoint } from \"./UIPoint\"\nimport { UIRectangle } from \"./UIRectangle\"\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 enum Attribute {\n \n LEFT, RIGHT, BOTTOM, TOP, CENTERX, CENTERY, WIDTH, HEIGHT, ZINDEX, VARIABLE, NOTANATTRIBUTE\n \n }\n \n \n enum Relation {\n \n EQU, LEQ, GEQ\n \n }\n \n \n}\n\n// @ts-ignore\nif (!window.AutoLayout) {\n \n // @ts-ignore\n window.AutoLayout = nil\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\nexport type UIViewAddControlEventTargetObject<T extends { controlEvent: Record<string, any> }> = {\n \n [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 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 _backgroundColor: UIColor = UIColor.transparentColor\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 = nil\n \n _controlEventTargets: ControlEventTargetsObject = {} //{ \"PointerDown\": Function[]; \"PointerMove\": Function[]; \"PointerLeave\": Function[]; \"PointerEnter\": Function[]; \"PointerUpInside\": Function[]; \"PointerUp\": Function[]; \"PointerHover\": Function[]; };\n _frameTransform: string\n viewController: UIViewController = nil\n _updateLayoutFunction: any = nil\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 private _resizeObserver!: ResizeObserver\n \n private _isMovable = NO\n makeNotMovable?: () => void\n \n private _isResizable = NO\n makeNotResizable?: () => void\n \n private _isMoving: boolean = NO\n \n constructor(\n elementID: string = (\"UIView\" + UIView.nextIndex),\n viewHTMLElement: HTMLElement & LooseObject | null = null,\n elementType: string | null = null,\n initViewData?: any\n ) {\n \n super()\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.subviews = []\n this.superview = nil\n \n this._constraints = []\n this._updateLayoutFunction = nil\n \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 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 \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 centerInContainer() {\n this.style.left = \"50%\"\n this.style.top = \"50%\"\n this.style.transform = \"translateX(-50%) translateY(-50%)\"\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.UIView = this\n this.addStyleClass(this.styleClassName)\n \n this._resizeObserver = new ResizeObserver(() => this.setNeedsLayout())\n this._resizeObserver.observe(this.viewHTMLElement)\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 \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 initViewStyleSelectors() {\n \n // Override this in a subclass\n \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 public get viewHTMLElement() {\n return this._viewHTMLElement\n }\n \n \n public get elementID() {\n return this.viewHTMLElement.id\n }\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 protected _setInnerHTMLFromKeyIfPossible() {\n if (this._innerHTMLKey && this._defaultInnerHTML) {\n this.setInnerHTML(this._innerHTMLKey, this._defaultInnerHTML, this._parameters)\n }\n }\n \n \n protected _setInnerHTMLFromLocalizedTextObjectIfPossible() {\n if (IS(this._localizedTextObject)) {\n this.innerHTML = UICore.languageService.stringForCurrentLanguage(this._localizedTextObject)\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 \n set innerHTML(innerHTML) {\n if (this.innerHTML != innerHTML) {\n this.viewHTMLElement.innerHTML = FIRST(innerHTML, \"\")\n }\n }\n \n set hoverText(hoverText: string) {\n this.viewHTMLElement.setAttribute(\"title\", hoverText)\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 {\n if (!IS(this.superview)) {\n return nil\n }\n if (!((this as any)[\"_isAUIDialogView\"])) {\n return this.superview.dialogView\n }\n return this as any as UIDialogView\n }\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 public get enabled(): boolean {\n return this._enabled\n }\n \n \n updateContentForCurrentEnabledState() {\n this.hidden = !this.enabled\n this.userInteractionEnabled = this.enabled\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 let result: any[] = []\n this.withAllSuperviews.forEach(view => {\n FIRST_OR_NIL(view.viewController).forEach((value, key, stopLooping) => {\n if (this == value) {\n result.push({ object: view.viewController, name: key })\n }\n })\n view.forEach((value, key, stopLooping) => {\n if (this == value) {\n result.push({ object: view, name: key })\n }\n })\n })\n return result\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 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 {\n const viewHTMLElement = document.getElementById(elementID)\n if (IS_NOT(viewHTMLElement)) {\n return nil\n }\n // @ts-ignore\n return viewHTMLElement.UIView\n }\n \n \n static createStyleSelector(selector: string, style: string) {\n \n return\n \n // // @ts-ignore\n // if (!document.styleSheets) {\n // return\n // }\n // if (document.getElementsByTagName(\"head\").length == 0) {\n // return\n // }\n //\n // let styleSheet\n // let mediaType\n //\n // if (document.styleSheets.length > 0) {\n // for (var i = 0, l: any = document.styleSheets.length; i < l; i++) {\n // if (document.styleSheets[i].disabled) {\n // continue\n // }\n // const media = document.styleSheets[i].media\n // mediaType = typeof media\n //\n // if (mediaType === \"string\") {\n // if (media as any === \"\" || ((media as any).indexOf(\"screen\") !== -1)) {\n // styleSheet = document.styleSheets[i]\n // }\n // }\n // else if (mediaType == \"object\") {\n // if (media.mediaText === \"\" || (media.mediaText.indexOf(\"screen\") !== -1)) {\n // styleSheet = document.styleSheets[i]\n // }\n // }\n //\n // if (typeof styleSheet !== \"undefined\") {\n // break\n // }\n // }\n // }\n //\n // if (typeof styleSheet === \"undefined\") {\n // const styleSheetElement = document.createElement(\"style\")\n // styleSheetElement.type = \"text/css\"\n // document.getElementsByTagName(\"head\")[0].appendChild(styleSheetElement)\n //\n // for (i = 0; i < document.styleSheets.length; i++) {\n // if (document.styleSheets[i].disabled) {\n // continue\n // }\n // styleSheet = document.styleSheets[i]\n // }\n //\n // mediaType = typeof styleSheet.media\n // }\n //\n // if (mediaType === \"string\") {\n // for (var i = 0, l = styleSheet.rules.length; i < l; i++) {\n // if (styleSheet.rules[i].selectorText && styleSheet.rules[i].selectorText.toLowerCase() ==\n // selector.toLowerCase()) {\n // styleSheet.rules[i].style.cssText = style\n // return\n // }\n // }\n // styleSheet.addRule(selector, style)\n // }\n // else if (mediaType === \"object\") {\n //\n // var styleSheetLength = 0\n //\n // try {\n //\n // styleSheetLength = (styleSheet.cssRules) ? styleSheet.cssRules.length : 0\n //\n // } catch (error) {\n //\n // }\n //\n //\n // for (var i = 0; i < styleSheetLength; i++) {\n // if (styleSheet.cssRules[i].selectorText && styleSheet.cssRules[i].selectorText.toLowerCase() ==\n // selector.toLowerCase()) {\n // styleSheet.cssRules[i].style.cssText = style\n // return\n // }\n // }\n // styleSheet.insertRule(selector + \"{\" + style + \"}\", styleSheetLength)\n // }\n }\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 get computedStyle() {\n return getComputedStyle(this.viewHTMLElement)\n }\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 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 \n static get pageScale() {\n return UIView._pageScale\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 \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 } = this._frame?.copy() as any\n if (!result) {\n result = new UIRectangle(\n this.viewHTMLElement.offsetLeft,\n this.viewHTMLElement.offsetTop,\n this.viewHTMLElement.offsetHeight,\n 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 \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 (zIndex != undefined) {\n rectangle.zIndex = zIndex\n }\n this._frame = rectangle\n \n if (frame && frame.isEqualTo(rectangle) && frame.zIndex == rectangle.zIndex && !performUncheckedLayout) {\n return\n }\n \n if (this.isInternalScaling) {\n rectangle.scale(1 / this.scale)\n }\n \n UIView._setAbsoluteSizeAndPosition(\n this.viewHTMLElement,\n rectangle.topLeft.x,\n rectangle.topLeft.y,\n rectangle.width,\n rectangle.height,\n rectangle.zIndex\n )\n \n if (frame.height != rectangle.height || frame.width != rectangle.width || performUncheckedLayout) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n get bounds() {\n let result: UIRectangle\n if (IS_NOT(this._frame)) {\n result = new UIRectangle(0, 0, this.viewHTMLElement.offsetHeight, this.viewHTMLElement.offsetWidth)\n }\n else {\n result = this.frame.copy()\n result.x = 0\n result.y = 0\n }\n return result\n }\n \n \n set bounds(rectangle) {\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 \n boundsDidChange() {\n \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()\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()\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()\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()\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()\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()\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()\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()\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.setStyleProperty(\"borderColor\", color.stringValue)\n \n this.setStyleProperty(\"borderWidth\", width)\n \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 } catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n get userInteractionEnabled() {\n return (this.style.pointerEvents != \"none\")\n }\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 get backgroundColor() {\n return this._backgroundColor\n }\n \n \n set backgroundColor(backgroundColor: UIColor) {\n this._backgroundColor = backgroundColor\n this.style.backgroundColor = backgroundColor.stringValue\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 \n animationDidFinish() {\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 ) {\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 const frameTransform = UIView._transformAttribute + \": translate3d(\" + (left).integerValue + \"px, \" +\n (top).integerValue + \"px, 0px)\"\n \n if (element.UIView) {\n \n str = str + frameTransform +\n (element.style.transform.match(\n new RegExp(\"scale\\\\(.*\\\\)\", \"g\")\n )?.firstElement ?? \"\") + \";\"\n \n }\n \n if (IS_NIL(height)) {\n str = str + \" height: unset;\"\n }\n else {\n str = str + \" height:\" + height + \";\"\n }\n \n if (IS_NIL(width)) {\n str = str + \" width: unset;\"\n }\n else {\n str = str + \" width:\" + width + \";\"\n }\n \n if (IS_NIL(zIndex)) {\n str = str + \" z-index: unset;\"\n }\n else {\n str = str + \" z-index:\" + zIndex + \";\"\n }\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 } 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 = 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 UIView._setAbsoluteSizeAndPosition(\n elements[key],\n subView.left,\n subView.top,\n subView.width,\n subView.height\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 scheduleLayoutViewsIfNeeded() {\n \n UIView.runFunctionBeforeNextFrame(UIView.layoutViewsIfNeeded)\n \n }\n \n \n static layoutViewsIfNeeded() {\n for (var i = 0; i < UIView._viewsToLayout.length; i++) {\n const view = UIView._viewsToLayout[i]\n view.layoutIfNeeded()\n }\n UIView._viewsToLayout = []\n }\n \n \n setNeedsLayout() {\n \n if (this._shouldLayout) {\n return\n }\n \n this._shouldLayout = YES\n \n // Register view for layout before next frame\n UIView._viewsToLayout.push(this)\n \n if (UIView._viewsToLayout.length == 1) {\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 this._shouldLayout = NO\n \n try {\n \n this.layoutSubviews()\n \n } catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n \n layoutSubviews() {\n \n this.willLayoutSubviews()\n \n this._shouldLayout = NO\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 this.didLayoutSubviews()\n \n }\n \n applyClassesAndStyles() {\n for (let i = 0; i < this.styleClasses.length; i++) {\n const styleClass = this.styleClasses[i]\n if (styleClass) {\n this.viewHTMLElement.classList.add(styleClass)\n }\n }\n }\n \n willLayoutSubviews() {\n \n this.viewController.viewWillLayoutSubviews()\n \n }\n \n didLayoutSubviews() {\n \n this.viewController.viewDidLayoutSubviews()\n \n }\n \n get constraints() {\n return this._constraints\n }\n \n set constraints(constraints) {\n this._constraints = constraints\n }\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 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 }\n \n \n static constraintRelation = {\n \n \"equal\": AutoLayout.Relation.EQU,\n \"lessThanOrEqual\": AutoLayout.Relation.LEQ,\n \"greaterThanOrEqual\": AutoLayout.Relation.GEQ\n \n }\n \n \n subviewWithID(viewID: string): UIView {\n let resultHTMLElement = nil\n \n try {\n resultHTMLElement = this.viewHTMLElement.querySelector(\"#\" + viewID)\n } catch (error) {\n console.log(error)\n }\n \n if (resultHTMLElement && resultHTMLElement.UIView) {\n return resultHTMLElement.UIView\n }\n return nil\n }\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 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: nil\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 \n addedAsSubviewToView(view: UIView, aboveView?: UIView) {\n view.addSubview(this, aboveView)\n return this\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 removeFromSuperview() {\n if (IS(this.superview)) {\n this.forEachViewInSubtree(view => view.blur())\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 = nil\n this.broadcastEventInSubtree({\n name: UIView.broadcastEventName.RemovedFromViewTree,\n parameters: nil\n })\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 wasAddedToViewTree() {\n \n }\n \n wasRemovedFromViewTree() {\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 = 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 \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 \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 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, nil)\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 \n get isResizable(): boolean {\n return this._isResizable\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; borderWidth?: number; borderColor?: UIColor; cornerSize?: string; maxCornerSize?: string; 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 const pointerUpFunction = () => optionalParameters.viewDidChangeToSize?.(this, YES)\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 \n \n leftEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(event.movementX / UIView.pageScale, 0, 0, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n leftEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n rightEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, -event.movementX / UIView.pageScale, 0, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n rightEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n bottomEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, 0, -event.movementY / UIView.pageScale, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n bottomEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n topEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, 0, 0, event.movementY / UIView.pageScale)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n topEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n const pointerDragTLFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n event.movementX / UIView.pageScale,\n 0,\n 0,\n event.movementY / UIView.pageScale\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n topLeftCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n \n topLeftCornerTop.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \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 \n \n topLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n \n topLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n const pointerDragBLFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n event.movementX / UIView.pageScale,\n 0,\n -event.movementY / UIView.pageScale,\n 0\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n \n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \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 \n \n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n \n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n const pointerDragBRFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n 0,\n -event.movementX / UIView.pageScale,\n -event.movementY / UIView.pageScale,\n 0\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n bottomRightCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n \n bottomRightCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \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 \n \n bottomRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n \n bottomRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n const pointerDragTRFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n 0,\n -event.movementX / UIView.pageScale,\n 0,\n event.movementY / UIView.pageScale\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n topRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n \n topRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \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 \n \n topRightCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n \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._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 \n }\n \n }\n \n \n static async shouldCallPointerUpInsideOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerHoverOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerLeaveOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerCancelOnView(view: UIView) {\n \n return YES\n \n }\n \n \n shouldCallPointerUpInside() {\n return UIView.shouldCallPointerUpInsideOnView(this)\n }\n \n shouldCallPointerCancel() {\n return UIView.shouldCallPointerCancelOnView(this)\n }\n \n shouldCallPointerHover() {\n return UIView.shouldCallPointerHoverOnView(this)\n }\n \n shouldCallPointerLeave() {\n return UIView.shouldCallPointerLeaveOnView(this)\n }\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 const windowMouseMoveFunction = (event: MouseEvent) => {\n onMouseMove(event)\n //pauseEvent(event, YES)\n }\n const windowMouseUpOrLeaveFunction = (event: MouseEvent) => {\n \n window.removeEventListener(\"mousemove\", windowMouseMoveFunction)\n window.removeEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\n document.body.removeEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n onmouseup(event)\n \n }\n window.addEventListener(\"mousemove\", windowMouseMoveFunction)\n window.addEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\n document.body.addEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n \n const windowTouchFunction = () => {\n window.removeEventListener(\"touchmove\", onTouchMove, true)\n window.removeEventListener(\"mouseup\", windowTouchFunction, true)\n }\n window.addEventListener(\"touchmove\", onTouchMove, true)\n window.addEventListener(\"mouseup\", windowTouchFunction, true)\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()) {\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()) {\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()) {\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 movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / UIView.pageScale)\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()) {\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 movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / UIView.pageScale)\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: Event) => {\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()) {\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 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 (eventKeyIsEsc(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EscDown, event)\n }\n \n if (eventKeyIsTab(event) && this._controlEventTargets.TabDown && this._controlEventTargets.TabDown.length) {\n this.sendControlEventForKey(UIView.controlEvent.TabDown, event)\n pauseEvent(event, YES)\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 }\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 \"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 }\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 \n addTargetForControlEvent(eventKey: string, targetFunction: (sender: UIView, event: Event) => void) {\n \n let targets = this._controlEventTargets[eventKey]\n \n if (!targets) {\n // @ts-ignore\n targets = []\n this._controlEventTargets[eventKey] = targets\n }\n \n if (targets.indexOf(targetFunction) == -1) {\n targets.push(targetFunction)\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 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 }\n \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 didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\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 \n rectangleInView(rectangle: UIRectangle, view: UIView) {\n if (!view.isMemberOfViewTree || !this.isMemberOfViewTree) {\n return nil\n }\n \n const viewClientRectangle = view.viewHTMLElement.getBoundingClientRect()\n const viewLocation = new UIPoint(viewClientRectangle.left, viewClientRectangle.top)\n \n const selfClientRectangle = this.viewHTMLElement.getBoundingClientRect()\n const selfLocation = new UIPoint(selfClientRectangle.left, selfClientRectangle.top)\n \n const offsetPoint = selfLocation.subtract(viewLocation)\n \n return rectangle.copy().offsetByPoint(offsetPoint)\n }\n \n rectangleFromView(rectangle: UIRectangle, view: UIView) {\n return view.rectangleInView(rectangle, this)\n }\n \n \n intrinsicContentSizeWithConstraints(constrainingHeight: number = 0, constrainingWidth: number = 0) {\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\n this.style.width = \"\" + constrainingWidth\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 \n return result\n \n }\n \n \n intrinsicContentWidth(constrainingHeight: number = 0): number {\n \n return this.intrinsicContentSizeWithConstraints(constrainingHeight).width\n \n }\n \n intrinsicContentHeight(constrainingWidth: number = 0): number {\n \n return this.intrinsicContentSizeWithConstraints(undefined, constrainingWidth).height\n \n \n }\n \n intrinsicContentSize(): UIRectangle {\n \n return nil\n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { IS_FIREFOX, IS_SAFARI } from \"./ClientCheckers\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport \"./UICoreExtensions\"\nimport type { UIDialogView } from \"./UIDialogView\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { FIRST, FIRST_OR_NIL, IF, IS, IS_DEFINED, IS_NIL, IS_NOT, nil, NO, RETURNER, UIObject, YES } from \"./UIObject\"\nimport { UIPoint } from \"./UIPoint\"\nimport { UIRectangle } from \"./UIRectangle\"\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 enum Attribute {\n \n LEFT, RIGHT, BOTTOM, TOP, CENTERX, CENTERY, WIDTH, HEIGHT, ZINDEX, VARIABLE, NOTANATTRIBUTE\n \n }\n \n \n enum Relation {\n \n EQU, LEQ, GEQ\n \n }\n \n \n}\n\n// @ts-ignore\nif (!window.AutoLayout) {\n \n // @ts-ignore\n window.AutoLayout = nil\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\nexport type UIViewAddControlEventTargetObject<T extends { controlEvent: Record<string, any> }> = {\n \n [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 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 _backgroundColor: UIColor = UIColor.transparentColor\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 = nil\n \n _controlEventTargets: ControlEventTargetsObject = {} //{ \"PointerDown\": Function[]; \"PointerMove\": Function[]; \"PointerLeave\": Function[]; \"PointerEnter\": Function[]; \"PointerUpInside\": Function[]; \"PointerUp\": Function[]; \"PointerHover\": Function[]; };\n _frameTransform: string\n viewController: UIViewController = nil\n _updateLayoutFunction: any = nil\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 private _resizeObserver!: ResizeObserver\n \n private _isMovable = NO\n makeNotMovable?: () => void\n \n private _isResizable = NO\n makeNotResizable?: () => void\n \n private _isMoving: boolean = NO\n \n constructor(\n elementID: string = (\"UIView\" + UIView.nextIndex),\n viewHTMLElement: HTMLElement & LooseObject | null = null,\n elementType: string | null = null,\n initViewData?: any\n ) {\n \n super()\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.subviews = []\n this.superview = nil\n \n this._constraints = []\n this._updateLayoutFunction = nil\n \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 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 \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 centerInContainer() {\n this.style.left = \"50%\"\n this.style.top = \"50%\"\n this.style.transform = \"translateX(-50%) translateY(-50%)\"\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.UIView = this\n this.addStyleClass(this.styleClassName)\n \n this._resizeObserver = new ResizeObserver(() => this.setNeedsLayout())\n this._resizeObserver.observe(this.viewHTMLElement)\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 \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 initViewStyleSelectors() {\n \n // Override this in a subclass\n \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 public get viewHTMLElement() {\n return this._viewHTMLElement\n }\n \n \n public get elementID() {\n return this.viewHTMLElement.id\n }\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 protected _setInnerHTMLFromKeyIfPossible() {\n if (this._innerHTMLKey && this._defaultInnerHTML) {\n this.setInnerHTML(this._innerHTMLKey, this._defaultInnerHTML, this._parameters)\n }\n }\n \n \n protected _setInnerHTMLFromLocalizedTextObjectIfPossible() {\n if (IS(this._localizedTextObject)) {\n this.innerHTML = UICore.languageService.stringForCurrentLanguage(this._localizedTextObject)\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 \n set innerHTML(innerHTML) {\n if (this.innerHTML != innerHTML) {\n this.viewHTMLElement.innerHTML = FIRST(innerHTML, \"\")\n }\n }\n \n set hoverText(hoverText: string) {\n this.viewHTMLElement.setAttribute(\"title\", hoverText)\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 {\n if (!IS(this.superview)) {\n return nil\n }\n if (!((this as any)[\"_isAUIDialogView\"])) {\n return this.superview.dialogView\n }\n return this as any as UIDialogView\n }\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 public get enabled(): boolean {\n return this._enabled\n }\n \n \n updateContentForCurrentEnabledState() {\n this.hidden = !this.enabled\n this.userInteractionEnabled = this.enabled\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 let result: any[] = []\n this.withAllSuperviews.forEach(view => {\n FIRST_OR_NIL(view.viewController).forEach((value, key, stopLooping) => {\n if (this == value) {\n result.push({ object: view.viewController, name: key })\n }\n })\n view.forEach((value, key, stopLooping) => {\n if (this == value) {\n result.push({ object: view, name: key })\n }\n })\n })\n return result\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 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 {\n const viewHTMLElement = document.getElementById(elementID)\n if (IS_NOT(viewHTMLElement)) {\n return nil\n }\n // @ts-ignore\n return viewHTMLElement.UIView\n }\n \n \n static createStyleSelector(selector: string, style: string) {\n \n return\n \n // // @ts-ignore\n // if (!document.styleSheets) {\n // return\n // }\n // if (document.getElementsByTagName(\"head\").length == 0) {\n // return\n // }\n //\n // let styleSheet\n // let mediaType\n //\n // if (document.styleSheets.length > 0) {\n // for (var i = 0, l: any = document.styleSheets.length; i < l; i++) {\n // if (document.styleSheets[i].disabled) {\n // continue\n // }\n // const media = document.styleSheets[i].media\n // mediaType = typeof media\n //\n // if (mediaType === \"string\") {\n // if (media as any === \"\" || ((media as any).indexOf(\"screen\") !== -1)) {\n // styleSheet = document.styleSheets[i]\n // }\n // }\n // else if (mediaType == \"object\") {\n // if (media.mediaText === \"\" || (media.mediaText.indexOf(\"screen\") !== -1)) {\n // styleSheet = document.styleSheets[i]\n // }\n // }\n //\n // if (typeof styleSheet !== \"undefined\") {\n // break\n // }\n // }\n // }\n //\n // if (typeof styleSheet === \"undefined\") {\n // const styleSheetElement = document.createElement(\"style\")\n // styleSheetElement.type = \"text/css\"\n // document.getElementsByTagName(\"head\")[0].appendChild(styleSheetElement)\n //\n // for (i = 0; i < document.styleSheets.length; i++) {\n // if (document.styleSheets[i].disabled) {\n // continue\n // }\n // styleSheet = document.styleSheets[i]\n // }\n //\n // mediaType = typeof styleSheet.media\n // }\n //\n // if (mediaType === \"string\") {\n // for (var i = 0, l = styleSheet.rules.length; i < l; i++) {\n // if (styleSheet.rules[i].selectorText && styleSheet.rules[i].selectorText.toLowerCase() ==\n // selector.toLowerCase()) {\n // styleSheet.rules[i].style.cssText = style\n // return\n // }\n // }\n // styleSheet.addRule(selector, style)\n // }\n // else if (mediaType === \"object\") {\n //\n // var styleSheetLength = 0\n //\n // try {\n //\n // styleSheetLength = (styleSheet.cssRules) ? styleSheet.cssRules.length : 0\n //\n // } catch (error) {\n //\n // }\n //\n //\n // for (var i = 0; i < styleSheetLength; i++) {\n // if (styleSheet.cssRules[i].selectorText && styleSheet.cssRules[i].selectorText.toLowerCase() ==\n // selector.toLowerCase()) {\n // styleSheet.cssRules[i].style.cssText = style\n // return\n // }\n // }\n // styleSheet.insertRule(selector + \"{\" + style + \"}\", styleSheetLength)\n // }\n }\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 get computedStyle() {\n return getComputedStyle(this.viewHTMLElement)\n }\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 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 \n static get pageScale() {\n return UIView._pageScale\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 \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 } //= this._frame?.copy() as any\n // @ts-ignore\n if (!result) {\n result = new UIRectangle(\n this._frame?.x ?? this.viewHTMLElement.offsetLeft,\n this._frame?.y ?? this.viewHTMLElement.offsetTop,\n this.viewHTMLElement.offsetHeight,\n this.viewHTMLElement.offsetWidth\n ) as any\n result.zIndex = this._frame?.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 \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 (zIndex != undefined) {\n rectangle.zIndex = zIndex\n }\n this._frame = rectangle\n \n if (frame && frame.isEqualTo(rectangle) && frame.zIndex == rectangle.zIndex && !performUncheckedLayout) {\n return\n }\n \n if (this.isInternalScaling) {\n rectangle.scale(1 / this.scale)\n }\n \n UIView._setAbsoluteSizeAndPosition(\n this.viewHTMLElement,\n rectangle.topLeft.x,\n rectangle.topLeft.y,\n rectangle.width,\n rectangle.height,\n rectangle.zIndex\n )\n \n if (frame.height != rectangle.height || frame.width != rectangle.width || performUncheckedLayout) {\n this.setNeedsLayout()\n this.boundsDidChange()\n }\n \n }\n \n get bounds() {\n let result: UIRectangle\n if (IS_NOT(this._frame)) {\n result = new UIRectangle(0, 0, this.viewHTMLElement.offsetHeight, this.viewHTMLElement.offsetWidth)\n }\n else {\n result = this.frame.copy()\n result.x = 0\n result.y = 0\n }\n return result\n }\n \n \n set bounds(rectangle) {\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 \n boundsDidChange() {\n \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()\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()\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()\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()\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()\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()\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()\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()\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.setStyleProperty(\"borderColor\", color.stringValue)\n \n this.setStyleProperty(\"borderWidth\", width)\n \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 } catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n get userInteractionEnabled() {\n return (this.style.pointerEvents != \"none\")\n }\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 get backgroundColor() {\n return this._backgroundColor\n }\n \n \n set backgroundColor(backgroundColor: UIColor) {\n this._backgroundColor = backgroundColor\n this.style.backgroundColor = backgroundColor.stringValue\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 \n animationDidFinish() {\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 ) {\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 const frameTransform = UIView._transformAttribute + \": translate3d(\" + (left).integerValue + \"px, \" +\n (top).integerValue + \"px, 0px)\"\n \n if (element.UIView) {\n \n str = str + frameTransform +\n (element.style.transform.match(\n new RegExp(\"scale\\\\(.*\\\\)\", \"g\")\n )?.firstElement ?? \"\") + \";\"\n \n }\n \n if (IS_NIL(height)) {\n str = str + \" height: unset;\"\n }\n else {\n str = str + \" height:\" + height + \";\"\n }\n \n if (IS_NIL(width)) {\n str = str + \" width: unset;\"\n }\n else {\n str = str + \" width:\" + width + \";\"\n }\n \n if (IS_NIL(zIndex)) {\n str = str + \" z-index: unset;\"\n }\n else {\n str = str + \" z-index:\" + zIndex + \";\"\n }\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 } 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 = 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 UIView._setAbsoluteSizeAndPosition(\n elements[key],\n subView.left,\n subView.top,\n subView.width,\n subView.height\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 scheduleLayoutViewsIfNeeded() {\n \n UIView.runFunctionBeforeNextFrame(UIView.layoutViewsIfNeeded)\n \n }\n \n \n static layoutViewsIfNeeded() {\n for (var i = 0; i < UIView._viewsToLayout.length; i++) {\n const view = UIView._viewsToLayout[i]\n view.layoutIfNeeded()\n }\n UIView._viewsToLayout = []\n }\n \n \n setNeedsLayout() {\n \n if (this._shouldLayout) {\n return\n }\n \n this._shouldLayout = YES\n \n // Register view for layout before next frame\n UIView._viewsToLayout.push(this)\n \n if (UIView._viewsToLayout.length == 1) {\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 this._shouldLayout = NO\n \n try {\n \n this.layoutSubviews()\n \n } catch (exception) {\n \n console.log(exception)\n \n }\n \n }\n \n \n layoutSubviews() {\n \n this.willLayoutSubviews()\n \n this._shouldLayout = NO\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 this.didLayoutSubviews()\n \n }\n \n applyClassesAndStyles() {\n for (let i = 0; i < this.styleClasses.length; i++) {\n const styleClass = this.styleClasses[i]\n if (styleClass) {\n this.viewHTMLElement.classList.add(styleClass)\n }\n }\n }\n \n willLayoutSubviews() {\n \n this.viewController.viewWillLayoutSubviews()\n \n }\n \n didLayoutSubviews() {\n \n this.viewController.viewDidLayoutSubviews()\n \n }\n \n get constraints() {\n return this._constraints\n }\n \n set constraints(constraints) {\n this._constraints = constraints\n }\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 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 }\n \n \n static constraintRelation = {\n \n \"equal\": AutoLayout.Relation.EQU,\n \"lessThanOrEqual\": AutoLayout.Relation.LEQ,\n \"greaterThanOrEqual\": AutoLayout.Relation.GEQ\n \n }\n \n \n subviewWithID(viewID: string): UIView {\n let resultHTMLElement = nil\n \n try {\n resultHTMLElement = this.viewHTMLElement.querySelector(\"#\" + viewID)\n } catch (error) {\n console.log(error)\n }\n \n if (resultHTMLElement && resultHTMLElement.UIView) {\n return resultHTMLElement.UIView\n }\n return nil\n }\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 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: nil\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 \n addedAsSubviewToView(view: UIView, aboveView?: UIView) {\n view.addSubview(this, aboveView)\n return this\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 removeFromSuperview() {\n if (IS(this.superview)) {\n this.forEachViewInSubtree(view => view.blur())\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 = nil\n this.broadcastEventInSubtree({\n name: UIView.broadcastEventName.RemovedFromViewTree,\n parameters: nil\n })\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 wasAddedToViewTree() {\n \n }\n \n wasRemovedFromViewTree() {\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 = 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 \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 \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 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, nil)\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 \n get isResizable(): boolean {\n return this._isResizable\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; borderWidth?: number; borderColor?: UIColor; cornerSize?: string; maxCornerSize?: string; 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 const pointerUpFunction = () => optionalParameters.viewDidChangeToSize?.(this, YES)\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 \n \n leftEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(event.movementX / UIView.pageScale, 0, 0, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n leftEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n rightEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, -event.movementX / UIView.pageScale, 0, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n rightEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n bottomEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, 0, -event.movementY / UIView.pageScale, 0)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n bottomEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n topEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(0, 0, 0, event.movementY / UIView.pageScale)\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n \n \n topEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n const pointerDragTLFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n event.movementX / UIView.pageScale,\n 0,\n 0,\n event.movementY / UIView.pageScale\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n topLeftCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n \n topLeftCornerTop.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \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 \n \n topLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction\n \n topLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n const pointerDragBLFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n event.movementX / UIView.pageScale,\n 0,\n -event.movementY / UIView.pageScale,\n 0\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n \n bottomLeftCornerLeft.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \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 \n \n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction\n \n bottomLeftCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n const pointerDragBRFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n 0,\n -event.movementX / UIView.pageScale,\n -event.movementY / UIView.pageScale,\n 0\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n bottomRightCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n \n bottomRightCornerBottom.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \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 \n \n bottomRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction\n \n bottomRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\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 \n \n const pointerDragTRFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof MouseEvent) {\n \n this.frame = this.frame.rectangleWithInsets(\n 0,\n -event.movementX / UIView.pageScale,\n 0,\n event.movementY / UIView.pageScale\n )\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n }\n topRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n \n topRightCornerRight.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \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 \n \n topRightCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction\n \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._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 \n }\n \n }\n \n \n static async shouldCallPointerUpInsideOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerHoverOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerLeaveOnView(view: UIView) {\n \n return YES\n \n }\n \n static async shouldCallPointerCancelOnView(view: UIView) {\n \n return YES\n \n }\n \n \n shouldCallPointerUpInside() {\n return UIView.shouldCallPointerUpInsideOnView(this)\n }\n \n shouldCallPointerCancel() {\n return UIView.shouldCallPointerCancelOnView(this)\n }\n \n shouldCallPointerHover() {\n return UIView.shouldCallPointerHoverOnView(this)\n }\n \n shouldCallPointerLeave() {\n return UIView.shouldCallPointerLeaveOnView(this)\n }\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 const windowMouseMoveFunction = (event: MouseEvent) => {\n onMouseMove(event)\n //pauseEvent(event, YES)\n }\n const windowMouseUpOrLeaveFunction = (event: MouseEvent) => {\n \n window.removeEventListener(\"mousemove\", windowMouseMoveFunction)\n window.removeEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\n document.body.removeEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n onmouseup(event)\n \n }\n window.addEventListener(\"mousemove\", windowMouseMoveFunction)\n window.addEventListener(\"mouseup\", windowMouseUpOrLeaveFunction, true)\n document.body.addEventListener(\"mouseleave\", windowMouseUpOrLeaveFunction)\n \n const windowTouchFunction = () => {\n window.removeEventListener(\"touchmove\", onTouchMove, true)\n window.removeEventListener(\"mouseup\", windowTouchFunction, true)\n }\n window.addEventListener(\"touchmove\", onTouchMove, true)\n window.addEventListener(\"mouseup\", windowTouchFunction, true)\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()) {\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()) {\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()) {\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 movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / UIView.pageScale)\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()) {\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 movementPoint = this._previousClientPoint.to(clientPoint)\n this.pointerDraggingPoint = new UIPoint(movementPoint.x, movementPoint.y).scale(1 / UIView.pageScale)\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: Event) => {\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()) {\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 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 (eventKeyIsEsc(event)) {\n this.sendControlEventForKey(UIView.controlEvent.EscDown, event)\n }\n \n if (eventKeyIsTab(event) && this._controlEventTargets.TabDown && this._controlEventTargets.TabDown.length) {\n this.sendControlEventForKey(UIView.controlEvent.TabDown, event)\n pauseEvent(event, YES)\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 }\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 \"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 }\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 \n addTargetForControlEvent(eventKey: string, targetFunction: (sender: UIView, event: Event) => void) {\n \n let targets = this._controlEventTargets[eventKey]\n \n if (!targets) {\n // @ts-ignore\n targets = []\n this._controlEventTargets[eventKey] = targets\n }\n \n if (targets.indexOf(targetFunction) == -1) {\n targets.push(targetFunction)\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 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 }\n \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 didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\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 \n rectangleInView(rectangle: UIRectangle, view: UIView) {\n if (!view.isMemberOfViewTree || !this.isMemberOfViewTree) {\n return nil\n }\n \n const viewClientRectangle = view.viewHTMLElement.getBoundingClientRect()\n const viewLocation = new UIPoint(viewClientRectangle.left, viewClientRectangle.top)\n \n const selfClientRectangle = this.viewHTMLElement.getBoundingClientRect()\n const selfLocation = new UIPoint(selfClientRectangle.left, selfClientRectangle.top)\n \n const offsetPoint = selfLocation.subtract(viewLocation)\n \n return rectangle.copy().offsetByPoint(offsetPoint)\n }\n \n rectangleFromView(rectangle: UIRectangle, view: UIView) {\n return view.rectangleInView(rectangle, this)\n }\n \n \n intrinsicContentSizeWithConstraints(constrainingHeight: number = 0, constrainingWidth: number = 0) {\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\n this.style.width = \"\" + constrainingWidth\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 \n return result\n \n }\n \n \n intrinsicContentWidth(constrainingHeight: number = 0): number {\n \n return this.intrinsicContentSizeWithConstraints(constrainingHeight).width\n \n }\n \n intrinsicContentHeight(constrainingWidth: number = 0): number {\n \n return this.intrinsicContentSizeWithConstraints(undefined, constrainingWidth).height\n \n \n }\n \n intrinsicContentSize(): UIRectangle {\n \n return nil\n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
+ "mappings": "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",
6
6
  "names": ["selector", "i", "_a", "event"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uicore-ts",
3
- "version": "1.0.178",
3
+ "version": "1.0.182",
4
4
  "description": "UICore is a library to build native-like user interfaces using pure Typescript. No HTML is needed at all. Components are described as TS classes and all user interactions are handled explicitly. This library is strongly inspired by the UIKit framework that is used in IOS. In addition, UICore has tools to handle URL based routing, array sorting and filtering and adds a number of other utilities for convenience.",
5
5
  "main": "compiledScripts/index.js",
6
6
  "types": "compiledScripts/index.d.ts",
package/scripts/UIView.ts CHANGED
@@ -4,20 +4,7 @@ import { UICore } from "./UICore"
4
4
  import "./UICoreExtensions"
5
5
  import type { UIDialogView } from "./UIDialogView"
6
6
  import { UILocalizedTextObject } from "./UIInterfaces"
7
- import {
8
- EXTEND,
9
- FIRST,
10
- FIRST_OR_NIL, IF,
11
- IS,
12
- IS_DEFINED,
13
- IS_NIL,
14
- IS_NOT,
15
- nil,
16
- NO,
17
- RETURNER,
18
- UIObject,
19
- YES
20
- } from "./UIObject"
7
+ import { FIRST, FIRST_OR_NIL, IF, IS, IS_DEFINED, IS_NIL, IS_NOT, nil, NO, RETURNER, UIObject, YES } from "./UIObject"
21
8
  import { UIPoint } from "./UIPoint"
22
9
  import { UIRectangle } from "./UIRectangle"
23
10
  import { UIViewController } from "./UIViewController"
@@ -285,20 +272,20 @@ export class UIView extends UIObject {
285
272
  else {
286
273
 
287
274
  this._viewHTMLElement = viewHTMLElement
288
-
275
+
289
276
  }
290
-
277
+
291
278
  if (IS(elementID)) {
292
279
  this.viewHTMLElement.id = elementID
293
280
  }
294
-
281
+
295
282
  this.viewHTMLElement.obeyAutolayout = YES
296
283
  this.viewHTMLElement.UIView = this
297
284
  this.addStyleClass(this.styleClassName)
298
-
285
+
299
286
  this._resizeObserver = new ResizeObserver(() => this.setNeedsLayout())
300
287
  this._resizeObserver.observe(this.viewHTMLElement)
301
-
288
+
302
289
  }
303
290
 
304
291
 
@@ -780,15 +767,16 @@ export class UIView extends UIObject {
780
767
 
781
768
 
782
769
  public get frame() {
783
- let result: UIRectangle & { zIndex?: number } = this._frame?.copy() as any
770
+ let result: UIRectangle & { zIndex?: number } //= this._frame?.copy() as any
771
+ // @ts-ignore
784
772
  if (!result) {
785
773
  result = new UIRectangle(
786
- this.viewHTMLElement.offsetLeft,
787
- this.viewHTMLElement.offsetTop,
774
+ this._frame?.x ?? this.viewHTMLElement.offsetLeft,
775
+ this._frame?.y ?? this.viewHTMLElement.offsetTop,
788
776
  this.viewHTMLElement.offsetHeight,
789
777
  this.viewHTMLElement.offsetWidth
790
778
  ) as any
791
- result.zIndex = 0
779
+ result.zIndex = this._frame?.zIndex ?? 0
792
780
  }
793
781
  return result
794
782
  }
@@ -2528,32 +2516,32 @@ export class UIView extends UIObject {
2528
2516
  this._touchEventTime = nil
2529
2517
  pauseEvent(event)
2530
2518
  }
2531
-
2519
+
2532
2520
  this._hasPointerDragged = NO
2533
-
2521
+
2534
2522
  const windowMouseMoveFunction = (event: MouseEvent) => {
2535
2523
  onMouseMove(event)
2536
2524
  //pauseEvent(event, YES)
2537
2525
  }
2538
2526
  const windowMouseUpOrLeaveFunction = (event: MouseEvent) => {
2539
-
2527
+
2540
2528
  window.removeEventListener("mousemove", windowMouseMoveFunction)
2541
2529
  window.removeEventListener("mouseup", windowMouseUpOrLeaveFunction, true)
2542
2530
  document.body.removeEventListener("mouseleave", windowMouseUpOrLeaveFunction)
2543
2531
  onmouseup(event)
2544
-
2532
+
2545
2533
  }
2546
2534
  window.addEventListener("mousemove", windowMouseMoveFunction)
2547
2535
  window.addEventListener("mouseup", windowMouseUpOrLeaveFunction, true)
2548
2536
  document.body.addEventListener("mouseleave", windowMouseUpOrLeaveFunction)
2549
-
2537
+
2550
2538
  const windowTouchFunction = () => {
2551
2539
  window.removeEventListener("touchmove", onTouchMove, true)
2552
2540
  window.removeEventListener("mouseup", windowTouchFunction, true)
2553
2541
  }
2554
2542
  window.addEventListener("touchmove", onTouchMove, true)
2555
2543
  window.addEventListener("mouseup", windowTouchFunction, true)
2556
-
2544
+
2557
2545
  }
2558
2546
 
2559
2547
  const onTouchStart = onMouseDown as any
@@ -2570,7 +2558,7 @@ export class UIView extends UIObject {
2570
2558
  (this.ignoresMouse && event instanceof MouseEvent)) {
2571
2559
  return
2572
2560
  }
2573
-
2561
+
2574
2562
  if (this._isPointerInside && await this.shouldCallPointerUpInside()) {
2575
2563
  onPointerUpInside(event)
2576
2564
  if (!this._hasPointerDragged) {
@@ -2632,7 +2620,7 @@ export class UIView extends UIObject {
2632
2620
  // console.log("Mouse move")
2633
2621
  //
2634
2622
  // }
2635
-
2623
+
2636
2624
  if (!this._isPointerValid && !this._isPointerValidForMovement) {
2637
2625
  return
2638
2626
  }