uicore-ts 1.0.521 → 1.0.527

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.
Files changed (60) hide show
  1. package/compiledScripts/UIButton.d.ts +2 -2
  2. package/compiledScripts/UIButton.js +1 -0
  3. package/compiledScripts/UIButton.js.map +2 -2
  4. package/compiledScripts/UICore.js +3 -1
  5. package/compiledScripts/UICore.js.map +2 -2
  6. package/compiledScripts/UICoreExtensions.d.ts +4 -1
  7. package/compiledScripts/UICoreExtensions.js +29 -3
  8. package/compiledScripts/UICoreExtensions.js.map +2 -2
  9. package/compiledScripts/UIDialogView.d.ts +2 -2
  10. package/compiledScripts/UIDialogView.js +1 -0
  11. package/compiledScripts/UIDialogView.js.map +2 -2
  12. package/compiledScripts/UIImageView.js +4 -1
  13. package/compiledScripts/UIImageView.js.map +2 -2
  14. package/compiledScripts/UIKeyValueSorter.d.ts +42 -0
  15. package/compiledScripts/UIKeyValueSorter.js +155 -0
  16. package/compiledScripts/UIKeyValueSorter.js.map +7 -0
  17. package/compiledScripts/UIKeyValueSorterWebWorker.worker.d.ts +10 -0
  18. package/compiledScripts/UIKeyValueSorterWebWorker.worker.js +78 -0
  19. package/compiledScripts/UIKeyValueSorterWebWorker.worker.js.map +7 -0
  20. package/compiledScripts/UILinkButton.d.ts +1 -1
  21. package/compiledScripts/UINativeScrollView.d.ts +1 -0
  22. package/compiledScripts/UINativeScrollView.js +7 -3
  23. package/compiledScripts/UINativeScrollView.js.map +2 -2
  24. package/compiledScripts/UIObject.d.ts +14 -4
  25. package/compiledScripts/UIObject.js +4 -0
  26. package/compiledScripts/UIObject.js.map +2 -2
  27. package/compiledScripts/UIRootViewController.js +8 -9
  28. package/compiledScripts/UIRootViewController.js.map +2 -2
  29. package/compiledScripts/UITableView.d.ts +1 -0
  30. package/compiledScripts/UITableView.js +3 -1
  31. package/compiledScripts/UITableView.js.map +2 -2
  32. package/compiledScripts/UITextField.d.ts +1 -1
  33. package/compiledScripts/UITextField.js.map +2 -2
  34. package/compiledScripts/UITextView.js +4 -2
  35. package/compiledScripts/UITextView.js.map +2 -2
  36. package/compiledScripts/UIView.d.ts +12 -3
  37. package/compiledScripts/UIView.js +101 -40
  38. package/compiledScripts/UIView.js.map +2 -2
  39. package/compiledScripts/UIViewController.js +4 -2
  40. package/compiledScripts/UIViewController.js.map +2 -2
  41. package/compiledScripts/index.d.ts +1 -1
  42. package/compiledScripts/index.js +1 -1
  43. package/compiledScripts/index.js.map +2 -2
  44. package/package.json +1 -1
  45. package/scripts/UIButton.ts +2 -2
  46. package/scripts/UICore.ts +37 -36
  47. package/scripts/UICoreExtensions.ts +41 -4
  48. package/scripts/UIDialogView.ts +2 -2
  49. package/scripts/UIImageView.ts +1 -1
  50. package/scripts/{UIKeyValueStringSorter.ts → UIKeyValueSorter.ts} +10 -9
  51. package/scripts/{UIKeyValueStringSorterWebWorker.worker.ts → UIKeyValueSorterWebWorker.worker.ts} +15 -4
  52. package/scripts/UINativeScrollView.ts +10 -4
  53. package/scripts/UIObject.ts +24 -6
  54. package/scripts/UIRootViewController.ts +16 -5
  55. package/scripts/UITableView.ts +4 -5
  56. package/scripts/UITextField.ts +1 -1
  57. package/scripts/UITextView.ts +20 -12
  58. package/scripts/UIView.ts +165 -65
  59. package/scripts/UIViewController.ts +7 -3
  60. package/scripts/index.ts +1 -1
