uicore-ts 1.0.177 → 1.0.181

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.
@@ -281,7 +281,7 @@ export declare class UIView extends UIObject {
281
281
  get isMovable(): boolean;
282
282
  set isMovable(isMovable: boolean);
283
283
  makeMovable(optionalParameters?: {
284
- shouldMoveWithDragEvent?: (sender: UIView, event: DragEvent) => boolean;
284
+ shouldMoveWithMouseEvent?: (sender: UIView, event: MouseEvent) => boolean;
285
285
  viewDidMoveToPosition?: (view: UIView, isMovementCompleted: boolean) => void;
286
286
  }): void;
287
287
  get isResizable(): boolean;
@@ -394,8 +394,8 @@ 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;
398
+ let result;
399
399
  if (!result) {
400
400
  result = new import_UIRectangle.UIRectangle(
401
401
  this.viewHTMLElement.offsetLeft,
@@ -403,7 +403,7 @@ const _UIView = class extends import_UIObject.UIObject {
403
403
  this.viewHTMLElement.offsetHeight,
404
404
  this.viewHTMLElement.offsetWidth
405
405
  );
406
- result.zIndex = 0;
406
+ result.zIndex = (_b = (_a = this._frame) == null ? void 0 : _a.zIndex) != null ? _b : 0;
407
407
  }
408
408
  return result;
409
409
  }
@@ -1048,13 +1048,13 @@ const _UIView = class extends import_UIObject.UIObject {
1048
1048
  if (this.isMovable) {
1049
1049
  return;
1050
1050
  }
1051
- const shouldMoveWithDragEvent = (_a = optionalParameters.shouldMoveWithDragEvent) != null ? _a : (sender, event) => (0, import_UIObject.IS)(event.altKey);
1051
+ const shouldMoveWithMouseEvent = (_a = optionalParameters.shouldMoveWithMouseEvent) != null ? _a : (sender, event) => (0, import_UIObject.IS)(event.altKey);
1052
1052
  let viewValuesBeforeModifications = [];
1053
1053
  let startPoint;
1054
1054
  let views;
1055
1055
  const movementFunction = (sender, event) => {
1056
1056
  var _a2;
1057
- if (event instanceof DragEvent && shouldMoveWithDragEvent(sender, event)) {
1057
+ if (event instanceof MouseEvent && shouldMoveWithMouseEvent(sender, event)) {
1058
1058
  if (!this._isMoving) {
1059
1059
  startPoint = this.frame.min;
1060
1060
  sender.pointerDraggingPoint = new import_UIPoint.UIPoint(0, 0);
@@ -1157,7 +1157,7 @@ const _UIView = class extends import_UIObject.UIObject {
1157
1157
  });
1158
1158
  leftEdge.controlEventTargetAccumulator.PointerDrag = (sender, event) => {
1159
1159
  var _a2;
1160
- if (event instanceof DragEvent) {
1160
+ if (event instanceof MouseEvent) {
1161
1161
  this.frame = this.frame.rectangleWithInsets(event.movementX / _UIView.pageScale, 0, 0, 0);
1162
1162
  (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1163
1163
  }
@@ -1187,7 +1187,7 @@ const _UIView = class extends import_UIObject.UIObject {
1187
1187
  });
1188
1188
  rightEdge.controlEventTargetAccumulator.PointerDrag = (sender, event) => {
1189
1189
  var _a2;
1190
- if (event instanceof DragEvent) {
1190
+ if (event instanceof MouseEvent) {
1191
1191
  this.frame = this.frame.rectangleWithInsets(0, -event.movementX / _UIView.pageScale, 0, 0);
1192
1192
  (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1193
1193
  }
@@ -1217,7 +1217,7 @@ const _UIView = class extends import_UIObject.UIObject {
1217
1217
  });
1218
1218
  bottomEdge.controlEventTargetAccumulator.PointerDrag = (sender, event) => {
1219
1219
  var _a2;
1220
- if (event instanceof DragEvent) {
1220
+ if (event instanceof MouseEvent) {
1221
1221
  this.frame = this.frame.rectangleWithInsets(0, 0, -event.movementY / _UIView.pageScale, 0);
1222
1222
  (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1223
1223
  }
@@ -1247,7 +1247,7 @@ const _UIView = class extends import_UIObject.UIObject {
1247
1247
  });
1248
1248
  topEdge.controlEventTargetAccumulator.PointerDrag = (sender, event) => {
1249
1249
  var _a2;
1250
- if (event instanceof DragEvent) {
1250
+ if (event instanceof MouseEvent) {
1251
1251
  this.frame = this.frame.rectangleWithInsets(0, 0, 0, event.movementY / _UIView.pageScale);
1252
1252
  (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1253
1253
  }
@@ -1278,7 +1278,7 @@ const _UIView = class extends import_UIObject.UIObject {
1278
1278
  });
1279
1279
  const pointerDragTLFunction = (sender, event) => {
1280
1280
  var _a2;
1281
- if (event instanceof DragEvent) {
1281
+ if (event instanceof MouseEvent) {
1282
1282
  this.frame = this.frame.rectangleWithInsets(
1283
1283
  event.movementX / _UIView.pageScale,
1284
1284
  0,
@@ -1340,7 +1340,7 @@ const _UIView = class extends import_UIObject.UIObject {
1340
1340
  });
1341
1341
  const pointerDragBLFunction = (sender, event) => {
1342
1342
  var _a2;
1343
- if (event instanceof DragEvent) {
1343
+ if (event instanceof MouseEvent) {
1344
1344
  this.frame = this.frame.rectangleWithInsets(
1345
1345
  event.movementX / _UIView.pageScale,
1346
1346
  0,
@@ -1402,7 +1402,7 @@ const _UIView = class extends import_UIObject.UIObject {
1402
1402
  });
1403
1403
  const pointerDragBRFunction = (sender, event) => {
1404
1404
  var _a2;
1405
- if (event instanceof DragEvent) {
1405
+ if (event instanceof MouseEvent) {
1406
1406
  this.frame = this.frame.rectangleWithInsets(
1407
1407
  0,
1408
1408
  -event.movementX / _UIView.pageScale,
@@ -1464,7 +1464,7 @@ const _UIView = class extends import_UIObject.UIObject {
1464
1464
  });
1465
1465
  const pointerDragTRFunction = (sender, event) => {
1466
1466
  var _a2;
1467
- if (event instanceof DragEvent) {
1467
+ if (event instanceof MouseEvent) {
1468
1468
  this.frame = this.frame.rectangleWithInsets(
1469
1469
  0,
1470
1470
  -event.movementX / _UIView.pageScale,
@@ -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 \n if (isMovable) {\n \n this.makeMovable()\n \n }\n else {\n \n this.makeNotMovable?.()\n \n }\n \n }\n \n \n makeMovable(\n optionalParameters: {\n shouldMoveWithDragEvent?: (\n sender: UIView,\n event: DragEvent\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 shouldMoveWithDragEvent = optionalParameters.shouldMoveWithDragEvent ?? ((\n sender,\n event\n ) => IS(event.altKey))\n \n \n let viewValuesBeforeModifications: any[] = []\n \n let startPoint: UIPoint\n let views: UIView[]\n \n const movementFunction = (sender: UIView, event: Event) => {\n \n if (event instanceof DragEvent && shouldMoveWithDragEvent(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 DragEvent) {\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 DragEvent) {\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 DragEvent) {\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 DragEvent) {\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 DragEvent) {\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 DragEvent) {\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 DragEvent) {\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 DragEvent) {\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.viewHTMLElement.offsetLeft,\n 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.177",
3
+ "version": "1.0.181",
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,7 +767,8 @@ 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
774
  this.viewHTMLElement.offsetLeft,
@@ -788,7 +776,7 @@ export class UIView extends UIObject {
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
  }
@@ -1808,26 +1796,19 @@ export class UIView extends UIObject {
1808
1796
  }
1809
1797
 
1810
1798
  set isMovable(isMovable: boolean) {
1811
-
1812
1799
  if (isMovable) {
1813
-
1814
1800
  this.makeMovable()
1815
-
1816
1801
  }
1817
1802
  else {
1818
-
1819
1803
  this.makeNotMovable?.()
1820
-
1821
1804
  }
1822
-
1823
1805
  }
1824
1806
 
1825
-
1826
1807
  makeMovable(
1827
1808
  optionalParameters: {
1828
- shouldMoveWithDragEvent?: (
1809
+ shouldMoveWithMouseEvent?: (
1829
1810
  sender: UIView,
1830
- event: DragEvent
1811
+ event: MouseEvent
1831
1812
  ) => boolean; viewDidMoveToPosition?: (view: UIView, isMovementCompleted: boolean) => void
1832
1813
  } = {}
1833
1814
  ) {
@@ -1837,20 +1818,18 @@ export class UIView extends UIObject {
1837
1818
  }
1838
1819
 
1839
1820
  //const overlayElement = optionalParameters.overlayElement ?? this.viewHTMLElement
1840
- const shouldMoveWithDragEvent = optionalParameters.shouldMoveWithDragEvent ?? ((
1821
+ const shouldMoveWithMouseEvent = optionalParameters.shouldMoveWithMouseEvent ?? ((
1841
1822
  sender,
1842
1823
  event
1843
1824
  ) => IS(event.altKey))
1844
1825
 
1845
-
1846
1826
  let viewValuesBeforeModifications: any[] = []
1847
-
1848
1827
  let startPoint: UIPoint
1849
1828
  let views: UIView[]
1850
1829
 
1851
1830
  const movementFunction = (sender: UIView, event: Event) => {
1852
1831
 
1853
- if (event instanceof DragEvent && shouldMoveWithDragEvent(sender, event)) {
1832
+ if (event instanceof MouseEvent && shouldMoveWithMouseEvent(sender, event)) {
1854
1833
 
1855
1834
  if (!this._isMoving) {
1856
1835
 
@@ -2012,7 +1991,7 @@ export class UIView extends UIObject {
2012
1991
 
2013
1992
  leftEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {
2014
1993
 
2015
- if (event instanceof DragEvent) {
1994
+ if (event instanceof MouseEvent) {
2016
1995
 
2017
1996
  this.frame = this.frame.rectangleWithInsets(event.movementX / UIView.pageScale, 0, 0, 0)
2018
1997
 
@@ -2046,7 +2025,7 @@ export class UIView extends UIObject {
2046
2025
 
2047
2026
  rightEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {
2048
2027
 
2049
- if (event instanceof DragEvent) {
2028
+ if (event instanceof MouseEvent) {
2050
2029
 
2051
2030
  this.frame = this.frame.rectangleWithInsets(0, -event.movementX / UIView.pageScale, 0, 0)
2052
2031
 
@@ -2081,7 +2060,7 @@ export class UIView extends UIObject {
2081
2060
 
2082
2061
  bottomEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {
2083
2062
 
2084
- if (event instanceof DragEvent) {
2063
+ if (event instanceof MouseEvent) {
2085
2064
 
2086
2065
  this.frame = this.frame.rectangleWithInsets(0, 0, -event.movementY / UIView.pageScale, 0)
2087
2066
 
@@ -2116,7 +2095,7 @@ export class UIView extends UIObject {
2116
2095
 
2117
2096
  topEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {
2118
2097
 
2119
- if (event instanceof DragEvent) {
2098
+ if (event instanceof MouseEvent) {
2120
2099
 
2121
2100
  this.frame = this.frame.rectangleWithInsets(0, 0, 0, event.movementY / UIView.pageScale)
2122
2101
 
@@ -2152,7 +2131,7 @@ export class UIView extends UIObject {
2152
2131
 
2153
2132
  const pointerDragTLFunction = (sender: UIView, event: Event) => {
2154
2133
 
2155
- if (event instanceof DragEvent) {
2134
+ if (event instanceof MouseEvent) {
2156
2135
 
2157
2136
  this.frame = this.frame.rectangleWithInsets(
2158
2137
  event.movementX / UIView.pageScale,
@@ -2220,7 +2199,7 @@ export class UIView extends UIObject {
2220
2199
 
2221
2200
  const pointerDragBLFunction = (sender: UIView, event: Event) => {
2222
2201
 
2223
- if (event instanceof DragEvent) {
2202
+ if (event instanceof MouseEvent) {
2224
2203
 
2225
2204
  this.frame = this.frame.rectangleWithInsets(
2226
2205
  event.movementX / UIView.pageScale,
@@ -2290,7 +2269,7 @@ export class UIView extends UIObject {
2290
2269
 
2291
2270
  const pointerDragBRFunction = (sender: UIView, event: Event) => {
2292
2271
 
2293
- if (event instanceof DragEvent) {
2272
+ if (event instanceof MouseEvent) {
2294
2273
 
2295
2274
  this.frame = this.frame.rectangleWithInsets(
2296
2275
  0,
@@ -2358,7 +2337,7 @@ export class UIView extends UIObject {
2358
2337
 
2359
2338
  const pointerDragTRFunction = (sender: UIView, event: Event) => {
2360
2339
 
2361
- if (event instanceof DragEvent) {
2340
+ if (event instanceof MouseEvent) {
2362
2341
 
2363
2342
  this.frame = this.frame.rectangleWithInsets(
2364
2343
  0,
@@ -2537,32 +2516,32 @@ export class UIView extends UIObject {
2537
2516
  this._touchEventTime = nil
2538
2517
  pauseEvent(event)
2539
2518
  }
2540
-
2519
+
2541
2520
  this._hasPointerDragged = NO
2542
-
2521
+
2543
2522
  const windowMouseMoveFunction = (event: MouseEvent) => {
2544
2523
  onMouseMove(event)
2545
2524
  //pauseEvent(event, YES)
2546
2525
  }
2547
2526
  const windowMouseUpOrLeaveFunction = (event: MouseEvent) => {
2548
-
2527
+
2549
2528
  window.removeEventListener("mousemove", windowMouseMoveFunction)
2550
2529
  window.removeEventListener("mouseup", windowMouseUpOrLeaveFunction, true)
2551
2530
  document.body.removeEventListener("mouseleave", windowMouseUpOrLeaveFunction)
2552
2531
  onmouseup(event)
2553
-
2532
+
2554
2533
  }
2555
2534
  window.addEventListener("mousemove", windowMouseMoveFunction)
2556
2535
  window.addEventListener("mouseup", windowMouseUpOrLeaveFunction, true)
2557
2536
  document.body.addEventListener("mouseleave", windowMouseUpOrLeaveFunction)
2558
-
2537
+
2559
2538
  const windowTouchFunction = () => {
2560
2539
  window.removeEventListener("touchmove", onTouchMove, true)
2561
2540
  window.removeEventListener("mouseup", windowTouchFunction, true)
2562
2541
  }
2563
2542
  window.addEventListener("touchmove", onTouchMove, true)
2564
2543
  window.addEventListener("mouseup", windowTouchFunction, true)
2565
-
2544
+
2566
2545
  }
2567
2546
 
2568
2547
  const onTouchStart = onMouseDown as any
@@ -2579,7 +2558,7 @@ export class UIView extends UIObject {
2579
2558
  (this.ignoresMouse && event instanceof MouseEvent)) {
2580
2559
  return
2581
2560
  }
2582
-
2561
+
2583
2562
  if (this._isPointerInside && await this.shouldCallPointerUpInside()) {
2584
2563
  onPointerUpInside(event)
2585
2564
  if (!this._hasPointerDragged) {
@@ -2641,7 +2620,7 @@ export class UIView extends UIObject {
2641
2620
  // console.log("Mouse move")
2642
2621
  //
2643
2622
  // }
2644
-
2623
+
2645
2624
  if (!this._isPointerValid && !this._isPointerValidForMovement) {
2646
2625
  return
2647
2626
  }