uicore-ts 1.0.202 → 1.0.207

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.
@@ -439,7 +439,6 @@ const _UIView = class extends import_UIObject.UIObject {
439
439
  rectangle.height,
440
440
  rectangle.zIndex
441
441
  );
442
- const actualWidth = (0, import_SizeConverter.default)(this.viewHTMLElement, this.viewHTMLElement.style.width);
443
442
  if (frame.height != rectangle.height || frame.width != rectangle.width || performUncheckedLayout) {
444
443
  this.setNeedsLayout();
445
444
  this.boundsDidChange();
@@ -1141,6 +1140,36 @@ const _UIView = class extends import_UIObject.UIObject {
1141
1140
  var _a2;
1142
1141
  return (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.YES);
1143
1142
  };
1143
+ const frameWasChanged = () => {
1144
+ var _a2;
1145
+ const frame = this.frame;
1146
+ if (this.style.minHeight) {
1147
+ frame.height = [
1148
+ frame.height,
1149
+ (0, import_SizeConverter.default)(this.viewHTMLElement, this.style.minHeight)
1150
+ ].max();
1151
+ }
1152
+ if (this.style.maxHeight) {
1153
+ frame.height = [
1154
+ frame,
1155
+ (0, import_SizeConverter.default)(this.viewHTMLElement, this.style.maxHeight)
1156
+ ].min();
1157
+ }
1158
+ if (this.style.minWidth) {
1159
+ frame.width = [
1160
+ frame.width,
1161
+ (0, import_SizeConverter.default)(this.viewHTMLElement, this.style.minWidth)
1162
+ ].max();
1163
+ }
1164
+ if (this.style.maxWidth) {
1165
+ frame.width = [
1166
+ frame.width,
1167
+ (0, import_SizeConverter.default)(this.viewHTMLElement, this.style.maxWidth)
1168
+ ].min();
1169
+ }
1170
+ this.frame = frame;
1171
+ (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1172
+ };
1144
1173
  const leftEdge = new _UIView().configuredWithObject({
1145
1174
  _viewHTMLElement: {
1146
1175
  className: "leftEdge",
@@ -1164,10 +1193,9 @@ const _UIView = class extends import_UIObject.UIObject {
1164
1193
  pausesPointerEvents: import_UIObject.YES
1165
1194
  });
1166
1195
  leftEdge.controlEventTargetAccumulator.PointerDrag = (sender, event) => {
1167
- var _a2;
1168
1196
  if (event instanceof MouseEvent) {
1169
1197
  this.frame = this.frame.rectangleWithInsets(event.movementX / _UIView.pageScale, 0, 0, 0);
1170
- (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1198
+ frameWasChanged();
1171
1199
  }
1172
1200
  };
1173
1201
  leftEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction;
@@ -1194,10 +1222,9 @@ const _UIView = class extends import_UIObject.UIObject {
1194
1222
  pausesPointerEvents: import_UIObject.YES
1195
1223
  });
1196
1224
  rightEdge.controlEventTargetAccumulator.PointerDrag = (sender, event) => {
1197
- var _a2;
1198
1225
  if (event instanceof MouseEvent) {
1199
1226
  this.frame = this.frame.rectangleWithInsets(0, -event.movementX / _UIView.pageScale, 0, 0);
1200
- (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1227
+ frameWasChanged();
1201
1228
  }
1202
1229
  };
1203
1230
  rightEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction;
@@ -1224,10 +1251,9 @@ const _UIView = class extends import_UIObject.UIObject {
1224
1251
  pausesPointerEvents: import_UIObject.YES
1225
1252
  });
1226
1253
  bottomEdge.controlEventTargetAccumulator.PointerDrag = (sender, event) => {
1227
- var _a2;
1228
1254
  if (event instanceof MouseEvent) {
1229
1255
  this.frame = this.frame.rectangleWithInsets(0, 0, -event.movementY / _UIView.pageScale, 0);
1230
- (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1256
+ frameWasChanged();
1231
1257
  }
1232
1258
  };
1233
1259
  bottomEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction;
@@ -1254,10 +1280,9 @@ const _UIView = class extends import_UIObject.UIObject {
1254
1280
  pausesPointerEvents: import_UIObject.YES
1255
1281
  });
1256
1282
  topEdge.controlEventTargetAccumulator.PointerDrag = (sender, event) => {
1257
- var _a2;
1258
1283
  if (event instanceof MouseEvent) {
1259
1284
  this.frame = this.frame.rectangleWithInsets(0, 0, 0, event.movementY / _UIView.pageScale);
1260
- (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1285
+ frameWasChanged();
1261
1286
  }
1262
1287
  };
1263
1288
  topEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction;
@@ -1285,7 +1310,6 @@ const _UIView = class extends import_UIObject.UIObject {
1285
1310
  pausesPointerEvents: import_UIObject.YES
1286
1311
  });
1287
1312
  const pointerDragTLFunction = (sender, event) => {
1288
- var _a2;
1289
1313
  if (event instanceof MouseEvent) {
1290
1314
  this.frame = this.frame.rectangleWithInsets(
1291
1315
  event.movementX / _UIView.pageScale,
@@ -1293,7 +1317,7 @@ const _UIView = class extends import_UIObject.UIObject {
1293
1317
  0,
1294
1318
  event.movementY / _UIView.pageScale
1295
1319
  );
1296
- (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1320
+ frameWasChanged();
1297
1321
  }
1298
1322
  };
1299
1323
  topLeftCornerTop.controlEventTargetAccumulator.PointerDrag = pointerDragTLFunction;
@@ -1347,7 +1371,6 @@ const _UIView = class extends import_UIObject.UIObject {
1347
1371
  pausesPointerEvents: import_UIObject.YES
1348
1372
  });
1349
1373
  const pointerDragBLFunction = (sender, event) => {
1350
- var _a2;
1351
1374
  if (event instanceof MouseEvent) {
1352
1375
  this.frame = this.frame.rectangleWithInsets(
1353
1376
  event.movementX / _UIView.pageScale,
@@ -1355,7 +1378,7 @@ const _UIView = class extends import_UIObject.UIObject {
1355
1378
  -event.movementY / _UIView.pageScale,
1356
1379
  0
1357
1380
  );
1358
- (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1381
+ frameWasChanged();
1359
1382
  }
1360
1383
  };
1361
1384
  bottomLeftCornerLeft.controlEventTargetAccumulator.PointerDrag = pointerDragBLFunction;
@@ -1409,7 +1432,6 @@ const _UIView = class extends import_UIObject.UIObject {
1409
1432
  pausesPointerEvents: import_UIObject.YES
1410
1433
  });
1411
1434
  const pointerDragBRFunction = (sender, event) => {
1412
- var _a2;
1413
1435
  if (event instanceof MouseEvent) {
1414
1436
  this.frame = this.frame.rectangleWithInsets(
1415
1437
  0,
@@ -1417,7 +1439,7 @@ const _UIView = class extends import_UIObject.UIObject {
1417
1439
  -event.movementY / _UIView.pageScale,
1418
1440
  0
1419
1441
  );
1420
- (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1442
+ frameWasChanged();
1421
1443
  }
1422
1444
  };
1423
1445
  bottomRightCornerBottom.controlEventTargetAccumulator.PointerDrag = pointerDragBRFunction;
@@ -1471,7 +1493,6 @@ const _UIView = class extends import_UIObject.UIObject {
1471
1493
  pausesPointerEvents: import_UIObject.YES
1472
1494
  });
1473
1495
  const pointerDragTRFunction = (sender, event) => {
1474
- var _a2;
1475
1496
  if (event instanceof MouseEvent) {
1476
1497
  this.frame = this.frame.rectangleWithInsets(
1477
1498
  0,
@@ -1479,7 +1500,7 @@ const _UIView = class extends import_UIObject.UIObject {
1479
1500
  0,
1480
1501
  event.movementY / _UIView.pageScale
1481
1502
  );
1482
- (_a2 = optionalParameters.viewDidChangeToSize) == null ? void 0 : _a2.call(optionalParameters, this, import_UIObject.NO);
1503
+ frameWasChanged();
1483
1504
  }
1484
1505
  };
1485
1506
  topRightCornerRight.controlEventTargetAccumulator.PointerDrag = pointerDragTRFunction;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UIView.ts"],
4
- "sourcesContent": ["import { IS_FIREFOX, IS_SAFARI } from \"./ClientCheckers\"\nimport toPx from \"./SizeConverter\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport \"./UICoreExtensions\"\nimport type { UIDialogView } from \"./UIDialogView\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { 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 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 \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 const actualWidth = toPx(this.viewHTMLElement, this.viewHTMLElement.style.width)\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
- "names": ["selector", "toPx", "i", "_a", "event"]
4
+ "sourcesContent": ["import { IS_FIREFOX, IS_SAFARI } from \"./ClientCheckers\"\nimport toPx from \"./SizeConverter\"\nimport { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport \"./UICoreExtensions\"\nimport type { UIDialogView } from \"./UIDialogView\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { 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 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 \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 frameWasChanged = () => {\n \n const frame = this.frame\n \n if (this.style.minHeight) {\n \n frame.height = [\n frame.height,\n toPx(this.viewHTMLElement, this.style.minHeight)\n ].max()\n \n }\n \n if (this.style.maxHeight) {\n \n frame.height = [\n frame,\n toPx(this.viewHTMLElement, this.style.maxHeight)\n ].min()\n \n }\n \n if (this.style.minWidth) {\n \n frame.width = [\n frame.width,\n toPx(this.viewHTMLElement, this.style.minWidth)\n ].max()\n \n }\n \n if (this.style.maxWidth) {\n \n frame.width = [\n frame.width,\n toPx(this.viewHTMLElement, this.style.maxWidth)\n ].min()\n \n }\n \n this.frame = frame\n \n optionalParameters.viewDidChangeToSize?.(this, NO)\n \n }\n \n \n const leftEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"leftEdge\",\n style: {\n position: \"absolute\",\n height: \"100%\",\n width: borderWidth,\n top: \"0px\",\n left: \"0px\",\n cursor: \"col-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \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 frameWasChanged()\n \n }\n \n }\n leftEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction\n \n \n const rightEdge = new UIView().configuredWithObject({\n _viewHTMLElement: {\n className: \"rightEdge\",\n style: {\n position: \"absolute\",\n height: \"100%\",\n width: borderWidth,\n top: \"0px\",\n right: \"0px\",\n cursor: \"col-resize\",\n backgroundColor: borderColor,\n pointerEvents: \"auto\"\n }\n },\n shouldCallPointerUpInside: async () => YES,\n shouldCallPointerHover: async () => YES,\n pausesPointerEvents: YES\n })\n \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 frameWasChanged()\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 frameWasChanged()\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 frameWasChanged()\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 frameWasChanged()\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 frameWasChanged()\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 frameWasChanged()\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 frameWasChanged()\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
+ "names": ["selector", "i", "_a", "toPx", "event"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uicore-ts",
3
- "version": "1.0.202",
3
+ "version": "1.0.207",
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
@@ -273,20 +273,20 @@ export class UIView extends UIObject {
273
273
  else {
274
274
 
275
275
  this._viewHTMLElement = viewHTMLElement
276
-
276
+
277
277
  }
278
-
278
+
279
279
  if (IS(elementID)) {
280
280
  this.viewHTMLElement.id = elementID
281
281
  }
282
-
282
+
283
283
  this.viewHTMLElement.obeyAutolayout = YES
284
284
  this.viewHTMLElement.UIView = this
285
285
  this.addStyleClass(this.styleClassName)
286
-
286
+
287
287
  this._resizeObserver = new ResizeObserver(() => this.setNeedsLayout())
288
288
  this._resizeObserver.observe(this.viewHTMLElement)
289
-
289
+
290
290
  }
291
291
 
292
292
 
@@ -793,7 +793,6 @@ export class UIView extends UIObject {
793
793
  const frame: (UIRectangle & { zIndex?: number }) = this._frame || new UIRectangle(nil, nil, nil, nil) as any
794
794
 
795
795
 
796
-
797
796
  if (zIndex != undefined) {
798
797
  rectangle.zIndex = zIndex
799
798
  }
@@ -816,8 +815,6 @@ export class UIView extends UIObject {
816
815
  rectangle.zIndex
817
816
  )
818
817
 
819
- const actualWidth = toPx(this.viewHTMLElement, this.viewHTMLElement.style.width)
820
-
821
818
  if (frame.height != rectangle.height || frame.width != rectangle.width || performUncheckedLayout) {
822
819
  this.setNeedsLayout()
823
820
  this.boundsDidChange()
@@ -1973,6 +1970,53 @@ export class UIView extends UIObject {
1973
1970
 
1974
1971
  const pointerUpFunction = () => optionalParameters.viewDidChangeToSize?.(this, YES)
1975
1972
 
1973
+ const frameWasChanged = () => {
1974
+
1975
+ const frame = this.frame
1976
+
1977
+ if (this.style.minHeight) {
1978
+
1979
+ frame.height = [
1980
+ frame.height,
1981
+ toPx(this.viewHTMLElement, this.style.minHeight)
1982
+ ].max()
1983
+
1984
+ }
1985
+
1986
+ if (this.style.maxHeight) {
1987
+
1988
+ frame.height = [
1989
+ frame,
1990
+ toPx(this.viewHTMLElement, this.style.maxHeight)
1991
+ ].min()
1992
+
1993
+ }
1994
+
1995
+ if (this.style.minWidth) {
1996
+
1997
+ frame.width = [
1998
+ frame.width,
1999
+ toPx(this.viewHTMLElement, this.style.minWidth)
2000
+ ].max()
2001
+
2002
+ }
2003
+
2004
+ if (this.style.maxWidth) {
2005
+
2006
+ frame.width = [
2007
+ frame.width,
2008
+ toPx(this.viewHTMLElement, this.style.maxWidth)
2009
+ ].min()
2010
+
2011
+ }
2012
+
2013
+ this.frame = frame
2014
+
2015
+ optionalParameters.viewDidChangeToSize?.(this, NO)
2016
+
2017
+ }
2018
+
2019
+
1976
2020
  const leftEdge = new UIView().configuredWithObject({
1977
2021
  _viewHTMLElement: {
1978
2022
  className: "leftEdge",
@@ -1999,14 +2043,14 @@ export class UIView extends UIObject {
1999
2043
 
2000
2044
  this.frame = this.frame.rectangleWithInsets(event.movementX / UIView.pageScale, 0, 0, 0)
2001
2045
 
2002
- optionalParameters.viewDidChangeToSize?.(this, NO)
2046
+ frameWasChanged()
2003
2047
 
2004
2048
  }
2005
2049
 
2006
2050
  }
2051
+ leftEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction
2007
2052
 
2008
2053
 
2009
- leftEdge.controlEventTargetAccumulator.PointerUp = pointerUpFunction
2010
2054
  const rightEdge = new UIView().configuredWithObject({
2011
2055
  _viewHTMLElement: {
2012
2056
  className: "rightEdge",
@@ -2026,14 +2070,13 @@ export class UIView extends UIObject {
2026
2070
  pausesPointerEvents: YES
2027
2071
  })
2028
2072
 
2029
-
2030
2073
  rightEdge.controlEventTargetAccumulator.PointerDrag = (sender, event: Event) => {
2031
2074
 
2032
2075
  if (event instanceof MouseEvent) {
2033
2076
 
2034
2077
  this.frame = this.frame.rectangleWithInsets(0, -event.movementX / UIView.pageScale, 0, 0)
2035
2078
 
2036
- optionalParameters.viewDidChangeToSize?.(this, NO)
2079
+ frameWasChanged()
2037
2080
 
2038
2081
  }
2039
2082
 
@@ -2068,7 +2111,7 @@ export class UIView extends UIObject {
2068
2111
 
2069
2112
  this.frame = this.frame.rectangleWithInsets(0, 0, -event.movementY / UIView.pageScale, 0)
2070
2113
 
2071
- optionalParameters.viewDidChangeToSize?.(this, NO)
2114
+ frameWasChanged()
2072
2115
 
2073
2116
  }
2074
2117
 
@@ -2103,7 +2146,7 @@ export class UIView extends UIObject {
2103
2146
 
2104
2147
  this.frame = this.frame.rectangleWithInsets(0, 0, 0, event.movementY / UIView.pageScale)
2105
2148
 
2106
- optionalParameters.viewDidChangeToSize?.(this, NO)
2149
+ frameWasChanged()
2107
2150
 
2108
2151
  }
2109
2152
 
@@ -2144,7 +2187,7 @@ export class UIView extends UIObject {
2144
2187
  event.movementY / UIView.pageScale
2145
2188
  )
2146
2189
 
2147
- optionalParameters.viewDidChangeToSize?.(this, NO)
2190
+ frameWasChanged()
2148
2191
 
2149
2192
  }
2150
2193
 
@@ -2212,7 +2255,7 @@ export class UIView extends UIObject {
2212
2255
  0
2213
2256
  )
2214
2257
 
2215
- optionalParameters.viewDidChangeToSize?.(this, NO)
2258
+ frameWasChanged()
2216
2259
 
2217
2260
  }
2218
2261
 
@@ -2282,7 +2325,7 @@ export class UIView extends UIObject {
2282
2325
  0
2283
2326
  )
2284
2327
 
2285
- optionalParameters.viewDidChangeToSize?.(this, NO)
2328
+ frameWasChanged()
2286
2329
 
2287
2330
  }
2288
2331
 
@@ -2350,7 +2393,7 @@ export class UIView extends UIObject {
2350
2393
  event.movementY / UIView.pageScale
2351
2394
  )
2352
2395
 
2353
- optionalParameters.viewDidChangeToSize?.(this, NO)
2396
+ frameWasChanged()
2354
2397
 
2355
2398
  }
2356
2399
 
@@ -2520,32 +2563,32 @@ export class UIView extends UIObject {
2520
2563
  this._touchEventTime = nil
2521
2564
  pauseEvent(event)
2522
2565
  }
2523
-
2566
+
2524
2567
  this._hasPointerDragged = NO
2525
-
2568
+
2526
2569
  const windowMouseMoveFunction = (event: MouseEvent) => {
2527
2570
  onMouseMove(event)
2528
2571
  //pauseEvent(event, YES)
2529
2572
  }
2530
2573
  const windowMouseUpOrLeaveFunction = (event: MouseEvent) => {
2531
-
2574
+
2532
2575
  window.removeEventListener("mousemove", windowMouseMoveFunction)
2533
2576
  window.removeEventListener("mouseup", windowMouseUpOrLeaveFunction, true)
2534
2577
  document.body.removeEventListener("mouseleave", windowMouseUpOrLeaveFunction)
2535
2578
  onmouseup(event)
2536
-
2579
+
2537
2580
  }
2538
2581
  window.addEventListener("mousemove", windowMouseMoveFunction)
2539
2582
  window.addEventListener("mouseup", windowMouseUpOrLeaveFunction, true)
2540
2583
  document.body.addEventListener("mouseleave", windowMouseUpOrLeaveFunction)
2541
-
2584
+
2542
2585
  const windowTouchFunction = () => {
2543
2586
  window.removeEventListener("touchmove", onTouchMove, true)
2544
2587
  window.removeEventListener("mouseup", windowTouchFunction, true)
2545
2588
  }
2546
2589
  window.addEventListener("touchmove", onTouchMove, true)
2547
2590
  window.addEventListener("mouseup", windowTouchFunction, true)
2548
-
2591
+
2549
2592
  }
2550
2593
 
2551
2594
  const onTouchStart = onMouseDown as any
@@ -2562,7 +2605,7 @@ export class UIView extends UIObject {
2562
2605
  (this.ignoresMouse && event instanceof MouseEvent)) {
2563
2606
  return
2564
2607
  }
2565
-
2608
+
2566
2609
  if (this._isPointerInside && await this.shouldCallPointerUpInside()) {
2567
2610
  onPointerUpInside(event)
2568
2611
  if (!this._hasPointerDragged) {
@@ -2624,7 +2667,7 @@ export class UIView extends UIObject {
2624
2667
  // console.log("Mouse move")
2625
2668
  //
2626
2669
  // }
2627
-
2670
+
2628
2671
  if (!this._isPointerValid && !this._isPointerValidForMovement) {
2629
2672
  return
2630
2673
  }