@@ -180,7 +180,8 @@ class UIRootViewController extends import_UIViewController.UIViewController {
180
180
  minScale = 0.7,
181
181
  maxScale = 1
182
182
  } = {}) {
183
- const actualPageWidth = (import_UIView.UIView.pageWidth * import_UIView.UIView.pageScale).integerValue;
183
+ var _a;
184
+ const actualPageWidth = (_a = window.innerWidth) != null ? _a : (import_UIView.UIView.pageWidth * import_UIView.UIView.pageScale).integerValue;
184
185
  let scale = minScale + (maxScale - minScale) * ((actualPageWidth - minScaleWidth) / (maxScaleWidth - minScaleWidth));
185
186
  scale = Math.min(scale, maxScale);
186
187
  scale = Math.max(scale, minScale);
@@ -192,22 +193,21 @@ class UIRootViewController extends import_UIViewController.UIViewController {
192
193
  topBarHeight = 65,
193
194
  bottomBarMinHeight = 100
194
195
  } = {}) {
195
- var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j;
196
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
196
197
  const bounds = this.view.bounds;
197
198
  if (this.topBarView) {
198
199
  this.topBarView.frame = new import_UIRectangle.UIRectangle(0, 0, topBarHeight, bounds.width);
199
200
  }
200
- this.backgroundView.style.top = "" + ((_a = this.topBarView) == null ? void 0 : _a.frame.height.integerValue);
201
+ this.backgroundView.style.top = "" + ((_b = (_a = this.topBarView) == null ? void 0 : _a.frame.height.integerValue) != null ? _b : 0) + "px";
201
202
  this.backgroundView.style.width = "100%";
202
203
  this.backgroundView.style.height = "fit-content";
203
- this.backgroundView.style.minHeight = "" + (bounds.height - ((_c = (_b = this.topBarView) == null ? void 0 : _b.frame.height) != null ? _c : 0) - ((_e = (_d = this.bottomBarView) == null ? void 0 : _d.frame.height) != null ? _e : 0)).integerValue + "px";
204
- const contentView = (_g = (_f = this.contentViewController) == null ? void 0 : _f.view) != null ? _g : import_UIObject.nil;
204
+ this.backgroundView.style.minHeight = "" + (bounds.height - ((_d = (_c = this.topBarView) == null ? void 0 : _c.frame.height) != null ? _d : 0) - ((_f = (_e = this.bottomBarView) == null ? void 0 : _e.frame.height) != null ? _f : 0)).integerValue + "px";
205
+ const contentView = (_h = (_g = this.contentViewController) == null ? void 0 : _g.view) != null ? _h : import_UIObject.nil;
205
206
  contentView.style.position = "relative";
206
207
  contentView.style.bottom = "0";
207
208
  contentView.style.top = "0";
208
209
  contentView.style.width = "100%";
209
210
  contentView.setPaddings(import_UIObject.nil, import_UIObject.nil, paddingLength, import_UIObject.nil);
210
- contentView.setNeedsLayout();
211
211
  if (contentViewMaxWidth < this.backgroundView.bounds.width) {
212
212
  contentView.style.marginBottom = "" + Math.min(
213
213
  (this.backgroundView.bounds.width - contentViewMaxWidth) * 0.5,
@@ -224,7 +224,7 @@ class UIRootViewController extends import_UIViewController.UIViewController {
224
224
  contentView.style.left = "";
225
225
  contentView.style.maxWidth = "";
226
226
  }
227
- (_h = this.contentViewController) == null ? void 0 : _h._triggerLayoutViewSubviews();
227
+ (_i = this.contentViewController) == null ? void 0 : _i._triggerLayoutViewSubviews();
228
228
  let contentViewControllerViewHeight = contentView.intrinsicContentHeight(
229
229
  contentView.bounds.width
230
230
  );
@@ -235,7 +235,6 @@ class UIRootViewController extends import_UIViewController.UIViewController {
235
235
  contentViewControllerViewHeight = detailsViewControllerViewHeight;
236
236
  }
237
237
  contentView.style.height = "" + contentViewControllerViewHeight.integerValue + "px";
238
- contentView.setNeedsLayout();
239
238
  if ((0, import_UIObject.IS)(this.detailsViewController)) {
240
239
  contentView.style.transform = "translateX(" + 0 + "px)";
241
240
  this.detailsViewController.view.frame = this.backgroundView.frame.rectangleWithInset(
@@ -261,7 +260,7 @@ class UIRootViewController extends import_UIViewController.UIViewController {
261
260
  Math.max(bottomBarMinHeight, this.bottomBarView.intrinsicContentHeight(this.backgroundView.frame.width))
262
261
  );
263
262
  }
264
- (0, import_UIObject.wrapInNil)(this._detailsDialogView).setMaxSizes((_j = (_i = this.bottomBarView) == null ? void 0 : _i.frame.max.y) != null ? _j : 0);
263
+ (0, import_UIObject.wrapInNil)(this._detailsDialogView).setMaxSizes((_k = (_j = this.bottomBarView) == null ? void 0 : _j.frame.max.y) != null ? _k : 0);
265
264
  }
266
265
  }
267
266
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UIRootViewController.ts"],
4
- "sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { UIDialogView } from \"./UIDialogView\"\nimport { EXTEND, FIRST, FIRST_OR_NIL, IS, IS_NOT, LAZY_VALUE, nil, NO, UIObject, wrapInNil, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIRoute } from \"./UIRoute\"\nimport { UIView } from \"./UIView\"\nimport { UIViewController } from \"./UIViewController\"\n\n\nexport interface UIRootViewControllerLazyViewControllerObject<T extends typeof UIViewController> {\n instance: InstanceType<T>;\n class: T;\n shouldShow: () => (Promise<boolean> | boolean);\n isInitialized: boolean\n}\n\n\nexport interface UIRootViewControllerLazyViewControllersObject {\n [x: string]: UIRootViewControllerLazyViewControllerObject<typeof UIViewController>\n}\n\n\nexport interface UIRootViewControllerLazyContentViewControllersObject extends UIRootViewControllerLazyViewControllersObject {\n mainViewController: UIRootViewControllerLazyViewControllerObject<typeof UIViewController>\n}\n\n\nexport class UIRootViewController extends UIViewController {\n \n topBarView?: UIView\n backgroundView: UIView = new UIView(this.view.elementID + \"BackgroundView\").configuredWithObject({\n style: {\n background: \"linear-gradient(\" + UIColor.whiteColor.stringValue + \", \" + UIColor.blueColor.stringValue + \")\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\"\n }\n })\n bottomBarView?: UIView\n \n _contentViewController?: UIViewController\n contentViewControllers: UIRootViewControllerLazyContentViewControllersObject = {\n mainViewController: this.lazyViewControllerObjectWithClass(UIViewController)\n }\n \n _detailsDialogView: UIDialogView = new UIDialogView(this.view.elementID + \"DetailsDialogView\")\n .configuredWithObject({\n dismiss: EXTEND(() => {\n const route = UIRoute.currentRoute\n this.detailsViewControllers.allValues.forEach(\n value => route.routeByRemovingComponentNamed(value.class.routeComponentName)\n )\n route.apply()\n }\n )\n })\n _detailsViewController?: UIViewController\n detailsViewControllers: UIRootViewControllerLazyViewControllersObject = {}\n \n \n constructor(view: UIView) {\n \n super(view)\n \n this.view.addSubview(this.backgroundView)\n \n }\n \n \n lazyViewControllerObjectWithClass<T extends typeof UIViewController>(\n classObject: T,\n shouldShow: () => (Promise<boolean> | boolean) = () => YES\n ): UIRootViewControllerLazyViewControllerObject<T> {\n const result: UIRootViewControllerLazyViewControllerObject<T> = {\n class: classObject,\n instance: nil,\n shouldShow: shouldShow,\n isInitialized: NO\n }\n UIObject.configureWithObject(result, {\n // @ts-ignore\n instance: LAZY_VALUE(\n () => {\n result.isInitialized = YES\n return new classObject(\n new UIView(classObject.name.replace(\"ViewController\", \"View\"))\n )\n }\n )\n })\n return result\n }\n \n \n override async handleRoute(route: UIRoute) {\n \n await super.handleRoute(route)\n \n UICore.languageService.updateCurrentLanguageKey()\n \n // Show content view\n await this.setContentViewControllerForRoute(route)\n \n await this.setDetailsViewControllerForRoute(route)\n \n }\n \n \n async setContentViewControllerForRoute(route: UIRoute) {\n const contentViewControllerObject = FIRST(\n await this.contentViewControllers.allValues.findAsyncSequential(\n async value => IS(route.componentWithViewController(value.class)) && await value.shouldShow()\n ),\n this.contentViewControllers.mainViewController\n )\n this.contentViewController = contentViewControllerObject.instance\n }\n \n async setDetailsViewControllerForRoute(route: UIRoute) {\n const detailsViewControllerObject = FIRST_OR_NIL(\n await this.detailsViewControllers.allValues.findAsyncSequential(\n async value => IS(route.componentWithViewController(value.class)) && await value.shouldShow()\n )\n )\n if (IS(route) && IS(this.detailsViewController) && IS_NOT(detailsViewControllerObject)) {\n this.detailsViewController = undefined\n this._detailsDialogView.dismiss()\n this.view.setNeedsLayout()\n return\n }\n this.detailsViewController = detailsViewControllerObject.instance\n }\n \n get contentViewController(): UIViewController | undefined {\n return this._contentViewController\n }\n \n set contentViewController(controller: UIViewController) {\n \n if (this.contentViewController == controller) {\n return\n }\n \n if (this.contentViewController) {\n this.removeChildViewController(this.contentViewController)\n }\n \n this._contentViewController = controller\n this.addChildViewControllerInContainer(controller, this.backgroundView)\n this._triggerLayoutViewSubviews()\n \n if (this.contentViewController) {\n this.contentViewController.view.style.boxShadow = \"0 3px 6px 0 rgba(0, 0, 0, 0.1)\"\n }\n \n this.view.setNeedsLayout()\n \n }\n \n \n get detailsViewController(): UIViewController | undefined {\n return this._detailsViewController\n }\n \n set detailsViewController(controller: UIViewController | undefined) {\n \n if (this.detailsViewController == controller) {\n return\n }\n \n if (IS(this.detailsViewController)) {\n this.removeChildViewController(this.detailsViewController)\n }\n \n this._detailsViewController = controller\n \n if (!IS(controller)) {\n return\n }\n \n this.addChildViewControllerInDialogView(controller, this._detailsDialogView)\n this._triggerLayoutViewSubviews()\n \n FIRST_OR_NIL(this.detailsViewController).view.style.borderRadius = \"5px\"\n \n this._detailsDialogView.showInView(this.view, YES)\n \n }\n \n updatePageScale(\n {\n minScaleWidth = 700,\n maxScaleWidth = 1500,\n minScale = 0.7,\n maxScale = 1\n } = {}\n ) {\n const actualPageWidth = (UIView.pageWidth * UIView.pageScale).integerValue\n let scale = minScale + (maxScale - minScale) *\n ((actualPageWidth - minScaleWidth) / (maxScaleWidth - minScaleWidth))\n scale = Math.min(scale, maxScale)\n scale = Math.max(scale, minScale)\n UIView.pageScale = scale\n }\n \n \n performDefaultLayout(\n {\n paddingLength = 20,\n contentViewMaxWidth = 1000,\n topBarHeight = 65,\n bottomBarMinHeight = 100\n } = {}\n ) {\n \n // View bounds\n const bounds = this.view.bounds\n \n if (this.topBarView) {\n this.topBarView.frame = new UIRectangle(0, 0, topBarHeight, bounds.width)\n }\n \n this.backgroundView.style.top = \"\" + this.topBarView?.frame.height.integerValue ?? 0 + \"px\"\n this.backgroundView.style.width = \"100%\"\n this.backgroundView.style.height = \"fit-content\"\n this.backgroundView.style.minHeight = \"\" +\n (bounds.height - (this.topBarView?.frame.height ?? 0) - (this.bottomBarView?.frame.height ?? 0)).integerValue + \"px\"\n \n const contentView = this.contentViewController?.view ?? nil\n contentView.style.position = \"relative\"\n contentView.style.bottom = \"0\"\n contentView.style.top = \"0\"\n contentView.style.width = \"100%\"\n contentView.setPaddings(nil, nil, paddingLength, nil)\n contentView.setNeedsLayout()\n \n if (contentViewMaxWidth < this.backgroundView.bounds.width) {\n \n contentView.style.marginBottom = \"\" +\n Math.min(\n (this.backgroundView.bounds.width - contentViewMaxWidth) * 0.5,\n paddingLength\n ).integerValue + \"px\"\n contentView.style.marginTop = \"\" +\n Math.min(\n (this.backgroundView.bounds.width - contentViewMaxWidth) * 0.5,\n paddingLength\n ).integerValue + \"px\"\n contentView.style.maxWidth = contentViewMaxWidth + \"px\"\n \n contentView.style.left = \"\" +\n ((this.backgroundView.bounds.width - contentView.bounds.width) * 0.5).integerValue +\n \"px\"\n \n }\n else {\n \n contentView.style.margin = \"\"\n contentView.style.left = \"\"\n contentView.style.maxWidth = \"\"\n \n }\n \n // Triggering immediate layout to ensure that the intrinsicContentHeight calculations work well\n this.contentViewController?._triggerLayoutViewSubviews()\n \n let contentViewControllerViewHeight = contentView.intrinsicContentHeight(\n contentView.bounds.width\n )\n \n const detailsViewControllerViewHeight = FIRST_OR_NIL(this.detailsViewController).view.intrinsicContentHeight(\n contentView.bounds.width)\n if (detailsViewControllerViewHeight > contentViewControllerViewHeight) {\n contentViewControllerViewHeight = detailsViewControllerViewHeight\n }\n \n \n contentView.style.height = \"\" + contentViewControllerViewHeight.integerValue + \"px\"\n contentView.setNeedsLayout()\n \n if (IS(this.detailsViewController)) {\n \n contentView.style.transform = \"translateX(\" + 0 + \"px)\"\n \n this.detailsViewController.view.frame = this.backgroundView.frame.rectangleWithInset(\n paddingLength\n ).rectangleWithWidth(\n contentView.bounds.width,\n 0.5\n ).rectangleWithHeight(\n Math.max(\n this.detailsViewController.view.intrinsicContentHeight(\n this.detailsViewController.view.bounds.width\n ),\n contentView.bounds.height\n )\n )\n \n }\n else {\n \n contentView.style.transform = \"translateX(\" + 0 + \"px)\"\n \n }\n \n if (this.bottomBarView) {\n this.bottomBarView.frame = this.backgroundView.frame.rectangleWithY(\n this.backgroundView.frame.max.y\n ).rectangleWithHeight(\n Math.max(bottomBarMinHeight, this.bottomBarView.intrinsicContentHeight(this.backgroundView.frame.width))\n )\n }\n \n \n wrapInNil(this._detailsDialogView).setMaxSizes(this.bottomBarView?.frame.max.y ?? 0)\n \n }\n \n \n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { UIDialogView } from \"./UIDialogView\"\nimport { EXTEND, FIRST, FIRST_OR_NIL, IS, IS_NOT, LAZY_VALUE, nil, NO, UIObject, wrapInNil, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIRoute } from \"./UIRoute\"\nimport { UIView } from \"./UIView\"\nimport { UIViewController } from \"./UIViewController\"\n\n\nexport interface UIRootViewControllerLazyViewControllerObject<T extends typeof UIViewController> {\n instance: InstanceType<T>;\n class: T;\n shouldShow: () => (Promise<boolean> | boolean);\n isInitialized: boolean\n}\n\n\nexport interface UIRootViewControllerLazyViewControllersObject {\n [x: string]: UIRootViewControllerLazyViewControllerObject<typeof UIViewController>\n}\n\n\nexport interface UIRootViewControllerLazyContentViewControllersObject extends UIRootViewControllerLazyViewControllersObject {\n mainViewController: UIRootViewControllerLazyViewControllerObject<typeof UIViewController>\n}\n\n\nexport class UIRootViewController extends UIViewController {\n \n topBarView?: UIView\n backgroundView: UIView = new UIView(this.view.elementID + \"BackgroundView\").configuredWithObject({\n style: {\n background: \"linear-gradient(\" + UIColor.whiteColor.stringValue + \", \" + UIColor.blueColor.stringValue + \")\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\"\n }\n })\n bottomBarView?: UIView\n \n _contentViewController?: UIViewController\n contentViewControllers: UIRootViewControllerLazyContentViewControllersObject = {\n mainViewController: this.lazyViewControllerObjectWithClass(UIViewController)\n }\n \n _detailsDialogView: UIDialogView = new UIDialogView(this.view.elementID + \"DetailsDialogView\")\n .configuredWithObject({\n dismiss: EXTEND(() => {\n const route = UIRoute.currentRoute\n this.detailsViewControllers.allValues.forEach(\n value => route.routeByRemovingComponentNamed(value.class.routeComponentName)\n )\n route.apply()\n }\n )\n })\n _detailsViewController?: UIViewController\n detailsViewControllers: UIRootViewControllerLazyViewControllersObject = {}\n \n \n constructor(view: UIView) {\n \n super(view)\n \n this.view.addSubview(this.backgroundView)\n \n }\n \n \n lazyViewControllerObjectWithClass<T extends typeof UIViewController>(\n classObject: T,\n shouldShow: () => (Promise<boolean> | boolean) = () => YES\n ): UIRootViewControllerLazyViewControllerObject<T> {\n const result: UIRootViewControllerLazyViewControllerObject<T> = {\n class: classObject,\n instance: nil,\n shouldShow: shouldShow,\n isInitialized: NO\n }\n UIObject.configureWithObject(result, {\n // @ts-ignore\n instance: LAZY_VALUE(\n () => {\n result.isInitialized = YES\n return new classObject(\n new UIView(classObject.name.replace(\"ViewController\", \"View\"))\n )\n }\n )\n })\n return result\n }\n \n \n override async handleRoute(route: UIRoute) {\n \n await super.handleRoute(route)\n \n UICore.languageService.updateCurrentLanguageKey()\n \n // Show content view\n await this.setContentViewControllerForRoute(route)\n \n await this.setDetailsViewControllerForRoute(route)\n \n }\n \n \n async setContentViewControllerForRoute(route: UIRoute) {\n const contentViewControllerObject = FIRST(\n await this.contentViewControllers.allValues.findAsyncSequential(\n async value => IS(route.componentWithViewController(value.class)) && await value.shouldShow()\n ),\n this.contentViewControllers.mainViewController\n )\n this.contentViewController = contentViewControllerObject.instance\n }\n \n async setDetailsViewControllerForRoute(route: UIRoute) {\n const detailsViewControllerObject = FIRST_OR_NIL(\n await this.detailsViewControllers.allValues.findAsyncSequential(\n async value => IS(route.componentWithViewController(value.class)) && await value.shouldShow()\n )\n )\n if (IS(route) && IS(this.detailsViewController) && IS_NOT(detailsViewControllerObject)) {\n this.detailsViewController = undefined\n this._detailsDialogView.dismiss()\n this.view.setNeedsLayout()\n return\n }\n this.detailsViewController = detailsViewControllerObject.instance\n }\n \n get contentViewController(): UIViewController | undefined {\n return this._contentViewController\n }\n \n set contentViewController(controller: UIViewController) {\n \n if (this.contentViewController == controller) {\n return\n }\n \n if (this.contentViewController) {\n this.removeChildViewController(this.contentViewController)\n }\n \n this._contentViewController = controller\n this.addChildViewControllerInContainer(controller, this.backgroundView)\n this._triggerLayoutViewSubviews()\n \n if (this.contentViewController) {\n this.contentViewController.view.style.boxShadow = \"0 3px 6px 0 rgba(0, 0, 0, 0.1)\"\n }\n \n this.view.setNeedsLayout()\n \n }\n \n \n get detailsViewController(): UIViewController | undefined {\n return this._detailsViewController\n }\n \n set detailsViewController(controller: UIViewController | undefined) {\n \n if (this.detailsViewController == controller) {\n return\n }\n \n if (IS(this.detailsViewController)) {\n this.removeChildViewController(this.detailsViewController)\n }\n \n this._detailsViewController = controller\n \n if (!IS(controller)) {\n return\n }\n \n this.addChildViewControllerInDialogView(controller, this._detailsDialogView)\n this._triggerLayoutViewSubviews()\n \n FIRST_OR_NIL(this.detailsViewController).view.style.borderRadius = \"5px\"\n \n this._detailsDialogView.showInView(this.view, YES)\n \n }\n \n updatePageScale(\n {\n minScaleWidth = 700,\n maxScaleWidth = 1500,\n minScale = 0.7,\n maxScale = 1\n } = {}\n ) {\n const actualPageWidth = window.innerWidth ?? (UIView.pageWidth * UIView.pageScale).integerValue\n let scale = minScale + (maxScale - minScale) *\n ((actualPageWidth - minScaleWidth) / (maxScaleWidth - minScaleWidth))\n scale = Math.min(scale, maxScale)\n scale = Math.max(scale, minScale)\n UIView.pageScale = scale\n }\n \n \n performDefaultLayout(\n {\n paddingLength = 20,\n contentViewMaxWidth = 1000,\n topBarHeight = 65,\n bottomBarMinHeight = 100\n } = {}\n ) {\n \n // View bounds\n const bounds = this.view.bounds\n \n if (this.topBarView) {\n this.topBarView.frame = new UIRectangle(0, 0, topBarHeight, bounds.width)\n }\n \n this.backgroundView.style.top = \"\" + (this.topBarView?.frame.height.integerValue ?? 0) + \"px\"\n this.backgroundView.style.width = \"100%\"\n this.backgroundView.style.height = \"fit-content\"\n this.backgroundView.style.minHeight = \"\" +\n (bounds.height - (this.topBarView?.frame.height ?? 0) - (this.bottomBarView?.frame.height ?? 0)).integerValue + \"px\"\n \n const contentView: UIView = this.contentViewController?.view ?? nil\n \n //var contentViewStyleString = contentView.viewHTMLElement.style.cssText\n \n contentView.style.position = \"relative\"\n contentView.style.bottom = \"0\"\n contentView.style.top = \"0\"\n contentView.style.width = \"100%\"\n contentView.setPaddings(nil, nil, paddingLength, nil)\n \n \n if (contentViewMaxWidth < this.backgroundView.bounds.width) {\n \n contentView.style.marginBottom = \"\" +\n Math.min(\n (this.backgroundView.bounds.width - contentViewMaxWidth) * 0.5,\n paddingLength\n ).integerValue + \"px\"\n contentView.style.marginTop = \"\" +\n Math.min(\n (this.backgroundView.bounds.width - contentViewMaxWidth) * 0.5,\n paddingLength\n ).integerValue + \"px\"\n contentView.style.maxWidth = contentViewMaxWidth + \"px\"\n \n contentView.style.left = \"\" +\n ((this.backgroundView.bounds.width - contentView.bounds.width) * 0.5).integerValue +\n \"px\"\n \n }\n else {\n \n contentView.style.margin = \"\"\n contentView.style.left = \"\"\n contentView.style.maxWidth = \"\"\n \n }\n \n // if (contentViewStyleString != contentView.style.cssText) {\n //\n // contentView.setNeedsLayout()\n //\n // }\n \n \n \n // Triggering immediate layout to ensure that the intrinsicContentHeight calculations work well\n this.contentViewController?._triggerLayoutViewSubviews()\n \n let contentViewControllerViewHeight = contentView.intrinsicContentHeight(\n contentView.bounds.width\n )\n \n const detailsViewControllerViewHeight = FIRST_OR_NIL(this.detailsViewController).view.intrinsicContentHeight(\n contentView.bounds.width)\n if (detailsViewControllerViewHeight > contentViewControllerViewHeight) {\n contentViewControllerViewHeight = detailsViewControllerViewHeight\n }\n \n \n contentView.style.height = \"\" + contentViewControllerViewHeight.integerValue + \"px\"\n //contentView.setNeedsLayout()\n \n if (IS(this.detailsViewController)) {\n \n contentView.style.transform = \"translateX(\" + 0 + \"px)\"\n \n this.detailsViewController.view.frame = this.backgroundView.frame.rectangleWithInset(\n paddingLength\n ).rectangleWithWidth(\n contentView.bounds.width,\n 0.5\n ).rectangleWithHeight(\n Math.max(\n this.detailsViewController.view.intrinsicContentHeight(\n this.detailsViewController.view.bounds.width\n ),\n contentView.bounds.height\n )\n )\n \n }\n else {\n \n contentView.style.transform = \"translateX(\" + 0 + \"px)\"\n \n }\n \n if (this.bottomBarView) {\n this.bottomBarView.frame = this.backgroundView.frame.rectangleWithY(\n this.backgroundView.frame.max.y\n ).rectangleWithHeight(\n Math.max(bottomBarMinHeight, this.bottomBarView.intrinsicContentHeight(this.backgroundView.frame.width))\n )\n }\n \n \n wrapInNil(this._detailsDialogView).setMaxSizes(this.bottomBarView?.frame.max.y ?? 0)\n \n }\n \n \n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AACxB,oBAAuB;AACvB,0BAA6B;AAC7B,sBAAuG;AACvG,yBAA4B;AAC5B,qBAAwB;AACxB,oBAAuB;AACvB,8BAAiC;AAqB1B,MAAM,6BAA6B,yCAAiB;AAAA,EAgCvD,YAAY,MAAc;AAEtB,UAAM,IAAI;AA/Bd,0BAAyB,IAAI,qBAAO,KAAK,KAAK,YAAY,gBAAgB,EAAE,qBAAqB;AAAA,MAC7F,OAAO;AAAA,QACH,YAAY,qBAAqB,uBAAQ,WAAW,cAAc,OAAO,uBAAQ,UAAU,cAAc;AAAA,QACzG,gBAAgB;AAAA,QAChB,kBAAkB;AAAA,MACtB;AAAA,IACJ,CAAC;AAID,kCAA+E;AAAA,MAC3E,oBAAoB,KAAK,kCAAkC,wCAAgB;AAAA,IAC/E;AAEA,8BAAmC,IAAI,iCAAa,KAAK,KAAK,YAAY,mBAAmB,EACxF,qBAAqB;AAAA,MAClB,aAAS;AAAA,QAAO,MAAM;AACd,gBAAM,QAAQ,uBAAQ;AACtB,eAAK,uBAAuB,UAAU;AAAA,YAClC,WAAS,MAAM,8BAA8B,MAAM,MAAM,kBAAkB;AAAA,UAC/E;AACA,gBAAM,MAAM;AAAA,QAChB;AAAA,MACJ;AAAA,IACJ,CAAC;AAEL,kCAAwE,CAAC;AAOrE,SAAK,KAAK,WAAW,KAAK,cAAc;AAAA,EAE5C;AAAA,EAGA,kCACI,aACA,aAAiD,MAAM,qBACR;AAC/C,UAAM,SAA0D;AAAA,MAC5D,OAAO;AAAA,MACP,UAAU;AAAA,MACV;AAAA,MACA,eAAe;AAAA,IACnB;AACA,6BAAS,oBAAoB,QAAQ;AAAA,MAEjC,cAAU;AAAA,QACN,MAAM;AACF,iBAAO,gBAAgB;AACvB,iBAAO,IAAI;AAAA,YACP,IAAI,qBAAO,YAAY,KAAK,QAAQ,kBAAkB,MAAM,CAAC;AAAA,UACjE;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,WAAO;AAAA,EACX;AAAA,EAGe,YAAY,OAAgB;AAAA;AAEvC,YAAM,iDAAM,oBAAN,MAAkB,KAAK;AAE7B,2BAAO,gBAAgB,yBAAyB;AAGhD,YAAM,KAAK,iCAAiC,KAAK;AAEjD,YAAM,KAAK,iCAAiC,KAAK;AAAA,IAErD;AAAA;AAAA,EAGM,iCAAiC,OAAgB;AAAA;AACnD,YAAM,kCAA8B;AAAA,QAChC,MAAM,KAAK,uBAAuB,UAAU;AAAA,UACxC,CAAM,UAAM;AAAG,2CAAG,MAAM,4BAA4B,MAAM,KAAK,CAAC,MAAK,MAAM,MAAM,WAAW;AAAA;AAAA,QAChG;AAAA,QACA,KAAK,uBAAuB;AAAA,MAChC;AACA,WAAK,wBAAwB,4BAA4B;AAAA,IAC7D;AAAA;AAAA,EAEM,iCAAiC,OAAgB;AAAA;AACnD,YAAM,kCAA8B;AAAA,QAChC,MAAM,KAAK,uBAAuB,UAAU;AAAA,UACxC,CAAM,UAAM;AAAG,2CAAG,MAAM,4BAA4B,MAAM,KAAK,CAAC,MAAK,MAAM,MAAM,WAAW;AAAA;AAAA,QAChG;AAAA,MACJ;AACA,cAAI,oBAAG,KAAK,SAAK,oBAAG,KAAK,qBAAqB,SAAK,wBAAO,2BAA2B,GAAG;AACpF,aAAK,wBAAwB;AAC7B,aAAK,mBAAmB,QAAQ;AAChC,aAAK,KAAK,eAAe;AACzB;AAAA,MACJ;AACA,WAAK,wBAAwB,4BAA4B;AAAA,IAC7D;AAAA;AAAA,EAEA,IAAI,wBAAsD;AACtD,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,sBAAsB,YAA8B;AAEpD,QAAI,KAAK,yBAAyB,YAAY;AAC1C;AAAA,IACJ;AAEA,QAAI,KAAK,uBAAuB;AAC5B,WAAK,0BAA0B,KAAK,qBAAqB;AAAA,IAC7D;AAEA,SAAK,yBAAyB;AAC9B,SAAK,kCAAkC,YAAY,KAAK,cAAc;AACtE,SAAK,2BAA2B;AAEhC,QAAI,KAAK,uBAAuB;AAC5B,WAAK,sBAAsB,KAAK,MAAM,YAAY;AAAA,IACtD;AAEA,SAAK,KAAK,eAAe;AAAA,EAE7B;AAAA,EAGA,IAAI,wBAAsD;AACtD,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,sBAAsB,YAA0C;AAEhE,QAAI,KAAK,yBAAyB,YAAY;AAC1C;AAAA,IACJ;AAEA,YAAI,oBAAG,KAAK,qBAAqB,GAAG;AAChC,WAAK,0BAA0B,KAAK,qBAAqB;AAAA,IAC7D;AAEA,SAAK,yBAAyB;AAE9B,QAAI,KAAC,oBAAG,UAAU,GAAG;AACjB;AAAA,IACJ;AAEA,SAAK,mCAAmC,YAAY,KAAK,kBAAkB;AAC3E,SAAK,2BAA2B;AAEhC,sCAAa,KAAK,qBAAqB,EAAE,KAAK,MAAM,eAAe;AAEnE,SAAK,mBAAmB,WAAW,KAAK,MAAM,mBAAG;AAAA,EAErD;AAAA,EAEA,gBACI;AAAA,IACI,gBAAgB;AAAA,IAChB,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,WAAW;AAAA,EACf,IAAI,CAAC,GACP;AApMN;AAqMQ,UAAM,mBAAkB,YAAO,eAAP,aAAsB,qBAAO,YAAY,qBAAO,WAAW;AACnF,QAAI,QAAQ,YAAY,WAAW,cAC7B,kBAAkB,kBAAkB,gBAAgB;AAC1D,YAAQ,KAAK,IAAI,OAAO,QAAQ;AAChC,YAAQ,KAAK,IAAI,OAAO,QAAQ;AAChC,yBAAO,YAAY;AAAA,EACvB;AAAA,EAGA,qBACI;AAAA,IACI,gBAAgB;AAAA,IAChB,sBAAsB;AAAA,IACtB,eAAe;AAAA,IACf,qBAAqB;AAAA,EACzB,IAAI,CAAC,GACP;AArNN;AAwNQ,UAAM,SAAS,KAAK,KAAK;AAEzB,QAAI,KAAK,YAAY;AACjB,WAAK,WAAW,QAAQ,IAAI,+BAAY,GAAG,GAAG,cAAc,OAAO,KAAK;AAAA,IAC5E;AAEA,SAAK,eAAe,MAAM,MAAM,OAAM,gBAAK,eAAL,mBAAiB,MAAM,OAAO,iBAA9B,YAA8C,KAAK;AACzF,SAAK,eAAe,MAAM,QAAQ;AAClC,SAAK,eAAe,MAAM,SAAS;AACnC,SAAK,eAAe,MAAM,YAAY,MACjC,OAAO,WAAU,gBAAK,eAAL,mBAAiB,MAAM,WAAvB,YAAiC,OAAM,gBAAK,kBAAL,mBAAoB,MAAM,WAA1B,YAAoC,IAAI,eAAe;AAEpH,UAAM,eAAsB,gBAAK,0BAAL,mBAA4B,SAA5B,YAAoC;AAIhE,gBAAY,MAAM,WAAW;AAC7B,gBAAY,MAAM,SAAS;AAC3B,gBAAY,MAAM,MAAM;AACxB,gBAAY,MAAM,QAAQ;AAC1B,gBAAY,YAAY,qBAAK,qBAAK,eAAe,mBAAG;AAGpD,QAAI,sBAAsB,KAAK,eAAe,OAAO,OAAO;AAExD,kBAAY,MAAM,eAAe,KAC7B,KAAK;AAAA,SACA,KAAK,eAAe,OAAO,QAAQ,uBAAuB;AAAA,QAC3D;AAAA,MACJ,EAAE,eAAe;AACrB,kBAAY,MAAM,YAAY,KAC1B,KAAK;AAAA,SACA,KAAK,eAAe,OAAO,QAAQ,uBAAuB;AAAA,QAC3D;AAAA,MACJ,EAAE,eAAe;AACrB,kBAAY,MAAM,WAAW,sBAAsB;AAEnD,kBAAY,MAAM,OAAO,OACnB,KAAK,eAAe,OAAO,QAAQ,YAAY,OAAO,SAAS,KAAK,eACtE;AAAA,IAER,OACK;AAED,kBAAY,MAAM,SAAS;AAC3B,kBAAY,MAAM,OAAO;AACzB,kBAAY,MAAM,WAAW;AAAA,IAEjC;AAWA,eAAK,0BAAL,mBAA4B;AAE5B,QAAI,kCAAkC,YAAY;AAAA,MAC9C,YAAY,OAAO;AAAA,IACvB;AAEA,UAAM,sCAAkC,8BAAa,KAAK,qBAAqB,EAAE,KAAK;AAAA,MAClF,YAAY,OAAO;AAAA,IAAK;AAC5B,QAAI,kCAAkC,iCAAiC;AACnE,wCAAkC;AAAA,IACtC;AAGA,gBAAY,MAAM,SAAS,KAAK,gCAAgC,eAAe;AAG/E,YAAI,oBAAG,KAAK,qBAAqB,GAAG;AAEhC,kBAAY,MAAM,YAAY,gBAAgB,IAAI;AAElD,WAAK,sBAAsB,KAAK,QAAQ,KAAK,eAAe,MAAM;AAAA,QAC9D;AAAA,MACJ,EAAE;AAAA,QACE,YAAY,OAAO;AAAA,QACnB;AAAA,MACJ,EAAE;AAAA,QACE,KAAK;AAAA,UACD,KAAK,sBAAsB,KAAK;AAAA,YAC5B,KAAK,sBAAsB,KAAK,OAAO;AAAA,UAC3C;AAAA,UACA,YAAY,OAAO;AAAA,QACvB;AAAA,MACJ;AAAA,IAEJ,OACK;AAED,kBAAY,MAAM,YAAY,gBAAgB,IAAI;AAAA,IAEtD;AAEA,QAAI,KAAK,eAAe;AACpB,WAAK,cAAc,QAAQ,KAAK,eAAe,MAAM;AAAA,QACjD,KAAK,eAAe,MAAM,IAAI;AAAA,MAClC,EAAE;AAAA,QACE,KAAK,IAAI,oBAAoB,KAAK,cAAc,uBAAuB,KAAK,eAAe,MAAM,KAAK,CAAC;AAAA,MAC3G;AAAA,IACJ;AAGA,mCAAU,KAAK,kBAAkB,EAAE,aAAY,gBAAK,kBAAL,mBAAoB,MAAM,IAAI,MAA9B,YAAmC,CAAC;AAAA,EAEvF;AAGJ;",
6
6
  "names": []
7
7
  }
@@ -25,6 +25,7 @@ export declare class UITableView extends UINativeScrollView {
25
25
  _rowIDIndex: number;
26
26
  reloadsOnLanguageChange: boolean;
27
27
  sidePadding: number;
28
+ cellWeights?: number[];
28
29
  _persistedData: any[];
29
30
  _needsDrawingOfVisibleRowsBeforeLayout: boolean;
30
31
  _isDrawVisibleRowsScheduled: boolean;
@@ -161,12 +161,13 @@ class UITableView extends import_UINativeScrollView.UINativeScrollView {
161
161
  _removeVisibleRows() {
162
162
  const visibleRows = [];
163
163
  this._visibleRows.forEach((row) => {
164
+ var _a;
164
165
  this._persistedData[row._UITableViewRowIndex] = this.persistenceDataItemForRowWithIndex(
165
166
  row._UITableViewRowIndex,
166
167
  row
167
168
  );
168
169
  row.removeFromSuperview();
169
- this._removedReusableViews[row._UITableViewReusabilityIdentifier].push(row);
170
+ (_a = this._removedReusableViews[row == null ? void 0 : row._UITableViewReusabilityIdentifier]) == null ? void 0 : _a.push(row);
170
171
  });
171
172
  this._visibleRows = visibleRows;
172
173
  }
@@ -276,6 +277,7 @@ class UITableView extends import_UINativeScrollView.UINativeScrollView {
276
277
  }
277
278
  viewForRowWithIndex(rowIndex) {
278
279
  const row = this.reusableViewForIdentifier("Row", rowIndex);
280
+ row._UITableViewRowIndex = rowIndex;
279
281
  (0, import_UIObject.FIRST_OR_NIL)(row.titleLabel).text = "Row " + rowIndex;
280
282
  return row;
281
283
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UITableView.ts"],
4
- "sourcesContent": ["import { UIButton } from \"./UIButton\"\nimport { UINativeScrollView } from \"./UINativeScrollView\"\nimport { FIRST_OR_NIL, IS, IS_DEFINED, nil, NO, YES } from \"./UIObject\"\nimport { UIPoint } from \"./UIPoint\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\ninterface UITableViewRowView extends UIView {\n \n _UITableViewRowIndex?: number;\n \n}\n\n\nexport interface UITableViewReusableViewsContainerObject {\n \n [key: string]: UIView[];\n \n}\n\n\nexport interface UITableViewReusableViewPositionObject {\n \n bottomY: number;\n topY: number;\n \n isValid: boolean;\n \n}\n\n\nexport class UITableView extends UINativeScrollView {\n \n \n allRowsHaveEqualHeight: boolean = NO\n _visibleRows: UITableViewRowView[] = []\n _firstLayoutVisibleRows: UITableViewRowView[] = []\n \n _rowPositions: UITableViewReusableViewPositionObject[] = []\n \n _highestValidRowPositionIndex: number = 0\n \n _reusableViews: UITableViewReusableViewsContainerObject = {}\n \n _removedReusableViews: UITableViewReusableViewsContainerObject = {}\n \n _fullHeightView: UIView\n \n _rowIDIndex: number = 0\n \n reloadsOnLanguageChange = YES\n \n sidePadding = 0\n \n _persistedData: any[] = []\n _needsDrawingOfVisibleRowsBeforeLayout = NO\n _isDrawVisibleRowsScheduled = NO\n _shouldAnimateNextLayout?: boolean\n \n override animationDuration = 0.25\n \n \n constructor(elementID?: string) {\n \n super(elementID)\n \n this._fullHeightView = new UIView()\n this._fullHeightView.hidden = YES\n this._fullHeightView.userInteractionEnabled = NO\n this.addSubview(this._fullHeightView)\n \n this.scrollsX = NO\n \n }\n \n \n loadData() {\n \n this._persistedData = []\n \n this._calculatePositionsUntilIndex(this.numberOfRows() - 1)\n this._needsDrawingOfVisibleRowsBeforeLayout = YES\n \n this.setNeedsLayout()\n \n }\n \n reloadData() {\n \n this._removeVisibleRows()\n this._removeAllReusableRows()\n \n this._rowPositions = []\n this._highestValidRowPositionIndex = 0\n \n this.loadData()\n \n }\n \n \n highlightChanges(previousData: any[], newData: any[]) {\n \n previousData = previousData.map(dataPoint => JSON.stringify(dataPoint))\n newData = newData.map(dataPoint => JSON.stringify(dataPoint))\n \n const newIndexes: number[] = []\n \n newData.forEach((value, index) => {\n \n if (!previousData.contains(value)) {\n \n newIndexes.push(index)\n \n }\n \n })\n \n newIndexes.forEach(index => {\n \n if (this.isRowWithIndexVisible(index)) {\n this.highlightRowAsNew(this.visibleRowWithIndex(index) as UIView)\n }\n \n })\n \n }\n \n \n highlightRowAsNew(row: UIView) {\n \n \n }\n \n \n invalidateSizeOfRowWithIndex(index: number, animateChange = NO) {\n \n if (this._rowPositions[index]) {\n this._rowPositions[index].isValid = NO\n }\n \n this._highestValidRowPositionIndex = Math.min(this._highestValidRowPositionIndex, index - 1)\n \n // if (index == 0) {\n \n // this._highestValidRowPositionIndex = 0;\n \n // this._rowPositions = [];\n \n // }\n \n this._needsDrawingOfVisibleRowsBeforeLayout = YES\n \n this._shouldAnimateNextLayout = animateChange\n \n }\n \n \n _calculateAllPositions() {\n this._calculatePositionsUntilIndex(this.numberOfRows() - 1)\n }\n \n _calculatePositionsUntilIndex(maxIndex: number) {\n \n var validPositionObject = this._rowPositions[this._highestValidRowPositionIndex]\n if (!IS(validPositionObject)) {\n validPositionObject = {\n bottomY: 0,\n topY: 0,\n isValid: YES\n }\n }\n \n var previousBottomY = validPositionObject.bottomY\n \n if (!this._rowPositions.length) {\n \n this._highestValidRowPositionIndex = -1\n \n }\n \n for (var i = this._highestValidRowPositionIndex + 1; i <= maxIndex; i++) {\n \n var height: number\n \n const rowPositionObject = this._rowPositions[i]\n \n if (IS((rowPositionObject || nil).isValid)) {\n \n height = rowPositionObject.bottomY - rowPositionObject.topY\n \n }\n else {\n \n height = this.heightForRowWithIndex(i)\n \n }\n \n \n const positionObject: UITableViewReusableViewPositionObject = {\n bottomY: previousBottomY + height,\n topY: previousBottomY,\n isValid: YES\n }\n \n if (i < this._rowPositions.length) {\n this._rowPositions[i] = positionObject\n }\n else {\n this._rowPositions.push(positionObject)\n }\n this._highestValidRowPositionIndex = i\n previousBottomY = previousBottomY + height\n \n }\n \n }\n \n \n indexesForVisibleRows(paddingRatio = 0.5): number[] {\n \n const firstVisibleY = this.contentOffset.y - this.bounds.height * paddingRatio\n const lastVisibleY = firstVisibleY + this.bounds.height * (1 + paddingRatio)\n \n const numberOfRows = this.numberOfRows()\n \n if (this.allRowsHaveEqualHeight) {\n \n const rowHeight = this.heightForRowWithIndex(0)\n \n var firstIndex = firstVisibleY / rowHeight\n var lastIndex = lastVisibleY / rowHeight\n \n firstIndex = Math.trunc(firstIndex)\n lastIndex = Math.trunc(lastIndex) + 1\n \n firstIndex = Math.max(firstIndex, 0)\n lastIndex = Math.min(lastIndex, numberOfRows - 1)\n \n var result = []\n for (var i = firstIndex; i < lastIndex + 1; i++) {\n result.push(i)\n }\n return result\n }\n \n var accumulatedHeight = 0\n var result = []\n \n this._calculateAllPositions()\n \n const rowPositions = this._rowPositions\n \n for (var i = 0; i < numberOfRows; i++) {\n \n const height = rowPositions[i].bottomY - rowPositions[i].topY // this.heightForRowWithIndex(i)\n \n accumulatedHeight = accumulatedHeight + height\n if (accumulatedHeight >= firstVisibleY) {\n result.push(i)\n }\n if (accumulatedHeight >= lastVisibleY) {\n break\n }\n \n }\n \n return result\n \n }\n \n \n _removeVisibleRows() {\n \n const visibleRows: UITableViewRowView[] = []\n this._visibleRows.forEach((row: UIView) => {\n \n this._persistedData[row._UITableViewRowIndex as number] = this.persistenceDataItemForRowWithIndex(\n row._UITableViewRowIndex as number,\n row\n )\n row.removeFromSuperview()\n this._removedReusableViews[row._UITableViewReusabilityIdentifier].push(row)\n \n \n })\n this._visibleRows = visibleRows\n \n }\n \n \n _removeAllReusableRows() {\n this._reusableViews.forEach((rows: UIView[]) =>\n rows.forEach((row: UIView) => {\n \n this._persistedData[row._UITableViewRowIndex as number] = this.persistenceDataItemForRowWithIndex(\n row._UITableViewRowIndex as number,\n row\n )\n row.removeFromSuperview()\n \n this._markReusableViewAsUnused(row)\n \n })\n )\n }\n \n \n _markReusableViewAsUnused(row: UIView) {\n if (!this._removedReusableViews[row._UITableViewReusabilityIdentifier].contains(row)) {\n this._removedReusableViews[row._UITableViewReusabilityIdentifier].push(row)\n }\n }\n \n _drawVisibleRows() {\n \n if (!this.isMemberOfViewTree) {\n return\n }\n \n const visibleIndexes = this.indexesForVisibleRows()\n \n const minIndex = visibleIndexes[0]\n const maxIndex = visibleIndexes[visibleIndexes.length - 1]\n \n const removedViews: UITableViewRowView[] = []\n \n const visibleRows: UITableViewRowView[] = []\n this._visibleRows.forEach((row) => {\n if (IS_DEFINED(row._UITableViewRowIndex) && (row._UITableViewRowIndex < minIndex || row._UITableViewRowIndex > maxIndex)) {\n \n //row.removeFromSuperview();\n \n this._persistedData[row._UITableViewRowIndex] = this.persistenceDataItemForRowWithIndex(\n row._UITableViewRowIndex,\n row\n )\n \n this._removedReusableViews[row._UITableViewReusabilityIdentifier].push(row)\n \n removedViews.push(row)\n \n }\n else {\n visibleRows.push(row)\n }\n })\n this._visibleRows = visibleRows\n \n visibleIndexes.forEach((rowIndex: number) => {\n \n if (this.isRowWithIndexVisible(rowIndex)) {\n return\n }\n const view: UITableViewRowView = this.viewForRowWithIndex(rowIndex)\n //view._UITableViewRowIndex = rowIndex;\n this._firstLayoutVisibleRows.push(view)\n this._visibleRows.push(view)\n this.addSubview(view)\n \n })\n \n for (let i = 0; i < removedViews.length; i++) {\n \n const view = removedViews[i]\n if (this._visibleRows.indexOf(view) == -1) {\n \n //this._persistedData[view._UITableViewRowIndex] = this.persistenceDataItemForRowWithIndex(view._UITableViewRowIndex, view);\n view.removeFromSuperview()\n \n //this._removedReusableViews[view._UITableViewReusabilityIdentifier].push(view);\n \n }\n \n }\n \n //this.setNeedsLayout();\n \n }\n \n \n visibleRowWithIndex(rowIndex: number | undefined): UIView {\n for (var i = 0; i < this._visibleRows.length; i++) {\n const row = this._visibleRows[i]\n if (row._UITableViewRowIndex == rowIndex) {\n return row\n }\n }\n return nil\n }\n \n \n isRowWithIndexVisible(rowIndex: number) {\n return IS(this.visibleRowWithIndex(rowIndex))\n }\n \n \n reusableViewForIdentifier(identifier: string, rowIndex: number): UITableViewRowView {\n \n if (!this._removedReusableViews[identifier]) {\n this._removedReusableViews[identifier] = []\n }\n \n if (this._removedReusableViews[identifier] && this._removedReusableViews[identifier].length) {\n \n const view = this._removedReusableViews[identifier].pop() as UITableViewRowView\n view._UITableViewRowIndex = rowIndex\n Object.assign(view, this._persistedData[rowIndex] || this.defaultRowPersistenceDataItem())\n return view\n \n }\n \n if (!this._reusableViews[identifier]) {\n this._reusableViews[identifier] = []\n }\n \n const newView = this.newReusableViewForIdentifier(identifier, this._rowIDIndex) as UITableViewRowView\n this._rowIDIndex = this._rowIDIndex + 1\n \n newView._UITableViewReusabilityIdentifier = identifier\n newView._UITableViewRowIndex = rowIndex\n \n Object.assign(newView, this._persistedData[rowIndex] || this.defaultRowPersistenceDataItem())\n this._reusableViews[identifier].push(newView)\n \n return newView\n \n }\n \n \n // Functions that should be overridden to draw the correct content START\n newReusableViewForIdentifier(identifier: string, rowIDIndex: number): UIView {\n \n const view = new UIButton(this.elementID + \"Row\" + rowIDIndex)\n \n view.stopsPointerEventPropagation = NO\n view.pausesPointerEvents = NO\n \n return view\n \n }\n \n heightForRowWithIndex(index: number): number {\n return 50\n }\n \n numberOfRows() {\n return 10000\n }\n \n defaultRowPersistenceDataItem(): any {\n \n \n }\n \n persistenceDataItemForRowWithIndex(rowIndex: number, row: UIView): any {\n \n \n }\n \n viewForRowWithIndex(rowIndex: number): UITableViewRowView {\n const row = this.reusableViewForIdentifier(\"Row\", rowIndex);\n FIRST_OR_NIL((row as unknown as UIButton).titleLabel).text = \"Row \" + rowIndex\n return row\n }\n \n // Functions that should be overridden to draw the correct content END\n \n \n // Functions that trigger redrawing of the content\n override didScrollToPosition(offsetPosition: UIPoint) {\n \n super.didScrollToPosition(offsetPosition)\n \n this.forEachViewInSubtree(function (view: UIView) {\n \n view._isPointerValid = NO\n \n })\n \n if (!this._isDrawVisibleRowsScheduled) {\n \n this._isDrawVisibleRowsScheduled = YES\n \n UIView.runFunctionBeforeNextFrame(function (this: UITableView) {\n \n this._calculateAllPositions()\n \n this._drawVisibleRows()\n \n this.setNeedsLayout()\n \n this._isDrawVisibleRowsScheduled = NO\n \n }.bind(this))\n \n }\n \n }\n \n override wasAddedToViewTree() {\n this.loadData()\n }\n \n override setFrame(rectangle: UIRectangle, zIndex?: number, performUncheckedLayout?: boolean) {\n \n const frame = this.frame\n super.setFrame(rectangle, zIndex, performUncheckedLayout)\n if (frame.isEqualTo(rectangle) && !performUncheckedLayout) {\n return\n }\n \n this._needsDrawingOfVisibleRowsBeforeLayout = YES\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.LanguageChanged && this.reloadsOnLanguageChange) {\n \n this.reloadData()\n \n }\n \n \n }\n \n \n private _layoutAllRows(positions = this._rowPositions) {\n \n const bounds = this.bounds\n \n this._visibleRows.forEach(row => {\n \n const frame = bounds.copy()\n \n const positionObject = positions[row._UITableViewRowIndex!]\n frame.min.y = positionObject.topY\n frame.max.y = positionObject.bottomY\n row.frame = frame\n \n row.style.width = \"\" + (bounds.width - this.sidePadding * 2).integerValue + \"px\"\n row.style.left = \"\" + this.sidePadding.integerValue + \"px\"\n \n \n })\n \n this._fullHeightView.frame = bounds.rectangleWithHeight((positions.lastElement ||\n nil).bottomY).rectangleWithWidth(bounds.width * 0.5)\n \n this._firstLayoutVisibleRows = []\n \n }\n \n private _animateLayoutAllRows() {\n \n UIView.animateViewOrViewsWithDurationDelayAndFunction(\n this._visibleRows,\n this.animationDuration,\n 0,\n undefined,\n function (this: UITableView) {\n \n this._layoutAllRows()\n \n }.bind(this),\n function (this: UITableView) {\n \n // this._calculateAllPositions()\n // this._layoutAllRows()\n \n }.bind(this)\n )\n \n }\n \n \n override layoutSubviews() {\n \n const previousPositions: UITableViewReusableViewPositionObject[] = JSON.parse(JSON.stringify(this._rowPositions))\n \n const previousVisibleRowsLength = this._visibleRows.length\n \n if (this._needsDrawingOfVisibleRowsBeforeLayout) {\n \n //this._calculateAllPositions()\n \n this._drawVisibleRows()\n \n this._needsDrawingOfVisibleRowsBeforeLayout = NO\n \n }\n \n \n super.layoutSubviews()\n \n \n if (!this.numberOfRows() || !this.isMemberOfViewTree) {\n \n return\n \n }\n \n \n if (this._shouldAnimateNextLayout) {\n \n \n // Need to do layout with the previous positions\n \n this._layoutAllRows(previousPositions)\n \n \n if (previousVisibleRowsLength < this._visibleRows.length) {\n \n \n UIView.runFunctionBeforeNextFrame(function (this: UITableView) {\n \n this._animateLayoutAllRows()\n \n }.bind(this))\n \n }\n else {\n \n this._animateLayoutAllRows()\n \n }\n \n \n this._shouldAnimateNextLayout = NO\n \n }\n else {\n \n // if (this._needsDrawingOfVisibleRowsBeforeLayout) {\n \n // this._drawVisibleRows();\n \n // this._needsDrawingOfVisibleRowsBeforeLayout = NO;\n \n // }\n \n this._calculateAllPositions()\n \n this._layoutAllRows()\n \n \n }\n \n \n }\n \n \n override intrinsicContentHeight(constrainingWidth = 0) {\n \n \n var result = 0\n \n this._calculateAllPositions()\n \n if (this._rowPositions.length) {\n \n result = this._rowPositions[this._rowPositions.length - 1].bottomY\n \n }\n \n return result\n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { UIButton } from \"./UIButton\"\nimport { UINativeScrollView } from \"./UINativeScrollView\"\nimport { FIRST_OR_NIL, IS, IS_DEFINED, nil, NO, YES } from \"./UIObject\"\nimport { UIPoint } from \"./UIPoint\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\ninterface UITableViewRowView extends UIView {\n \n _UITableViewRowIndex?: number;\n \n}\n\n\nexport interface UITableViewReusableViewsContainerObject {\n \n [key: string]: UIView[];\n \n}\n\n\nexport interface UITableViewReusableViewPositionObject {\n \n bottomY: number;\n topY: number;\n \n isValid: boolean;\n \n}\n\n\nexport class UITableView extends UINativeScrollView {\n \n \n allRowsHaveEqualHeight: boolean = NO\n _visibleRows: UITableViewRowView[] = []\n _firstLayoutVisibleRows: UITableViewRowView[] = []\n \n _rowPositions: UITableViewReusableViewPositionObject[] = []\n \n _highestValidRowPositionIndex: number = 0\n \n _reusableViews: UITableViewReusableViewsContainerObject = {}\n _removedReusableViews: UITableViewReusableViewsContainerObject = {}\n \n _fullHeightView: UIView\n _rowIDIndex: number = 0\n reloadsOnLanguageChange = YES\n sidePadding = 0\n\n cellWeights?: number[]\n \n _persistedData: any[] = []\n _needsDrawingOfVisibleRowsBeforeLayout = NO\n _isDrawVisibleRowsScheduled = NO\n _shouldAnimateNextLayout?: boolean\n \n override animationDuration = 0.25\n \n \n constructor(elementID?: string) {\n \n super(elementID)\n \n this._fullHeightView = new UIView()\n this._fullHeightView.hidden = YES\n this._fullHeightView.userInteractionEnabled = NO\n this.addSubview(this._fullHeightView)\n \n this.scrollsX = NO\n \n }\n \n \n loadData() {\n \n this._persistedData = []\n \n this._calculatePositionsUntilIndex(this.numberOfRows() - 1)\n this._needsDrawingOfVisibleRowsBeforeLayout = YES\n \n this.setNeedsLayout()\n \n }\n \n reloadData() {\n \n this._removeVisibleRows()\n this._removeAllReusableRows()\n \n this._rowPositions = []\n this._highestValidRowPositionIndex = 0\n \n this.loadData()\n \n }\n \n \n highlightChanges(previousData: any[], newData: any[]) {\n \n previousData = previousData.map(dataPoint => JSON.stringify(dataPoint))\n newData = newData.map(dataPoint => JSON.stringify(dataPoint))\n \n const newIndexes: number[] = []\n \n newData.forEach((value, index) => {\n \n if (!previousData.contains(value)) {\n \n newIndexes.push(index)\n \n }\n \n })\n \n newIndexes.forEach(index => {\n \n if (this.isRowWithIndexVisible(index)) {\n this.highlightRowAsNew(this.visibleRowWithIndex(index) as UIView)\n }\n \n })\n \n }\n \n \n highlightRowAsNew(row: UIView) {\n \n \n }\n \n \n invalidateSizeOfRowWithIndex(index: number, animateChange = NO) {\n \n if (this._rowPositions[index]) {\n this._rowPositions[index].isValid = NO\n }\n \n this._highestValidRowPositionIndex = Math.min(this._highestValidRowPositionIndex, index - 1)\n \n // if (index == 0) {\n \n // this._highestValidRowPositionIndex = 0;\n \n // this._rowPositions = [];\n \n // }\n \n this._needsDrawingOfVisibleRowsBeforeLayout = YES\n \n this._shouldAnimateNextLayout = animateChange\n \n }\n \n \n _calculateAllPositions() {\n this._calculatePositionsUntilIndex(this.numberOfRows() - 1)\n }\n \n _calculatePositionsUntilIndex(maxIndex: number) {\n \n var validPositionObject = this._rowPositions[this._highestValidRowPositionIndex]\n if (!IS(validPositionObject)) {\n validPositionObject = {\n bottomY: 0,\n topY: 0,\n isValid: YES\n }\n }\n \n var previousBottomY = validPositionObject.bottomY\n \n if (!this._rowPositions.length) {\n \n this._highestValidRowPositionIndex = -1\n \n }\n \n for (var i = this._highestValidRowPositionIndex + 1; i <= maxIndex; i++) {\n \n var height: number\n \n const rowPositionObject = this._rowPositions[i]\n \n if (IS((rowPositionObject || nil).isValid)) {\n \n height = rowPositionObject.bottomY - rowPositionObject.topY\n \n }\n else {\n \n height = this.heightForRowWithIndex(i)\n \n }\n \n \n const positionObject: UITableViewReusableViewPositionObject = {\n bottomY: previousBottomY + height,\n topY: previousBottomY,\n isValid: YES\n }\n \n if (i < this._rowPositions.length) {\n this._rowPositions[i] = positionObject\n }\n else {\n this._rowPositions.push(positionObject)\n }\n this._highestValidRowPositionIndex = i\n previousBottomY = previousBottomY + height\n \n }\n \n }\n \n \n indexesForVisibleRows(paddingRatio = 0.5): number[] {\n \n const firstVisibleY = this.contentOffset.y - this.bounds.height * paddingRatio\n const lastVisibleY = firstVisibleY + this.bounds.height * (1 + paddingRatio)\n \n const numberOfRows = this.numberOfRows()\n \n if (this.allRowsHaveEqualHeight) {\n \n const rowHeight = this.heightForRowWithIndex(0)\n \n var firstIndex = firstVisibleY / rowHeight\n var lastIndex = lastVisibleY / rowHeight\n \n firstIndex = Math.trunc(firstIndex)\n lastIndex = Math.trunc(lastIndex) + 1\n \n firstIndex = Math.max(firstIndex, 0)\n lastIndex = Math.min(lastIndex, numberOfRows - 1)\n \n var result = []\n for (var i = firstIndex; i < lastIndex + 1; i++) {\n result.push(i)\n }\n return result\n }\n \n var accumulatedHeight = 0\n var result = []\n \n this._calculateAllPositions()\n \n const rowPositions = this._rowPositions\n \n for (var i = 0; i < numberOfRows; i++) {\n \n const height = rowPositions[i].bottomY - rowPositions[i].topY // this.heightForRowWithIndex(i)\n \n accumulatedHeight = accumulatedHeight + height\n if (accumulatedHeight >= firstVisibleY) {\n result.push(i)\n }\n if (accumulatedHeight >= lastVisibleY) {\n break\n }\n \n }\n \n return result\n \n }\n \n \n _removeVisibleRows() {\n \n const visibleRows: UITableViewRowView[] = []\n this._visibleRows.forEach((row: UIView) => {\n \n this._persistedData[row._UITableViewRowIndex as number] = this.persistenceDataItemForRowWithIndex(\n row._UITableViewRowIndex as number,\n row\n )\n row.removeFromSuperview()\n this._removedReusableViews[row?._UITableViewReusabilityIdentifier]?.push(row)\n \n \n })\n this._visibleRows = visibleRows\n \n }\n \n \n _removeAllReusableRows() {\n this._reusableViews.forEach((rows: UIView[]) =>\n rows.forEach((row: UIView) => {\n \n this._persistedData[row._UITableViewRowIndex as number] = this.persistenceDataItemForRowWithIndex(\n row._UITableViewRowIndex as number,\n row\n )\n row.removeFromSuperview()\n \n this._markReusableViewAsUnused(row)\n \n })\n )\n }\n \n \n _markReusableViewAsUnused(row: UIView) {\n if (!this._removedReusableViews[row._UITableViewReusabilityIdentifier].contains(row)) {\n this._removedReusableViews[row._UITableViewReusabilityIdentifier].push(row)\n }\n }\n \n _drawVisibleRows() {\n \n if (!this.isMemberOfViewTree) {\n return\n }\n \n const visibleIndexes = this.indexesForVisibleRows()\n \n const minIndex = visibleIndexes[0]\n const maxIndex = visibleIndexes[visibleIndexes.length - 1]\n \n const removedViews: UITableViewRowView[] = []\n \n const visibleRows: UITableViewRowView[] = []\n this._visibleRows.forEach((row) => {\n if (IS_DEFINED(row._UITableViewRowIndex) && (row._UITableViewRowIndex < minIndex || row._UITableViewRowIndex > maxIndex)) {\n \n //row.removeFromSuperview();\n \n this._persistedData[row._UITableViewRowIndex] = this.persistenceDataItemForRowWithIndex(\n row._UITableViewRowIndex,\n row\n )\n \n this._removedReusableViews[row._UITableViewReusabilityIdentifier].push(row)\n \n removedViews.push(row)\n \n }\n else {\n visibleRows.push(row)\n }\n })\n this._visibleRows = visibleRows\n \n visibleIndexes.forEach((rowIndex: number) => {\n \n if (this.isRowWithIndexVisible(rowIndex)) {\n return\n }\n const view: UITableViewRowView = this.viewForRowWithIndex(rowIndex)\n //view._UITableViewRowIndex = rowIndex;\n this._firstLayoutVisibleRows.push(view)\n this._visibleRows.push(view)\n this.addSubview(view)\n \n })\n \n for (let i = 0; i < removedViews.length; i++) {\n \n const view = removedViews[i]\n if (this._visibleRows.indexOf(view) == -1) {\n \n //this._persistedData[view._UITableViewRowIndex] = this.persistenceDataItemForRowWithIndex(view._UITableViewRowIndex, view);\n view.removeFromSuperview()\n \n //this._removedReusableViews[view._UITableViewReusabilityIdentifier].push(view);\n \n }\n \n }\n \n //this.setNeedsLayout();\n \n }\n \n \n visibleRowWithIndex(rowIndex: number | undefined): UIView {\n for (var i = 0; i < this._visibleRows.length; i++) {\n const row = this._visibleRows[i]\n if (row._UITableViewRowIndex == rowIndex) {\n return row\n }\n }\n return nil\n }\n \n \n isRowWithIndexVisible(rowIndex: number) {\n return IS(this.visibleRowWithIndex(rowIndex))\n }\n \n \n reusableViewForIdentifier(identifier: string, rowIndex: number): UITableViewRowView {\n \n if (!this._removedReusableViews[identifier]) {\n this._removedReusableViews[identifier] = []\n }\n \n if (this._removedReusableViews[identifier] && this._removedReusableViews[identifier].length) {\n \n const view = this._removedReusableViews[identifier].pop() as UITableViewRowView\n view._UITableViewRowIndex = rowIndex\n Object.assign(view, this._persistedData[rowIndex] || this.defaultRowPersistenceDataItem())\n return view\n \n }\n \n if (!this._reusableViews[identifier]) {\n this._reusableViews[identifier] = []\n }\n \n const newView = this.newReusableViewForIdentifier(identifier, this._rowIDIndex) as UITableViewRowView\n this._rowIDIndex = this._rowIDIndex + 1\n \n newView._UITableViewReusabilityIdentifier = identifier\n newView._UITableViewRowIndex = rowIndex\n \n Object.assign(newView, this._persistedData[rowIndex] || this.defaultRowPersistenceDataItem())\n this._reusableViews[identifier].push(newView)\n \n return newView\n \n }\n \n \n // Functions that should be overridden to draw the correct content START\n newReusableViewForIdentifier(identifier: string, rowIDIndex: number): UIView {\n \n const view = new UIButton(this.elementID + \"Row\" + rowIDIndex)\n \n view.stopsPointerEventPropagation = NO\n view.pausesPointerEvents = NO\n \n return view\n \n }\n \n heightForRowWithIndex(index: number): number {\n return 50\n }\n \n numberOfRows() {\n return 10000\n }\n \n defaultRowPersistenceDataItem(): any {\n \n \n }\n \n persistenceDataItemForRowWithIndex(rowIndex: number, row: UIView): any {\n \n \n }\n \n viewForRowWithIndex(rowIndex: number): UITableViewRowView {\n const row = this.reusableViewForIdentifier(\"Row\", rowIndex);\n row._UITableViewRowIndex = rowIndex\n FIRST_OR_NIL((row as unknown as UIButton).titleLabel).text = \"Row \" + rowIndex\n return row\n }\n \n // Functions that should be overridden to draw the correct content END\n \n \n // Functions that trigger redrawing of the content\n override didScrollToPosition(offsetPosition: UIPoint) {\n \n super.didScrollToPosition(offsetPosition)\n \n this.forEachViewInSubtree(function (view: UIView) {\n \n view._isPointerValid = NO\n \n })\n \n if (!this._isDrawVisibleRowsScheduled) {\n \n this._isDrawVisibleRowsScheduled = YES\n \n UIView.runFunctionBeforeNextFrame(function (this: UITableView) {\n \n this._calculateAllPositions()\n \n this._drawVisibleRows()\n \n this.setNeedsLayout()\n \n this._isDrawVisibleRowsScheduled = NO\n \n }.bind(this))\n \n }\n \n }\n \n override wasAddedToViewTree() {\n this.loadData()\n }\n \n override setFrame(rectangle: UIRectangle, zIndex?: number, performUncheckedLayout?: boolean) {\n \n const frame = this.frame\n super.setFrame(rectangle, zIndex, performUncheckedLayout)\n if (frame.isEqualTo(rectangle) && !performUncheckedLayout) {\n return\n }\n \n this._needsDrawingOfVisibleRowsBeforeLayout = YES\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.LanguageChanged && this.reloadsOnLanguageChange) {\n \n this.reloadData()\n \n }\n \n \n }\n \n \n private _layoutAllRows(positions = this._rowPositions) {\n \n const bounds = this.bounds\n \n this._visibleRows.forEach(row => {\n \n const frame = bounds.copy()\n \n const positionObject = positions[row._UITableViewRowIndex!]\n frame.min.y = positionObject.topY\n frame.max.y = positionObject.bottomY\n row.frame = frame\n \n row.style.width = \"\" + (bounds.width - this.sidePadding * 2).integerValue + \"px\"\n row.style.left = \"\" + this.sidePadding.integerValue + \"px\"\n \n \n })\n \n this._fullHeightView.frame = bounds.rectangleWithHeight((positions.lastElement ||\n nil).bottomY).rectangleWithWidth(bounds.width * 0.5)\n \n this._firstLayoutVisibleRows = []\n \n }\n \n private _animateLayoutAllRows() {\n \n UIView.animateViewOrViewsWithDurationDelayAndFunction(\n this._visibleRows,\n this.animationDuration,\n 0,\n undefined,\n function (this: UITableView) {\n \n this._layoutAllRows()\n \n }.bind(this),\n function (this: UITableView) {\n \n // this._calculateAllPositions()\n // this._layoutAllRows()\n \n }.bind(this)\n )\n \n }\n \n \n override layoutSubviews() {\n \n const previousPositions: UITableViewReusableViewPositionObject[] = JSON.parse(JSON.stringify(this._rowPositions))\n \n const previousVisibleRowsLength = this._visibleRows.length\n \n if (this._needsDrawingOfVisibleRowsBeforeLayout) {\n \n //this._calculateAllPositions()\n \n this._drawVisibleRows()\n \n this._needsDrawingOfVisibleRowsBeforeLayout = NO\n \n }\n \n \n super.layoutSubviews()\n \n \n if (!this.numberOfRows() || !this.isMemberOfViewTree) {\n \n return\n \n }\n \n \n if (this._shouldAnimateNextLayout) {\n \n \n // Need to do layout with the previous positions\n \n this._layoutAllRows(previousPositions)\n \n \n if (previousVisibleRowsLength < this._visibleRows.length) {\n \n \n UIView.runFunctionBeforeNextFrame(function (this: UITableView) {\n \n this._animateLayoutAllRows()\n \n }.bind(this))\n \n }\n else {\n \n this._animateLayoutAllRows()\n \n }\n \n \n this._shouldAnimateNextLayout = NO\n \n }\n else {\n \n // if (this._needsDrawingOfVisibleRowsBeforeLayout) {\n \n // this._drawVisibleRows();\n \n // this._needsDrawingOfVisibleRowsBeforeLayout = NO;\n \n // }\n \n this._calculateAllPositions()\n \n this._layoutAllRows()\n \n \n }\n \n \n }\n \n \n override intrinsicContentHeight(constrainingWidth = 0) {\n \n \n var result = 0\n \n this._calculateAllPositions()\n \n if (this._rowPositions.length) {\n \n result = this._rowPositions[this._rowPositions.length - 1].bottomY\n \n }\n \n return result\n \n }\n \n \n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -31,7 +31,7 @@ export declare class UITextField extends UITextView {
31
31
  } & {
32
32
  TextChange: string;
33
33
  };
34
- get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<UITextField>;
34
+ get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<typeof UITextField>;
35
35
  get viewHTMLElement(): HTMLInputElement;
36
36
  set text(text: string);
37
37
  get text(): string;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UITextField.ts"],
4
- "sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { nil, NO, ValueOf, YES } from \"./UIObject\"\nimport { UITextView } from \"./UITextView\"\nimport { UIView, UIViewAddControlEventTargetObject, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UITextField extends UITextView {\n \n _placeholderTextKey?: string\n _defaultPlaceholderText?: string\n \n override _viewHTMLElement!: HTMLInputElement\n \n constructor(elementID?: string, viewHTMLElement = null, type: string | ValueOf<typeof UITextView.type> = UITextView.type.textField) {\n \n super(elementID, type, viewHTMLElement)\n \n this.viewHTMLElement.setAttribute(\"type\", \"text\")\n \n this.backgroundColor = UIColor.whiteColor\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerUpInside,\n (sender, event) => sender.focus()\n )\n \n this.viewHTMLElement.oninput = (event) => {\n this.sendControlEventForKey(UITextField.controlEvent.TextChange, event)\n }\n \n \n this.style.webkitUserSelect = \"text\"\n \n this.nativeSelectionEnabled = YES\n \n this.pausesPointerEvents = NO\n \n \n }\n \n \n static override controlEvent = Object.assign({}, UITextView.controlEvent, {\n \n \"TextChange\": \"TextChange\"\n \n })\n \n \n override get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<UITextField> {\n return (super.controlEventTargetAccumulator as any)\n }\n \n public override get viewHTMLElement() {\n return this._viewHTMLElement\n }\n \n \n public override set text(text: string) {\n \n this.viewHTMLElement.value = text\n \n }\n \n \n public override get text(): string {\n \n return this.viewHTMLElement.value\n \n }\n \n \n public set placeholderText(text: string) {\n \n this.viewHTMLElement.placeholder = text\n \n }\n \n \n public get placeholderText(): string {\n \n return this.viewHTMLElement.placeholder\n \n }\n \n \n setPlaceholderText(key: string, defaultString: string) {\n \n this._placeholderTextKey = key\n this._defaultPlaceholderText = defaultString\n \n const languageName = UICore.languageService.currentLanguageKey\n this.placeholderText = UICore.languageService.stringForKey(key, languageName, defaultString, nil)\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.LanguageChanged || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n \n this._setPlaceholderFromKeyIfPossible()\n \n }\n \n }\n \n \n override willMoveToSuperview(superview: UIView) {\n \n super.willMoveToSuperview(superview)\n \n this._setPlaceholderFromKeyIfPossible()\n \n }\n \n _setPlaceholderFromKeyIfPossible() {\n \n if (this._placeholderTextKey && this._defaultPlaceholderText) {\n \n this.setPlaceholderText(this._placeholderTextKey, this._defaultPlaceholderText)\n \n }\n \n }\n \n \n public get isSecure(): boolean {\n \n const result = (this.viewHTMLElement.type == \"password\")\n \n return result\n \n }\n \n \n \n public set isSecure(secure: boolean) {\n \n var type = \"text\"\n \n if (secure) {\n \n type = \"password\"\n \n }\n \n this.viewHTMLElement.type = type\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\n\n\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AACxB,oBAAuB;AACvB,sBAAsC;AACtC,wBAA2B;AAC3B,oBAAgF;AAGzE,MAAM,eAAN,cAA0B,6BAAW;AAAA,EAOxC,YAAY,WAAoB,kBAAkB,MAAM,OAAiD,6BAAW,KAAK,WAAW;AAEhI,UAAM,WAAW,MAAM,eAAe;AAEtC,SAAK,gBAAgB,aAAa,QAAQ,MAAM;AAEhD,SAAK,kBAAkB,uBAAQ;AAE/B,SAAK;AAAA,MACD,qBAAO,aAAa;AAAA,MACpB,CAAC,QAAQ,UAAU,OAAO,MAAM;AAAA,IACpC;AAEA,SAAK,gBAAgB,UAAU,CAAC,UAAU;AACtC,WAAK,uBAAuB,aAAY,aAAa,YAAY,KAAK;AAAA,IAC1E;AAGA,SAAK,MAAM,mBAAmB;AAE9B,SAAK,yBAAyB;AAE9B,SAAK,sBAAsB;AAAA,EAG/B;AAAA,EAUA,IAAa,gCAAgF;AACzF,WAAQ,MAAM;AAAA,EAClB;AAAA,EAEA,IAAoB,kBAAkB;AAClC,WAAO,KAAK;AAAA,EAChB;AAAA,EAGA,IAAoB,KAAK,MAAc;AAEnC,SAAK,gBAAgB,QAAQ;AAAA,EAEjC;AAAA,EAGA,IAAoB,OAAe;AAE/B,WAAO,KAAK,gBAAgB;AAAA,EAEhC;AAAA,EAGA,IAAW,gBAAgB,MAAc;AAErC,SAAK,gBAAgB,cAAc;AAAA,EAEvC;AAAA,EAGA,IAAW,kBAA0B;AAEjC,WAAO,KAAK,gBAAgB;AAAA,EAEhC;AAAA,EAGA,mBAAmB,KAAa,eAAuB;AAEnD,SAAK,sBAAsB;AAC3B,SAAK,0BAA0B;AAE/B,UAAM,eAAe,qBAAO,gBAAgB;AAC5C,SAAK,kBAAkB,qBAAO,gBAAgB,aAAa,KAAK,cAAc,eAAe,mBAAG;AAAA,EAEpG;AAAA,EAGS,yBAAyB,OAA6B;AAE3D,UAAM,yBAAyB,KAAK;AAEpC,QAAI,MAAM,QAAQ,qBAAO,mBAAmB,mBAAmB,MAAM,QACjE,qBAAO,mBAAmB,iBAAiB;AAE3C,WAAK,iCAAiC;AAAA,IAE1C;AAAA,EAEJ;AAAA,EAGS,oBAAoB,WAAmB;AAE5C,UAAM,oBAAoB,SAAS;AAEnC,SAAK,iCAAiC;AAAA,EAE1C;AAAA,EAEA,mCAAmC;AAE/B,QAAI,KAAK,uBAAuB,KAAK,yBAAyB;AAE1D,WAAK,mBAAmB,KAAK,qBAAqB,KAAK,uBAAuB;AAAA,IAElF;AAAA,EAEJ;AAAA,EAGA,IAAW,WAAoB;AAE3B,UAAM,SAAU,KAAK,gBAAgB,QAAQ;AAE7C,WAAO;AAAA,EAEX;AAAA,EAIA,IAAW,SAAS,QAAiB;AAEjC,QAAI,OAAO;AAEX,QAAI,QAAQ;AAER,aAAO;AAAA,IAEX;AAEA,SAAK,gBAAgB,OAAO;AAAA,EAEhC;AAMJ;AAvJO,IAAM,cAAN;AAAM,YAmCO,eAAe,OAAO,OAAO,CAAC,GAAG,6BAAW,cAAc;AAAA,EAEtE,cAAc;AAElB,CAAC;",
4
+ "sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UICore } from \"./UICore\"\nimport { nil, NO, ValueOf, YES } from \"./UIObject\"\nimport { UITextView } from \"./UITextView\"\nimport { UIView, UIViewAddControlEventTargetObject, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UITextField extends UITextView {\n \n _placeholderTextKey?: string\n _defaultPlaceholderText?: string\n \n override _viewHTMLElement!: HTMLInputElement\n \n constructor(elementID?: string, viewHTMLElement = null, type: string | ValueOf<typeof UITextView.type> = UITextView.type.textField) {\n \n super(elementID, type, viewHTMLElement)\n \n this.viewHTMLElement.setAttribute(\"type\", \"text\")\n \n this.backgroundColor = UIColor.whiteColor\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerUpInside,\n (sender, event) => sender.focus()\n )\n \n this.viewHTMLElement.oninput = (event) => {\n this.sendControlEventForKey(UITextField.controlEvent.TextChange, event)\n }\n \n \n this.style.webkitUserSelect = \"text\"\n \n this.nativeSelectionEnabled = YES\n \n this.pausesPointerEvents = NO\n \n \n }\n \n \n static override controlEvent = Object.assign({}, UITextView.controlEvent, {\n \n \"TextChange\": \"TextChange\"\n \n })\n \n \n override get controlEventTargetAccumulator(): UIViewAddControlEventTargetObject<typeof UITextField> {\n return (super.controlEventTargetAccumulator as any)\n }\n \n public override get viewHTMLElement() {\n return this._viewHTMLElement\n }\n \n \n public override set text(text: string) {\n \n this.viewHTMLElement.value = text\n \n }\n \n \n public override get text(): string {\n \n return this.viewHTMLElement.value\n \n }\n \n \n public set placeholderText(text: string) {\n \n this.viewHTMLElement.placeholder = text\n \n }\n \n \n public get placeholderText(): string {\n \n return this.viewHTMLElement.placeholder\n \n }\n \n \n setPlaceholderText(key: string, defaultString: string) {\n \n this._placeholderTextKey = key\n this._defaultPlaceholderText = defaultString\n \n const languageName = UICore.languageService.currentLanguageKey\n this.placeholderText = UICore.languageService.stringForKey(key, languageName, defaultString, nil)\n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n if (event.name == UIView.broadcastEventName.LanguageChanged || event.name ==\n UIView.broadcastEventName.AddedToViewTree) {\n \n this._setPlaceholderFromKeyIfPossible()\n \n }\n \n }\n \n \n override willMoveToSuperview(superview: UIView) {\n \n super.willMoveToSuperview(superview)\n \n this._setPlaceholderFromKeyIfPossible()\n \n }\n \n _setPlaceholderFromKeyIfPossible() {\n \n if (this._placeholderTextKey && this._defaultPlaceholderText) {\n \n this.setPlaceholderText(this._placeholderTextKey, this._defaultPlaceholderText)\n \n }\n \n }\n \n \n public get isSecure(): boolean {\n \n const result = (this.viewHTMLElement.type == \"password\")\n \n return result\n \n }\n \n \n \n public set isSecure(secure: boolean) {\n \n var type = \"text\"\n \n if (secure) {\n \n type = \"password\"\n \n }\n \n this.viewHTMLElement.type = type\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\n\n\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AACxB,oBAAuB;AACvB,sBAAsC;AACtC,wBAA2B;AAC3B,oBAAgF;AAGzE,MAAM,eAAN,cAA0B,6BAAW;AAAA,EAOxC,YAAY,WAAoB,kBAAkB,MAAM,OAAiD,6BAAW,KAAK,WAAW;AAEhI,UAAM,WAAW,MAAM,eAAe;AAEtC,SAAK,gBAAgB,aAAa,QAAQ,MAAM;AAEhD,SAAK,kBAAkB,uBAAQ;AAE/B,SAAK;AAAA,MACD,qBAAO,aAAa;AAAA,MACpB,CAAC,QAAQ,UAAU,OAAO,MAAM;AAAA,IACpC;AAEA,SAAK,gBAAgB,UAAU,CAAC,UAAU;AACtC,WAAK,uBAAuB,aAAY,aAAa,YAAY,KAAK;AAAA,IAC1E;AAGA,SAAK,MAAM,mBAAmB;AAE9B,SAAK,yBAAyB;AAE9B,SAAK,sBAAsB;AAAA,EAG/B;AAAA,EAUA,IAAa,gCAAuF;AAChG,WAAQ,MAAM;AAAA,EAClB;AAAA,EAEA,IAAoB,kBAAkB;AAClC,WAAO,KAAK;AAAA,EAChB;AAAA,EAGA,IAAoB,KAAK,MAAc;AAEnC,SAAK,gBAAgB,QAAQ;AAAA,EAEjC;AAAA,EAGA,IAAoB,OAAe;AAE/B,WAAO,KAAK,gBAAgB;AAAA,EAEhC;AAAA,EAGA,IAAW,gBAAgB,MAAc;AAErC,SAAK,gBAAgB,cAAc;AAAA,EAEvC;AAAA,EAGA,IAAW,kBAA0B;AAEjC,WAAO,KAAK,gBAAgB;AAAA,EAEhC;AAAA,EAGA,mBAAmB,KAAa,eAAuB;AAEnD,SAAK,sBAAsB;AAC3B,SAAK,0BAA0B;AAE/B,UAAM,eAAe,qBAAO,gBAAgB;AAC5C,SAAK,kBAAkB,qBAAO,gBAAgB,aAAa,KAAK,cAAc,eAAe,mBAAG;AAAA,EAEpG;AAAA,EAGS,yBAAyB,OAA6B;AAE3D,UAAM,yBAAyB,KAAK;AAEpC,QAAI,MAAM,QAAQ,qBAAO,mBAAmB,mBAAmB,MAAM,QACjE,qBAAO,mBAAmB,iBAAiB;AAE3C,WAAK,iCAAiC;AAAA,IAE1C;AAAA,EAEJ;AAAA,EAGS,oBAAoB,WAAmB;AAE5C,UAAM,oBAAoB,SAAS;AAEnC,SAAK,iCAAiC;AAAA,EAE1C;AAAA,EAEA,mCAAmC;AAE/B,QAAI,KAAK,uBAAuB,KAAK,yBAAyB;AAE1D,WAAK,mBAAmB,KAAK,qBAAqB,KAAK,uBAAuB;AAAA,IAElF;AAAA,EAEJ;AAAA,EAGA,IAAW,WAAoB;AAE3B,UAAM,SAAU,KAAK,gBAAgB,QAAQ;AAE7C,WAAO;AAAA,EAEX;AAAA,EAIA,IAAW,SAAS,QAAiB;AAEjC,QAAI,OAAO;AAEX,QAAI,QAAQ;AAER,aAAO;AAAA,IAEX;AAEA,SAAK,gBAAgB,OAAO;AAAA,EAEhC;AAMJ;AAvJO,IAAM,cAAN;AAAM,YAmCO,eAAe,OAAO,OAAO,CAAC,GAAG,6BAAW,cAAc;AAAA,EAEtE,cAAc;AAElB,CAAC;",
6
6
  "names": []
7
7
  }
@@ -115,8 +115,10 @@ const _UITextView = class extends import_UIView.UIView {
115
115
  if (this.viewHTMLElement.innerHTML != this.textPrefix + text + this.textSuffix + notificationText) {
116
116
  this.viewHTMLElement.innerHTML = this.textPrefix + (0, import_UIObject.FIRST)(text, "") + this.textSuffix + notificationText;
117
117
  }
118
- this._intrinsicHeightCache = new import_UIObject.UIObject();
119
- this._intrinsicWidthCache = new import_UIObject.UIObject();
118
+ if (this.changesOften) {
119
+ this._intrinsicHeightCache = new import_UIObject.UIObject();
120
+ this._intrinsicWidthCache = new import_UIObject.UIObject();
121
+ }
120
122
  this.setNeedsLayout();
121
123
  }
122
124
  set innerHTML(innerHTML) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UITextView.ts"],
4
- "sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { FIRST, IS_LIKE_NULL, nil, NO, UIObject, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport type { ValueOf } from \"./UIObject\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UITextView extends UIView {\n \n \n _textColor: UIColor = UITextView.defaultTextColor\n _textAlignment?: ValueOf<typeof UITextView.textAlignment>\n \n _isSingleLine = YES\n \n textPrefix = \"\"\n textSuffix = \"\"\n \n _notificationAmount = 0\n \n _minFontSize?: number\n _maxFontSize?: number\n \n _automaticFontSizeSelection = NO\n \n changesOften = NO\n \n static defaultTextColor = UIColor.blackColor\n static notificationTextColor = UIColor.redColor\n \n static _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n static _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n \n static _ptToPx: number\n static _pxToPt: number\n _text?: string\n \n \n constructor(elementID?: string, textViewType: string | ValueOf<typeof UITextView.type> = UITextView.type.paragraph, viewHTMLElement = null) {\n \n super(elementID, viewHTMLElement, textViewType)\n \n this.text = \"\"\n \n this.style.overflow = \"hidden\"\n this.style.textOverflow = \"ellipsis\"\n this.isSingleLine = YES\n \n this.textColor = this.textColor\n \n this.userInteractionEnabled = YES\n \n \n if (textViewType == UITextView.type.textArea) {\n \n this.pausesPointerEvents = YES\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerUpInside,\n (sender, event) => sender.focus()\n )\n \n \n }\n \n \n }\n \n \n static _determinePXAndPTRatios() {\n \n if (UITextView._ptToPx) {\n return\n }\n \n const o = document.createElement(\"div\")\n o.style.width = \"1000pt\"\n document.body.appendChild(o)\n UITextView._ptToPx = o.clientWidth / 1000\n document.body.removeChild(o)\n UITextView._pxToPt = 1 / UITextView._ptToPx\n \n }\n \n \n static type = {\n \n \"paragraph\": \"p\",\n \"header1\": \"h1\",\n \"header2\": \"h2\",\n \"header3\": \"h3\",\n \"header4\": \"h4\",\n \"header5\": \"h5\",\n \"header6\": \"h6\",\n \"textArea\": \"textarea\",\n \"textField\": \"input\",\n \"span\": \"span\",\n \"label\": \"label\"\n \n } as const\n \n \n static textAlignment = {\n \n \"left\": \"left\",\n \"center\": \"center\",\n \"right\": \"right\",\n \"justify\": \"justify\"\n \n } as const\n \n get textAlignment() {\n // @ts-ignore\n return this.style.textAlign\n }\n \n set textAlignment(textAlignment: ValueOf<typeof UITextView.textAlignment>) {\n this._textAlignment = textAlignment\n this.style.textAlign = textAlignment\n }\n \n \n get textColor() {\n return this._textColor\n }\n \n set textColor(color: UIColor) {\n \n this._textColor = color || UITextView.defaultTextColor\n this.style.color = this._textColor.stringValue\n \n }\n \n \n get isSingleLine() {\n \n return this._isSingleLine\n \n }\n \n set isSingleLine(isSingleLine: boolean) {\n \n this._isSingleLine = isSingleLine\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n if (isSingleLine) {\n \n this.style.whiteSpace = \"pre\"\n \n return\n \n }\n \n this.style.whiteSpace = \"pre-wrap\"\n \n }\n \n \n get notificationAmount() {\n \n return this._notificationAmount\n \n }\n \n set notificationAmount(notificationAmount: number) {\n \n if (this._notificationAmount == notificationAmount) {\n \n return\n \n }\n \n this._notificationAmount = notificationAmount\n \n this.text = this.text\n \n this.setNeedsLayoutUpToRootView()\n \n this.notificationAmountDidChange(notificationAmount)\n \n }\n \n notificationAmountDidChange(notificationAmount: number) {\n \n \n }\n \n \n get text() {\n \n return (this._text || this.viewHTMLElement.innerHTML)\n \n }\n \n set text(text) {\n \n this._text = text\n \n var notificationText = \"\"\n \n if (this.notificationAmount) {\n \n notificationText = \"<span style=\\\"color: \" + UITextView.notificationTextColor.stringValue + \";\\\">\" +\n (\" (\" + this.notificationAmount + \")\").bold() + \"</span>\"\n \n }\n \n if (this.viewHTMLElement.innerHTML != this.textPrefix + text + this.textSuffix + notificationText) {\n \n this.viewHTMLElement.innerHTML = this.textPrefix + FIRST(text, \"\") + this.textSuffix + notificationText\n \n }\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n this.setNeedsLayout()\n \n }\n \n override set innerHTML(innerHTML: string) {\n \n this.text = innerHTML\n \n }\n \n override get innerHTML() {\n \n return this.viewHTMLElement.innerHTML\n \n }\n \n \n setText(key: string, defaultString: string, parameters?: { [x: string]: string | UILocalizedTextObject }) {\n \n this.setInnerHTML(key, defaultString, parameters)\n \n }\n \n \n get fontSize() {\n \n const style = window.getComputedStyle(this.viewHTMLElement, null).fontSize\n \n const result = (parseFloat(style) * UITextView._pxToPt)\n \n return result\n \n }\n \n set fontSize(fontSize: number) {\n \n \n this.style.fontSize = \"\" + fontSize + \"pt\"\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any // MEETOD LUUA!!!!\n \n \n }\n \n \n useAutomaticFontSize(minFontSize: number = nil, maxFontSize: number = nil) {\n \n \n this._automaticFontSizeSelection = YES\n \n \n this._minFontSize = minFontSize\n \n this._maxFontSize = maxFontSize\n \n this.setNeedsLayout()\n \n \n }\n \n \n static automaticallyCalculatedFontSize(\n bounds: UIRectangle,\n currentSize: UIRectangle,\n currentFontSize: number,\n minFontSize?: number,\n maxFontSize?: number\n ) {\n \n minFontSize = FIRST(minFontSize, 1)\n \n maxFontSize = FIRST(maxFontSize, 100000000000)\n \n \n const heightMultiplier = bounds.height / (currentSize.height + 1)\n \n const widthMultiplier = bounds.width / (currentSize.width + 1)\n \n \n var multiplier = heightMultiplier\n \n if (heightMultiplier > widthMultiplier) {\n \n multiplier = widthMultiplier\n \n \n }\n \n \n const maxFittingFontSize = currentFontSize * multiplier\n \n \n if (maxFittingFontSize > maxFontSize) {\n \n return maxFontSize\n \n }\n \n if (minFontSize > maxFittingFontSize) {\n \n return minFontSize\n \n }\n \n \n return maxFittingFontSize\n \n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n }\n \n \n override willMoveToSuperview(superview: UIView) {\n \n super.willMoveToSuperview(superview)\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n \n if (this._automaticFontSizeSelection) {\n \n this.fontSize = UITextView.automaticallyCalculatedFontSize(\n new UIRectangle(0, 0, 1 *\n this.viewHTMLElement.offsetHeight, 1 *\n this.viewHTMLElement.offsetWidth),\n this.intrinsicContentSize(),\n this.fontSize,\n this._minFontSize,\n this._maxFontSize\n )\n \n \n }\n \n \n }\n \n \n override intrinsicContentHeight(constrainingWidth = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this.computedStyle.font).replace(new RegExp(\n \"\\\\.\",\n \"g\"\n ), \"_\") + \".\" +\n (\"\" + constrainingWidth).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicHeightCache\n \n if (this.changesOften) {\n \n // @ts-ignore\n cacheObject = this._intrinsicHeightCache\n \n \n }\n \n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n \n if (IS_LIKE_NULL(result)) {\n \n result = super.intrinsicContentHeight(constrainingWidth)\n \n cacheObject.setValueForKeyPath(keyPath, result)\n \n \n }\n \n \n return result\n \n }\n \n override intrinsicContentWidth(constrainingHeight = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this.computedStyle.font).replace(new RegExp(\n \"\\\\.\",\n \"g\"\n ), \"_\") + \".\" +\n (\"\" + constrainingHeight).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicWidthCache\n \n if (this.changesOften) {\n \n // @ts-ignore\n cacheObject = this._intrinsicWidthCache\n \n \n }\n \n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n \n if (IS_LIKE_NULL(result)) {\n \n result = super.intrinsicContentWidth(constrainingHeight)\n \n cacheObject.setValueForKeyPath(keyPath, result)\n \n \n }\n \n \n return result\n \n }\n \n \n override intrinsicContentSize() {\n \n // This works but is slow\n const result = this.intrinsicContentSizeWithConstraints(nil, nil)\n \n return result\n \n }\n \n \n}\n\n\nUITextView._determinePXAndPTRatios()\n\n\n// /**\n// * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n// * \n// * @param {String} text The text to be rendered.\n// * @param {String} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n// * \n// * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n// */\n// function getTextMetrics(text, font) {\n// // re-use canvas object for better performance\n// var canvas = getTextMetrics.canvas || (getTextMetrics.canvas = document.createElement(\"canvas\"));\n// var context = canvas.getContext(\"2d\");\n// context.font = font;\n// var metrics = context.measureText(text);\n// return metrics;\n// }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { UIColor } from \"./UIColor\"\nimport { UILocalizedTextObject } from \"./UIInterfaces\"\nimport { FIRST, IS_LIKE_NULL, nil, NO, UIObject, YES } from \"./UIObject\"\nimport { UIRectangle } from \"./UIRectangle\"\nimport type { ValueOf } from \"./UIObject\"\nimport { UIView, UIViewBroadcastEvent } from \"./UIView\"\n\n\nexport class UITextView extends UIView {\n \n \n _textColor: UIColor = UITextView.defaultTextColor\n _textAlignment?: ValueOf<typeof UITextView.textAlignment>\n \n _isSingleLine = YES\n \n textPrefix = \"\"\n textSuffix = \"\"\n \n _notificationAmount = 0\n \n _minFontSize?: number\n _maxFontSize?: number\n \n _automaticFontSizeSelection = NO\n \n changesOften = NO\n \n static defaultTextColor = UIColor.blackColor\n static notificationTextColor = UIColor.redColor\n \n static _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n static _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n _intrinsicHeightCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n _intrinsicWidthCache: { [x: string]: { [x: string]: number; }; } & UIObject = new UIObject() as any\n \n \n static _ptToPx: number\n static _pxToPt: number\n _text?: string\n \n \n constructor(\n elementID?: string,\n textViewType: string | ValueOf<typeof UITextView.type> = UITextView.type.paragraph,\n viewHTMLElement = null\n ) {\n \n super(elementID, viewHTMLElement, textViewType)\n \n this.text = \"\"\n \n this.style.overflow = \"hidden\"\n this.style.textOverflow = \"ellipsis\"\n this.isSingleLine = YES\n \n this.textColor = this.textColor\n \n this.userInteractionEnabled = YES\n \n \n if (textViewType == UITextView.type.textArea) {\n \n this.pausesPointerEvents = YES\n \n this.addTargetForControlEvent(\n UIView.controlEvent.PointerUpInside,\n (sender, event) => sender.focus()\n )\n \n \n }\n \n \n }\n \n \n static _determinePXAndPTRatios() {\n \n if (UITextView._ptToPx) {\n return\n }\n \n const o = document.createElement(\"div\")\n o.style.width = \"1000pt\"\n document.body.appendChild(o)\n UITextView._ptToPx = o.clientWidth / 1000\n document.body.removeChild(o)\n UITextView._pxToPt = 1 / UITextView._ptToPx\n \n }\n \n \n static type = {\n \n \"paragraph\": \"p\",\n \"header1\": \"h1\",\n \"header2\": \"h2\",\n \"header3\": \"h3\",\n \"header4\": \"h4\",\n \"header5\": \"h5\",\n \"header6\": \"h6\",\n \"textArea\": \"textarea\",\n \"textField\": \"input\",\n \"span\": \"span\",\n \"label\": \"label\"\n \n } as const\n \n \n static textAlignment = {\n \n \"left\": \"left\",\n \"center\": \"center\",\n \"right\": \"right\",\n \"justify\": \"justify\"\n \n } as const\n \n get textAlignment() {\n // @ts-ignore\n return this.style.textAlign\n }\n \n set textAlignment(textAlignment: ValueOf<typeof UITextView.textAlignment>) {\n this._textAlignment = textAlignment\n this.style.textAlign = textAlignment\n }\n \n \n get textColor() {\n return this._textColor\n }\n \n set textColor(color: UIColor) {\n \n this._textColor = color || UITextView.defaultTextColor\n this.style.color = this._textColor.stringValue\n \n }\n \n \n get isSingleLine() {\n \n return this._isSingleLine\n \n }\n \n set isSingleLine(isSingleLine: boolean) {\n \n this._isSingleLine = isSingleLine\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n if (isSingleLine) {\n \n this.style.whiteSpace = \"pre\"\n \n return\n \n }\n \n this.style.whiteSpace = \"pre-wrap\"\n \n }\n \n \n get notificationAmount() {\n \n return this._notificationAmount\n \n }\n \n set notificationAmount(notificationAmount: number) {\n \n if (this._notificationAmount == notificationAmount) {\n \n return\n \n }\n \n this._notificationAmount = notificationAmount\n \n this.text = this.text\n \n this.setNeedsLayoutUpToRootView()\n \n this.notificationAmountDidChange(notificationAmount)\n \n }\n \n notificationAmountDidChange(notificationAmount: number) {\n \n \n }\n \n \n get text() {\n \n return (this._text || this.viewHTMLElement.innerHTML)\n \n }\n \n set text(text) {\n \n this._text = text\n \n var notificationText = \"\"\n \n if (this.notificationAmount) {\n \n notificationText = \"<span style=\\\"color: \" + UITextView.notificationTextColor.stringValue + \";\\\">\" +\n (\" (\" + this.notificationAmount + \")\").bold() + \"</span>\"\n \n }\n \n if (this.viewHTMLElement.innerHTML != this.textPrefix + text + this.textSuffix + notificationText) {\n \n this.viewHTMLElement.innerHTML = this.textPrefix + FIRST(text, \"\") + this.textSuffix + notificationText\n \n }\n \n if (this.changesOften) {\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any\n \n }\n \n this.setNeedsLayout()\n \n }\n \n override set innerHTML(innerHTML: string) {\n \n this.text = innerHTML\n \n }\n \n override get innerHTML() {\n \n return this.viewHTMLElement.innerHTML\n \n }\n \n \n setText(key: string, defaultString: string, parameters?: { [x: string]: string | UILocalizedTextObject }) {\n \n this.setInnerHTML(key, defaultString, parameters)\n \n }\n \n \n get fontSize() {\n \n const style = window.getComputedStyle(this.viewHTMLElement, null).fontSize\n \n const result = (parseFloat(style) * UITextView._pxToPt)\n \n return result\n \n }\n \n set fontSize(fontSize: number) {\n \n \n this.style.fontSize = \"\" + fontSize + \"pt\"\n \n this._intrinsicHeightCache = new UIObject() as any\n this._intrinsicWidthCache = new UIObject() as any // MEETOD LUUA!!!!\n \n \n }\n \n \n useAutomaticFontSize(minFontSize: number = nil, maxFontSize: number = nil) {\n \n \n this._automaticFontSizeSelection = YES\n \n \n this._minFontSize = minFontSize\n \n this._maxFontSize = maxFontSize\n \n this.setNeedsLayout()\n \n \n }\n \n \n static automaticallyCalculatedFontSize(\n bounds: UIRectangle,\n currentSize: UIRectangle,\n currentFontSize: number,\n minFontSize?: number,\n maxFontSize?: number\n ) {\n \n minFontSize = FIRST(minFontSize, 1)\n \n maxFontSize = FIRST(maxFontSize, 100000000000)\n \n \n const heightMultiplier = bounds.height / (currentSize.height + 1)\n \n const widthMultiplier = bounds.width / (currentSize.width + 1)\n \n \n var multiplier = heightMultiplier\n \n if (heightMultiplier > widthMultiplier) {\n \n multiplier = widthMultiplier\n \n \n }\n \n \n const maxFittingFontSize = currentFontSize * multiplier\n \n \n if (maxFittingFontSize > maxFontSize) {\n \n return maxFontSize\n \n }\n \n if (minFontSize > maxFittingFontSize) {\n \n return minFontSize\n \n }\n \n \n return maxFittingFontSize\n \n \n }\n \n \n override didReceiveBroadcastEvent(event: UIViewBroadcastEvent) {\n \n super.didReceiveBroadcastEvent(event)\n \n }\n \n \n override willMoveToSuperview(superview: UIView) {\n \n super.willMoveToSuperview(superview)\n \n }\n \n \n override layoutSubviews() {\n \n super.layoutSubviews()\n \n \n if (this._automaticFontSizeSelection) {\n \n this.fontSize = UITextView.automaticallyCalculatedFontSize(\n new UIRectangle(0, 0, 1 *\n this.viewHTMLElement.offsetHeight, 1 *\n this.viewHTMLElement.offsetWidth),\n this.intrinsicContentSize(),\n this.fontSize,\n this._minFontSize,\n this._maxFontSize\n )\n \n \n }\n \n \n }\n \n \n override intrinsicContentHeight(constrainingWidth = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this.computedStyle.font).replace(new RegExp(\n \"\\\\.\",\n \"g\"\n ), \"_\") + \".\" +\n (\"\" + constrainingWidth).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicHeightCache\n \n if (this.changesOften) {\n \n // @ts-ignore\n cacheObject = this._intrinsicHeightCache\n \n \n }\n \n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n \n if (IS_LIKE_NULL(result)) {\n \n result = super.intrinsicContentHeight(constrainingWidth)\n \n cacheObject.setValueForKeyPath(keyPath, result)\n \n \n }\n \n \n return result\n \n }\n \n override intrinsicContentWidth(constrainingHeight = 0) {\n \n const keyPath = (this.viewHTMLElement.innerHTML + \"_csf_\" + this.computedStyle.font).replace(new RegExp(\n \"\\\\.\",\n \"g\"\n ), \"_\") + \".\" +\n (\"\" + constrainingHeight).replace(new RegExp(\"\\\\.\", \"g\"), \"_\")\n \n let cacheObject = UITextView._intrinsicWidthCache\n \n if (this.changesOften) {\n \n // @ts-ignore\n cacheObject = this._intrinsicWidthCache\n \n \n }\n \n \n var result = cacheObject.valueForKeyPath(keyPath)\n \n \n if (IS_LIKE_NULL(result)) {\n \n result = super.intrinsicContentWidth(constrainingHeight)\n \n cacheObject.setValueForKeyPath(keyPath, result)\n \n \n }\n \n \n return result\n \n }\n \n \n override intrinsicContentSize() {\n \n // This works but is slow\n const result = this.intrinsicContentSizeWithConstraints(nil, nil)\n \n return result\n \n }\n \n \n}\n\n\nUITextView._determinePXAndPTRatios()\n\n\n// /**\n// * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n// * \n// * @param {String} text The text to be rendered.\n// * @param {String} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n// * \n// * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n// */\n// function getTextMetrics(text, font) {\n// // re-use canvas object for better performance\n// var canvas = getTextMetrics.canvas || (getTextMetrics.canvas = document.createElement(\"canvas\"));\n// var context = canvas.getContext(\"2d\");\n// context.font = font;\n// var metrics = context.measureText(text);\n// return metrics;\n// }\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -37,6 +37,11 @@ declare module AutoLayout {
37
37
  GEQ = 2
38
38
  }
39
39
  }
40
+ declare global {
41
+ interface HTMLElement {
42
+ UIView?: UIView;
43
+ }
44
+ }
40
45
  export interface LooseObject {
41
46
  [key: string]: any;
42
47
  }
@@ -118,7 +123,7 @@ export declare class UIView extends UIObject {
118
123
  static _pageScale: number;
119
124
  _scale: number;
120
125
  isInternalScaling: boolean;
121
- private _resizeObserver;
126
+ static resizeObserver: ResizeObserver;
122
127
  private _isMovable;
123
128
  makeNotMovable?: () => void;
124
129
  private _isResizable;
@@ -130,6 +135,8 @@ export declare class UIView extends UIObject {
130
135
  static _onWindowTouchMove: (event: TouchEvent) => void;
131
136
  static _onWindowMouseMove: (event: MouseEvent) => void;
132
137
  static _onWindowMouseup: (event: MouseEvent) => void;
138
+ private _resizeObserverEntry?;
139
+ private _intrinsicSizesCache;
133
140
  constructor(elementID?: string, viewHTMLElement?: HTMLElement & LooseObject | null, elementType?: string | null, initViewData?: any);
134
141
  static get nextIndex(): number;
135
142
  static get pageHeight(): number;
@@ -198,7 +205,8 @@ export declare class UIView extends UIObject {
198
205
  }, zIndex?: number, performUncheckedLayout?: boolean): void;
199
206
  get bounds(): UIRectangle;
200
207
  set bounds(rectangle: UIRectangle);
201
- boundsDidChange(): void;
208
+ boundsDidChange(bounds: UIRectangle): void;
209
+ didResize(entry: ResizeObserverEntry): void;
202
210
  get frameTransform(): string;
203
211
  set frameTransform(value: string);
204
212
  setPosition(left?: number | string, right?: number | string, bottom?: number | string, top?: number | string, height?: number | string, width?: number | string): void;
@@ -275,7 +283,7 @@ export declare class UIView extends UIObject {
275
283
  get viewAboveThisView(): UIView;
276
284
  addSubview(view: UIView, aboveView?: UIView): void;
277
285
  addSubviews(views: UIView[]): void;
278
- addedAsSubviewToView(view: UIView, aboveView?: UIView): this;
286
+ addedAsSubviewToView(view: UIView | undefined, aboveView?: UIView): this;
279
287
  moveToBottomOfSuperview(): void;
280
288
  moveToTopOfSuperview(): void;
281
289
  removeFromSuperview(): void;
@@ -286,6 +294,7 @@ export declare class UIView extends UIObject {
286
294
  wasRemovedFromViewTree(): void;
287
295
  get isMemberOfViewTree(): boolean;
288
296
  get withAllSuperviews(): UIView[];
297
+ get elementWithAllSuperviewElements(): HTMLElement[];
289
298
  setNeedsLayoutOnAllSuperviews(): void;
290
299
  setNeedsLayoutUpToRootView(): void;
291
300
  focus(): void;