uicore-ts 1.1.26 → 1.1.28

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.
@@ -6,6 +6,10 @@ export declare class UIRectangle extends UIObject {
6
6
  rectanglePointDidChange?: (b: any) => void;
7
7
  max: UIPoint;
8
8
  min: UIPoint;
9
+ minHeight?: number;
10
+ maxHeight?: number;
11
+ minWidth?: number;
12
+ maxWidth?: number;
9
13
  constructor(x?: number, y?: number, height?: number, width?: number);
10
14
  copy(): UIRectangle;
11
15
  isEqualTo(rectangle: UIRectangle | null | undefined): boolean;
@@ -70,10 +74,15 @@ export declare class UIRectangle extends UIObject {
70
74
  distributeViewsAlongHeight(views: UIView[], weights?: number | number[], paddings?: number | number[], absoluteHeights?: number | number[]): this;
71
75
  distributeViewsEquallyAlongWidth(views: UIView[], padding: number): this;
72
76
  distributeViewsEquallyAlongHeight(views: UIView[], padding: number): this;
73
- rectangleForNextRow(padding?: number, height?: number | ((constrainingWidth: number) => number)): UIRectangle;
74
- rectangleForNextColumn(padding?: number, width?: number | ((constrainingHeight: number) => number)): UIRectangle;
75
- rectangleForPreviousRow(padding?: number): UIRectangle;
76
- rectangleForPreviousColumn(padding?: number): UIRectangle;
77
+ rectangleForNextRow(padding?: number, height?: number | ((constrainingWidth: number) => number) | UIView): UIRectangle;
78
+ rectangleForNextColumn(padding?: number, width?: number | ((constrainingHeight: number) => number) | UIView): UIRectangle;
79
+ rectangleForPreviousRow(padding?: number, height?: number | ((constrainingWidth: number) => number) | UIView): UIRectangle;
80
+ rectangleForPreviousColumn(padding?: number, width?: number | ((constrainingHeight: number) => number) | UIView): UIRectangle;
81
+ rectangleWithIntrinsicContentSizeForView(view: UIView, centeredOnXPosition?: number, centeredOnYPosition?: number): UIRectangle;
82
+ rectangleWithIntrinsicContentHeightForView(view: UIView, centeredOnPosition?: number): UIRectangle;
83
+ rectangleWithIntrinsicContentWidthForView(view: UIView, centeredOnPosition?: number): UIRectangle;
84
+ settingMinSizes(minHeight?: number, minWidth?: number): this;
85
+ settingMaxSizes(maxHeight?: number, maxWidth?: number): this;
77
86
  assignedAsFrameOfView(view: UIView): this;
78
87
  static boundingBoxForPoints(points: string | any[]): UIRectangle;
79
88
  beginUpdates(): void;
@@ -23,6 +23,7 @@ __export(UIRectangle_exports, {
23
23
  module.exports = __toCommonJS(UIRectangle_exports);
24
24
  var import_UIObject = require("./UIObject");
25
25
  var import_UIPoint = require("./UIPoint");
26
+ var import_UIView = require("./UIView");
26
27
  class UIRectangle extends import_UIObject.UIObject {
27
28
  constructor(x = 0, y = 0, height = 0, width = 0) {
28
29
  super();
@@ -441,6 +442,9 @@ class UIRectangle extends import_UIObject.UIObject {
441
442
  if (height instanceof Function) {
442
443
  height = height(this.width);
443
444
  }
445
+ if (height instanceof import_UIView.UIView) {
446
+ height = height.intrinsicContentHeight(this.width);
447
+ }
444
448
  const result = this.rectangleWithY(this.max.y + padding);
445
449
  if (height != this.height) {
446
450
  result.height = height;
@@ -451,17 +455,60 @@ class UIRectangle extends import_UIObject.UIObject {
451
455
  if (width instanceof Function) {
452
456
  width = width(this.height);
453
457
  }
458
+ if (width instanceof import_UIView.UIView) {
459
+ width = width.intrinsicContentWidth(this.height);
460
+ }
454
461
  const result = this.rectangleWithX(this.max.x + padding);
455
462
  if (width != this.width) {
456
463
  result.width = width;
457
464
  }
458
465
  return result;
459
466
  }
460
- rectangleForPreviousRow(padding = 0) {
461
- return this.rectangleWithY(this.min.y - this.height - padding);
467
+ rectangleForPreviousRow(padding = 0, height = this.height) {
468
+ if (height instanceof Function) {
469
+ height = height(this.width);
470
+ }
471
+ if (height instanceof import_UIView.UIView) {
472
+ height = height.intrinsicContentHeight(this.width);
473
+ }
474
+ const result = this.rectangleWithY(this.min.y - height - padding);
475
+ if (height != this.height) {
476
+ result.height = height;
477
+ }
478
+ return result;
462
479
  }
463
- rectangleForPreviousColumn(padding = 0) {
464
- return this.rectangleWithX(this.min.x - this.width - padding);
480
+ rectangleForPreviousColumn(padding = 0, width = this.width) {
481
+ if (width instanceof Function) {
482
+ width = width(this.height);
483
+ }
484
+ if (width instanceof import_UIView.UIView) {
485
+ width = width.intrinsicContentWidth(this.height);
486
+ }
487
+ const result = this.rectangleWithX(this.min.x - width - padding);
488
+ if (width != this.width) {
489
+ result.width = width;
490
+ }
491
+ return result;
492
+ }
493
+ rectangleWithIntrinsicContentSizeForView(view, centeredOnXPosition = 0, centeredOnYPosition = 0) {
494
+ const intrinsicContentSize = view.intrinsicContentSize();
495
+ return this.rectangleWithHeight(intrinsicContentSize.height, centeredOnYPosition).rectangleWithWidth(intrinsicContentSize.width, centeredOnXPosition);
496
+ }
497
+ rectangleWithIntrinsicContentHeightForView(view, centeredOnPosition = 0) {
498
+ return this.rectangleWithHeight(view.intrinsicContentHeight(this.width), centeredOnPosition);
499
+ }
500
+ rectangleWithIntrinsicContentWidthForView(view, centeredOnPosition = 0) {
501
+ return this.rectangleWithWidth(view.intrinsicContentWidth(this.height), centeredOnPosition);
502
+ }
503
+ settingMinSizes(minHeight, minWidth) {
504
+ this.minHeight = minHeight;
505
+ this.minWidth = minWidth;
506
+ return this;
507
+ }
508
+ settingMaxSizes(maxHeight, maxWidth) {
509
+ this.maxHeight = maxHeight;
510
+ this.maxWidth = maxWidth;
511
+ return this;
465
512
  }
466
513
  assignedAsFrameOfView(view) {
467
514
  view.frame = this;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../scripts/UIRectangle.ts"],
4
- "sourcesContent": ["import { FIRST_OR_NIL, IS, IS_NIL, IS_NOT_NIL, nil, NO, UIObject, YES } from \"./UIObject\"\nimport { UIPoint } from \"./UIPoint\"\nimport { UIView } from \"./UIView\"\n\n\nexport class UIRectangle extends UIObject {\n \n _isBeingUpdated: boolean\n rectanglePointDidChange?: (b: any) => void\n max: UIPoint\n min: UIPoint\n \n \n constructor(x: number = 0, y: number = 0, height: number = 0, width: number = 0) {\n \n super()\n \n this.min = new UIPoint(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY)\n this.max = new UIPoint(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY)\n \n this.min.didChange = (point) => {\n this.rectanglePointDidChange?.(point)\n this._rectanglePointDidChange()\n }\n this.max.didChange = (point) => {\n this.rectanglePointDidChange?.(point)\n this._rectanglePointDidChange()\n }\n \n this._isBeingUpdated = NO\n \n this.min = new UIPoint(x, y)\n this.max = new UIPoint(x + width, y + height)\n \n if (IS_NIL(height)) {\n this.max.y = height\n }\n \n if (IS_NIL(width)) {\n this.max.x = width\n }\n \n }\n \n \n copy() {\n return new UIRectangle(this.x, this.y, this.height, this.width)\n }\n \n isEqualTo(rectangle: UIRectangle | null | undefined) {\n return (IS(rectangle) && this.min.isEqualTo(rectangle.min) && this.max.isEqualTo(rectangle.max))\n }\n \n static zero() {\n return new UIRectangle(0, 0, 0, 0)\n }\n \n containsPoint(point: UIPoint) {\n return this.min.x <= point.x && this.min.y <= point.y &&\n point.x <= this.max.x && point.y <= this.max.y\n }\n \n updateByAddingPoint(point: UIPoint) {\n \n if (!point) {\n point = new UIPoint(0, 0)\n }\n \n this.beginUpdates()\n \n const min = this.min.copy()\n if (min.x === nil) {\n min.x = this.max.x\n }\n if (min.y === nil) {\n min.y = this.max.y\n }\n \n const max = this.max.copy()\n if (max.x === nil) {\n max.x = this.min.x\n }\n if (max.y === nil) {\n max.y = this.min.y\n }\n \n this.min.x = Math.min(min.x, point.x)\n this.min.y = Math.min(min.y, point.y)\n this.max.x = Math.max(max.x, point.x)\n this.max.y = Math.max(max.y, point.y)\n \n this.finishUpdates()\n \n }\n \n scale(scale: number) {\n if (IS_NOT_NIL(this.max.y)) {\n this.height = this.height * scale\n }\n if (IS_NOT_NIL(this.max.x)) {\n this.width = this.width * scale\n }\n }\n \n get height() {\n if (this.max.y === nil) {\n return nil\n }\n return this.max.y - this.min.y\n }\n \n set height(height: number) {\n this.max.y = this.min.y + height\n }\n \n \n get width() {\n if (this.max.x === nil) {\n return nil\n }\n return this.max.x - this.min.x\n }\n \n set width(width: number) {\n this.max.x = this.min.x + width\n }\n \n \n get x() {\n return this.min.x\n }\n \n set x(x: number) {\n \n this.beginUpdates()\n \n const width = this.width\n this.min.x = x\n this.max.x = this.min.x + width\n \n this.finishUpdates()\n \n }\n \n \n get y() {\n return this.min.y\n }\n \n \n set y(y: number) {\n \n this.beginUpdates()\n \n const height = this.height\n this.min.y = y\n this.max.y = this.min.y + height\n \n this.finishUpdates()\n \n }\n \n \n get topLeft() {\n return this.min.copy()\n }\n \n get topRight() {\n return new UIPoint(this.max.x, this.y)\n }\n \n get bottomLeft() {\n return new UIPoint(this.x, this.max.y)\n }\n \n get bottomRight() {\n return this.max.copy()\n }\n \n \n get center() {\n return this.min.copy().add(this.min.to(this.max).scale(0.5))\n }\n \n set center(center: UIPoint) {\n const offset = this.center.to(center)\n this.offsetByPoint(offset)\n }\n \n offsetByPoint(offset: UIPoint) {\n this.min.add(offset)\n this.max.add(offset)\n \n return this\n }\n \n \n concatenateWithRectangle(rectangle: UIRectangle) {\n this.updateByAddingPoint(rectangle.bottomRight)\n this.updateByAddingPoint(rectangle.topLeft)\n return this\n }\n \n rectangleByConcatenatingWithRectangle(rectangle: UIRectangle) {\n return this.copy().concatenateWithRectangle(rectangle)\n }\n \n \n intersectionRectangleWithRectangle(rectangle: UIRectangle): UIRectangle {\n \n const result = this.copy()\n \n result.beginUpdates()\n \n const min = result.min\n if (min.x === nil) {\n min.x = rectangle.max.x - Math.min(result.width, rectangle.width)\n }\n if (min.y === nil) {\n min.y = rectangle.max.y - Math.min(result.height, rectangle.height)\n }\n \n const max = result.max\n if (max.x === nil) {\n max.x = rectangle.min.x + Math.min(result.width, rectangle.width)\n }\n if (max.y === nil) {\n max.y = rectangle.min.y + Math.min(result.height, rectangle.height)\n }\n \n result.min.x = Math.max(result.min.x, rectangle.min.x)\n result.min.y = Math.max(result.min.y, rectangle.min.y)\n result.max.x = Math.min(result.max.x, rectangle.max.x)\n result.max.y = Math.min(result.max.y, rectangle.max.y)\n \n \n if (result.height < 0) {\n \n const averageY = (this.center.y + rectangle.center.y) * 0.5\n result.min.y = averageY\n result.max.y = averageY\n \n }\n \n if (result.width < 0) {\n \n const averageX = (this.center.x + rectangle.center.x) * 0.5\n result.min.x = averageX\n result.max.x = averageX\n \n }\n \n result.finishUpdates()\n \n return result\n \n }\n \n \n get area() {\n return this.height * this.width\n }\n \n \n intersectsWithRectangle(rectangle: UIRectangle) {\n return (this.intersectionRectangleWithRectangle(rectangle).area != 0)\n }\n \n \n // add some space around the rectangle\n rectangleWithInsets(left: number, right: number, bottom: number, top: number) {\n const result = this.copy()\n result.min.x = this.min.x + left\n result.max.x = this.max.x - right\n result.min.y = this.min.y + top\n result.max.y = this.max.y - bottom\n return result\n }\n \n rectangleWithInset(inset: number) {\n return this.rectangleWithInsets(inset, inset, inset, inset)\n }\n \n rectangleWithHeight(height: number, centeredOnPosition: number = nil) {\n \n if (isNaN(centeredOnPosition)) {\n centeredOnPosition = nil\n }\n \n const result = this.copy()\n result.height = height\n \n if (centeredOnPosition != nil) {\n const change = height - this.height\n result.offsetByPoint(new UIPoint(0, change * centeredOnPosition).scale(-1))\n }\n \n return result\n \n }\n \n rectangleWithWidth(width: number, centeredOnPosition: number = nil) {\n \n if (isNaN(centeredOnPosition)) {\n centeredOnPosition = nil\n }\n \n const result = this.copy()\n result.width = width\n \n if (centeredOnPosition != nil) {\n const change = width - this.width\n result.offsetByPoint(new UIPoint(change * centeredOnPosition, 0).scale(-1))\n }\n \n return result\n \n }\n \n rectangleWithHeightRelativeToWidth(heightRatio: number = 1, centeredOnPosition: number = nil) {\n return this.rectangleWithHeight(this.width * heightRatio, centeredOnPosition)\n }\n \n rectangleWithWidthRelativeToHeight(widthRatio: number = 1, centeredOnPosition: number = nil) {\n return this.rectangleWithWidth(this.height * widthRatio, centeredOnPosition)\n }\n \n rectangleWithX(x: number, centeredOnPosition: number = 0) {\n \n const result = this.copy()\n result.x = x - result.width * centeredOnPosition\n \n return result\n \n }\n \n rectangleWithY(y: number, centeredOnPosition: number = 0) {\n \n const result = this.copy()\n result.y = y - result.height * centeredOnPosition\n \n return result\n \n }\n \n \n rectangleByAddingX(x: number) {\n \n const result = this.copy()\n result.x = this.x + x\n \n return result\n \n }\n \n rectangleByAddingY(y: number) {\n \n const result = this.copy()\n result.y = this.y + y\n \n return result\n \n }\n \n \n rectangleWithRelativeValues(\n relativeXPosition: number,\n widthMultiplier: number,\n relativeYPosition: number,\n heightMultiplier: number\n ) {\n \n const result = this.copy()\n \n const width = result.width\n const height = result.height\n \n result.width = widthMultiplier * width\n result.height = heightMultiplier * height\n \n result.center = new UIPoint(\n relativeXPosition * width,\n relativeYPosition * height\n )\n \n return result\n \n }\n \n \n /**\n * Returns a rectangle with a maximum width constraint\n * If current width exceeds max, centers the constrained width\n */\n rectangleWithMaxWidth(maxWidth: number, centeredOnPosition: number = 0): UIRectangle {\n if (this.width <= maxWidth) {\n return this.copy()\n }\n return this.rectangleWithWidth(maxWidth, centeredOnPosition)\n }\n \n /**\n * Returns a rectangle with a maximum height constraint\n */\n rectangleWithMaxHeight(maxHeight: number, centeredOnPosition: number = 0): UIRectangle {\n if (this.height <= maxHeight) {\n return this.copy()\n }\n return this.rectangleWithHeight(maxHeight, centeredOnPosition)\n }\n \n /**\n * Returns a rectangle with minimum width constraint\n */\n rectangleWithMinWidth(minWidth: number, centeredOnPosition: number = 0): UIRectangle {\n if (this.width >= minWidth) {\n return this.copy()\n }\n return this.rectangleWithWidth(minWidth, centeredOnPosition)\n }\n \n /**\n * Returns a rectangle with minimum height constraint\n */\n rectangleWithMinHeight(minHeight: number, centeredOnPosition: number = 0): UIRectangle {\n if (this.height >= minHeight) {\n return this.copy()\n }\n return this.rectangleWithHeight(minHeight, centeredOnPosition)\n }\n \n // Returns a new rectangle that is positioned relative to the reference rectangle\n // By default, it makes a copy of this rectangle taht is centered in the target rectangle\n rectangleByCenteringInRectangle(referenceRectangle: UIRectangle, xPosition = 0.5, yPosition = 0.5) {\n const result = this.copy()\n result.center = referenceRectangle.topLeft\n .pointByAddingX(xPosition * referenceRectangle.width)\n .pointByAddingY(yPosition * referenceRectangle.height)\n return result\n }\n \n \n rectanglesBySplittingWidth(\n weights: number[],\n paddings: number | number[] = 0,\n absoluteWidths: number | number[] = nil\n ) {\n \n if (IS_NIL(paddings)) {\n paddings = 1\n }\n if (!((paddings as any) instanceof Array)) {\n paddings = [paddings].arrayByRepeating(weights.length - 1)\n }\n paddings = (paddings as number[]).arrayByTrimmingToLengthIfLonger(weights.length - 1)\n if (!(absoluteWidths instanceof Array) && IS_NOT_NIL(absoluteWidths)) {\n absoluteWidths = [absoluteWidths].arrayByRepeating(weights.length)\n }\n \n const result: UIRectangle[] = []\n const sumOfWeights = weights.reduce(\n (a, b, index) => {\n if (IS_NOT_NIL((absoluteWidths as number[])[index])) {\n b = 0\n }\n return a + b\n },\n 0\n )\n const sumOfPaddings = paddings.summedValue\n const sumOfAbsoluteWidths = (absoluteWidths as number[]).summedValue\n const totalRelativeWidth = this.width - sumOfPaddings - sumOfAbsoluteWidths\n let previousCellMaxX = this.x\n \n for (let i = 0; i < weights.length; i++) {\n \n let resultWidth: number\n if (IS_NOT_NIL(absoluteWidths[i])) {\n resultWidth = absoluteWidths[i] || 0\n }\n else {\n resultWidth = totalRelativeWidth * (weights[i] / sumOfWeights)\n }\n \n const rectangle = this.rectangleWithWidth(resultWidth)\n \n let padding = 0\n if (paddings.length > i && paddings[i]) {\n padding = paddings[i]\n }\n \n rectangle.x = previousCellMaxX\n previousCellMaxX = rectangle.max.x + padding\n result.push(rectangle)\n \n }\n \n return result\n \n }\n \n rectanglesBySplittingHeight(\n weights: number[],\n paddings: number | number[] = 0,\n absoluteHeights: number | number[] = nil\n ) {\n \n if (IS_NIL(paddings)) {\n paddings = 1\n }\n if (!((paddings as any) instanceof Array)) {\n paddings = [paddings].arrayByRepeating(weights.length - 1)\n }\n paddings = (paddings as number[]).arrayByTrimmingToLengthIfLonger(weights.length - 1)\n if (!(absoluteHeights instanceof Array) && IS_NOT_NIL(absoluteHeights)) {\n absoluteHeights = [absoluteHeights].arrayByRepeating(weights.length)\n }\n \n const result: UIRectangle[] = []\n const sumOfWeights = weights.reduce(\n (a, b, index) => {\n if (IS_NOT_NIL((absoluteHeights as number[])[index])) {\n b = 0\n }\n return a + b\n },\n 0\n )\n const sumOfPaddings = paddings.summedValue\n const sumOfAbsoluteHeights = (absoluteHeights as number[]).summedValue\n const totalRelativeHeight = this.height - sumOfPaddings - sumOfAbsoluteHeights\n var previousCellMaxY = this.y\n \n for (var i = 0; i < weights.length; i++) {\n var resultHeight: number\n if (IS_NOT_NIL(absoluteHeights[i])) {\n \n resultHeight = absoluteHeights[i] || 0\n \n }\n else {\n \n resultHeight = totalRelativeHeight * (weights[i] / sumOfWeights)\n \n }\n \n const rectangle = this.rectangleWithHeight(resultHeight)\n \n var padding = 0\n if (paddings.length > i && paddings[i]) {\n padding = paddings[i]\n }\n \n rectangle.y = previousCellMaxY\n previousCellMaxY = rectangle.max.y + padding\n //rectangle = rectangle.rectangleWithInsets(0, 0, padding, 0);\n result.push(rectangle)\n }\n \n return result\n \n }\n \n \n rectanglesByEquallySplittingWidth(numberOfFrames: number, padding: number = 0) {\n const result: UIRectangle[] = []\n const totalPadding = padding * (numberOfFrames - 1)\n const resultWidth = (this.width - totalPadding) / numberOfFrames\n for (var i = 0; i < numberOfFrames; i++) {\n const rectangle = this.rectangleWithWidth(resultWidth, i / (numberOfFrames - 1))\n result.push(rectangle)\n }\n return result\n }\n \n rectanglesByEquallySplittingHeight(numberOfFrames: number, padding: number = 0) {\n const result: UIRectangle[] = []\n const totalPadding = padding * (numberOfFrames - 1)\n const resultHeight = (this.height - totalPadding) / numberOfFrames\n for (var i = 0; i < numberOfFrames; i++) {\n const rectangle = this.rectangleWithHeight(resultHeight, i / (numberOfFrames - 1))\n result.push(rectangle)\n }\n return result\n }\n \n \n distributeViewsAlongWidth(\n views: UIView[],\n weights: number | number[] = 1,\n paddings?: number | number[],\n absoluteWidths?: number | number[]\n ) {\n if (!(weights instanceof Array)) {\n weights = [weights].arrayByRepeating(views.length)\n }\n const frames = this.rectanglesBySplittingWidth(weights, paddings, absoluteWidths)\n frames.forEach((frame, index) => FIRST_OR_NIL(views[index]).frame = frame)\n return this\n }\n \n distributeViewsAlongHeight(\n views: UIView[],\n weights: number | number[] = 1,\n paddings?: number | number[],\n absoluteHeights?: number | number[]\n ) {\n if (!(weights instanceof Array)) {\n weights = [weights].arrayByRepeating(views.length)\n }\n const frames = this.rectanglesBySplittingHeight(weights, paddings, absoluteHeights)\n frames.forEach((frame, index) => FIRST_OR_NIL(views[index]).frame = frame)\n return this\n }\n \n \n distributeViewsEquallyAlongWidth(views: UIView[], padding: number) {\n const frames = this.rectanglesByEquallySplittingWidth(views.length, padding)\n frames.forEach((frame, index) => views[index].frame = frame)\n return this\n }\n \n distributeViewsEquallyAlongHeight(views: UIView[], padding: number) {\n const frames = this.rectanglesByEquallySplittingHeight(views.length, padding)\n frames.forEach((frame, index) => views[index].frame = frame)\n return this\n }\n \n \n rectangleForNextRow(padding: number = 0, height: number | ((constrainingWidth: number) => number) = this.height) {\n if (height instanceof Function) {\n height = height(this.width)\n }\n const result = this.rectangleWithY(this.max.y + padding)\n if (height != this.height) {\n result.height = height\n }\n return result\n }\n \n rectangleForNextColumn(padding: number = 0, width: number | ((constrainingHeight: number) => number) = this.width) {\n if (width instanceof Function) {\n width = width(this.height)\n }\n const result = this.rectangleWithX(this.max.x + padding)\n if (width != this.width) {\n result.width = width\n }\n return result\n }\n \n rectangleForPreviousRow(padding: number = 0) {\n return this.rectangleWithY(this.min.y - this.height - padding)\n }\n \n rectangleForPreviousColumn(padding: number = 0) {\n return this.rectangleWithX(this.min.x - this.width - padding)\n }\n \n \n assignedAsFrameOfView(view: UIView) {\n view.frame = this\n return this\n }\n \n \n // Bounding box\n static boundingBoxForPoints(points: string | any[]) {\n const result = new UIRectangle()\n for (let i = 0; i < points.length; i++) {\n result.updateByAddingPoint(points[i])\n }\n return result\n }\n \n \n beginUpdates() {\n this._isBeingUpdated = YES\n }\n \n finishUpdates() {\n this._isBeingUpdated = NO\n this.didChange()\n }\n \n \n didChange() {\n \n // Callback to be set by delegate\n \n }\n \n _rectanglePointDidChange() {\n if (!this._isBeingUpdated) {\n this.didChange()\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 { FIRST_OR_NIL, IS, IS_DEFINED, IS_NIL, IS_NOT_NIL, nil, NO, UIObject, YES } from \"./UIObject\"\nimport { UIPoint } from \"./UIPoint\"\nimport { UIView } from \"./UIView\"\n\n\nexport class UIRectangle extends UIObject {\n \n _isBeingUpdated: boolean\n rectanglePointDidChange?: (b: any) => void\n max: UIPoint\n min: UIPoint\n \n minHeight?: number\n maxHeight?: number\n \n minWidth?: number\n maxWidth?: number\n \n \n constructor(x: number = 0, y: number = 0, height: number = 0, width: number = 0) {\n \n super()\n \n this.min = new UIPoint(Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY)\n this.max = new UIPoint(Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY)\n \n this.min.didChange = (point) => {\n this.rectanglePointDidChange?.(point)\n this._rectanglePointDidChange()\n }\n this.max.didChange = (point) => {\n this.rectanglePointDidChange?.(point)\n this._rectanglePointDidChange()\n }\n \n this._isBeingUpdated = NO\n \n this.min = new UIPoint(x, y)\n this.max = new UIPoint(x + width, y + height)\n \n if (IS_NIL(height)) {\n this.max.y = height\n }\n \n if (IS_NIL(width)) {\n this.max.x = width\n }\n \n }\n \n \n copy() {\n return new UIRectangle(this.x, this.y, this.height, this.width)\n }\n \n isEqualTo(rectangle: UIRectangle | null | undefined) {\n return (IS(rectangle) && this.min.isEqualTo(rectangle.min) && this.max.isEqualTo(rectangle.max))\n }\n \n static zero() {\n return new UIRectangle(0, 0, 0, 0)\n }\n \n containsPoint(point: UIPoint) {\n return this.min.x <= point.x && this.min.y <= point.y &&\n point.x <= this.max.x && point.y <= this.max.y\n }\n \n updateByAddingPoint(point: UIPoint) {\n \n if (!point) {\n point = new UIPoint(0, 0)\n }\n \n this.beginUpdates()\n \n const min = this.min.copy()\n if (min.x === nil) {\n min.x = this.max.x\n }\n if (min.y === nil) {\n min.y = this.max.y\n }\n \n const max = this.max.copy()\n if (max.x === nil) {\n max.x = this.min.x\n }\n if (max.y === nil) {\n max.y = this.min.y\n }\n \n this.min.x = Math.min(min.x, point.x)\n this.min.y = Math.min(min.y, point.y)\n this.max.x = Math.max(max.x, point.x)\n this.max.y = Math.max(max.y, point.y)\n \n this.finishUpdates()\n \n }\n \n scale(scale: number) {\n if (IS_NOT_NIL(this.max.y)) {\n this.height = this.height * scale\n }\n if (IS_NOT_NIL(this.max.x)) {\n this.width = this.width * scale\n }\n }\n \n get height() {\n if (this.max.y === nil) {\n return nil\n }\n return this.max.y - this.min.y\n }\n \n set height(height: number) {\n this.max.y = this.min.y + height\n }\n \n \n get width() {\n if (this.max.x === nil) {\n return nil\n }\n return this.max.x - this.min.x\n }\n \n set width(width: number) {\n this.max.x = this.min.x + width\n }\n \n \n get x() {\n return this.min.x\n }\n \n set x(x: number) {\n \n this.beginUpdates()\n \n const width = this.width\n this.min.x = x\n this.max.x = this.min.x + width\n \n this.finishUpdates()\n \n }\n \n \n get y() {\n return this.min.y\n }\n \n \n set y(y: number) {\n \n this.beginUpdates()\n \n const height = this.height\n this.min.y = y\n this.max.y = this.min.y + height\n \n this.finishUpdates()\n \n }\n \n \n get topLeft() {\n return this.min.copy()\n }\n \n get topRight() {\n return new UIPoint(this.max.x, this.y)\n }\n \n get bottomLeft() {\n return new UIPoint(this.x, this.max.y)\n }\n \n get bottomRight() {\n return this.max.copy()\n }\n \n \n get center() {\n return this.min.copy().add(this.min.to(this.max).scale(0.5))\n }\n \n set center(center: UIPoint) {\n const offset = this.center.to(center)\n this.offsetByPoint(offset)\n }\n \n offsetByPoint(offset: UIPoint) {\n this.min.add(offset)\n this.max.add(offset)\n \n return this\n }\n \n \n concatenateWithRectangle(rectangle: UIRectangle) {\n this.updateByAddingPoint(rectangle.bottomRight)\n this.updateByAddingPoint(rectangle.topLeft)\n return this\n }\n \n rectangleByConcatenatingWithRectangle(rectangle: UIRectangle) {\n return this.copy().concatenateWithRectangle(rectangle)\n }\n \n \n intersectionRectangleWithRectangle(rectangle: UIRectangle): UIRectangle {\n \n const result = this.copy()\n \n result.beginUpdates()\n \n const min = result.min\n if (min.x === nil) {\n min.x = rectangle.max.x - Math.min(result.width, rectangle.width)\n }\n if (min.y === nil) {\n min.y = rectangle.max.y - Math.min(result.height, rectangle.height)\n }\n \n const max = result.max\n if (max.x === nil) {\n max.x = rectangle.min.x + Math.min(result.width, rectangle.width)\n }\n if (max.y === nil) {\n max.y = rectangle.min.y + Math.min(result.height, rectangle.height)\n }\n \n result.min.x = Math.max(result.min.x, rectangle.min.x)\n result.min.y = Math.max(result.min.y, rectangle.min.y)\n result.max.x = Math.min(result.max.x, rectangle.max.x)\n result.max.y = Math.min(result.max.y, rectangle.max.y)\n \n \n if (result.height < 0) {\n \n const averageY = (this.center.y + rectangle.center.y) * 0.5\n result.min.y = averageY\n result.max.y = averageY\n \n }\n \n if (result.width < 0) {\n \n const averageX = (this.center.x + rectangle.center.x) * 0.5\n result.min.x = averageX\n result.max.x = averageX\n \n }\n \n result.finishUpdates()\n \n return result\n \n }\n \n \n get area() {\n return this.height * this.width\n }\n \n \n intersectsWithRectangle(rectangle: UIRectangle) {\n return (this.intersectionRectangleWithRectangle(rectangle).area != 0)\n }\n \n \n // add some space around the rectangle\n rectangleWithInsets(left: number, right: number, bottom: number, top: number) {\n const result = this.copy()\n result.min.x = this.min.x + left\n result.max.x = this.max.x - right\n result.min.y = this.min.y + top\n result.max.y = this.max.y - bottom\n return result\n }\n \n rectangleWithInset(inset: number) {\n return this.rectangleWithInsets(inset, inset, inset, inset)\n }\n \n rectangleWithHeight(height: number, centeredOnPosition: number = nil) {\n \n if (isNaN(centeredOnPosition)) {\n centeredOnPosition = nil\n }\n \n const result = this.copy()\n result.height = height\n \n if (centeredOnPosition != nil) {\n const change = height - this.height\n result.offsetByPoint(new UIPoint(0, change * centeredOnPosition).scale(-1))\n }\n \n return result\n \n }\n \n rectangleWithWidth(width: number, centeredOnPosition: number = nil) {\n \n if (isNaN(centeredOnPosition)) {\n centeredOnPosition = nil\n }\n \n const result = this.copy()\n result.width = width\n \n if (centeredOnPosition != nil) {\n const change = width - this.width\n result.offsetByPoint(new UIPoint(change * centeredOnPosition, 0).scale(-1))\n }\n \n return result\n \n }\n \n rectangleWithHeightRelativeToWidth(heightRatio: number = 1, centeredOnPosition: number = nil) {\n return this.rectangleWithHeight(this.width * heightRatio, centeredOnPosition)\n }\n \n rectangleWithWidthRelativeToHeight(widthRatio: number = 1, centeredOnPosition: number = nil) {\n return this.rectangleWithWidth(this.height * widthRatio, centeredOnPosition)\n }\n \n rectangleWithX(x: number, centeredOnPosition: number = 0) {\n \n const result = this.copy()\n result.x = x - result.width * centeredOnPosition\n \n return result\n \n }\n \n rectangleWithY(y: number, centeredOnPosition: number = 0) {\n \n const result = this.copy()\n result.y = y - result.height * centeredOnPosition\n \n return result\n \n }\n \n \n rectangleByAddingX(x: number) {\n \n const result = this.copy()\n result.x = this.x + x\n \n return result\n \n }\n \n rectangleByAddingY(y: number) {\n \n const result = this.copy()\n result.y = this.y + y\n \n return result\n \n }\n \n \n rectangleWithRelativeValues(\n relativeXPosition: number,\n widthMultiplier: number,\n relativeYPosition: number,\n heightMultiplier: number\n ) {\n \n const result = this.copy()\n \n const width = result.width\n const height = result.height\n \n result.width = widthMultiplier * width\n result.height = heightMultiplier * height\n \n result.center = new UIPoint(\n relativeXPosition * width,\n relativeYPosition * height\n )\n \n return result\n \n }\n \n \n /**\n * Returns a rectangle with a maximum width constraint\n * If current width exceeds max, centers the constrained width\n */\n rectangleWithMaxWidth(maxWidth: number, centeredOnPosition: number = 0): UIRectangle {\n if (this.width <= maxWidth) {\n return this.copy()\n }\n return this.rectangleWithWidth(maxWidth, centeredOnPosition)\n }\n \n /**\n * Returns a rectangle with a maximum height constraint\n */\n rectangleWithMaxHeight(maxHeight: number, centeredOnPosition: number = 0): UIRectangle {\n if (this.height <= maxHeight) {\n return this.copy()\n }\n return this.rectangleWithHeight(maxHeight, centeredOnPosition)\n }\n \n /**\n * Returns a rectangle with minimum width constraint\n */\n rectangleWithMinWidth(minWidth: number, centeredOnPosition: number = 0): UIRectangle {\n if (this.width >= minWidth) {\n return this.copy()\n }\n return this.rectangleWithWidth(minWidth, centeredOnPosition)\n }\n \n /**\n * Returns a rectangle with minimum height constraint\n */\n rectangleWithMinHeight(minHeight: number, centeredOnPosition: number = 0): UIRectangle {\n if (this.height >= minHeight) {\n return this.copy()\n }\n return this.rectangleWithHeight(minHeight, centeredOnPosition)\n }\n \n // Returns a new rectangle that is positioned relative to the reference rectangle\n // By default, it makes a copy of this rectangle taht is centered in the target rectangle\n rectangleByCenteringInRectangle(referenceRectangle: UIRectangle, xPosition = 0.5, yPosition = 0.5) {\n const result = this.copy()\n result.center = referenceRectangle.topLeft\n .pointByAddingX(xPosition * referenceRectangle.width)\n .pointByAddingY(yPosition * referenceRectangle.height)\n return result\n }\n \n \n rectanglesBySplittingWidth(\n weights: number[],\n paddings: number | number[] = 0,\n absoluteWidths: number | number[] = nil\n ) {\n \n if (IS_NIL(paddings)) {\n paddings = 1\n }\n if (!((paddings as any) instanceof Array)) {\n paddings = [paddings].arrayByRepeating(weights.length - 1)\n }\n paddings = (paddings as number[]).arrayByTrimmingToLengthIfLonger(weights.length - 1)\n if (!(absoluteWidths instanceof Array) && IS_NOT_NIL(absoluteWidths)) {\n absoluteWidths = [absoluteWidths].arrayByRepeating(weights.length)\n }\n \n const result: UIRectangle[] = []\n const sumOfWeights = weights.reduce(\n (a, b, index) => {\n if (IS_NOT_NIL((absoluteWidths as number[])[index])) {\n b = 0\n }\n return a + b\n },\n 0\n )\n const sumOfPaddings = paddings.summedValue\n const sumOfAbsoluteWidths = (absoluteWidths as number[]).summedValue\n const totalRelativeWidth = this.width - sumOfPaddings - sumOfAbsoluteWidths\n let previousCellMaxX = this.x\n \n for (let i = 0; i < weights.length; i++) {\n \n let resultWidth: number\n if (IS_NOT_NIL(absoluteWidths[i])) {\n resultWidth = absoluteWidths[i] || 0\n }\n else {\n resultWidth = totalRelativeWidth * (weights[i] / sumOfWeights)\n }\n \n const rectangle = this.rectangleWithWidth(resultWidth)\n \n let padding = 0\n if (paddings.length > i && paddings[i]) {\n padding = paddings[i]\n }\n \n rectangle.x = previousCellMaxX\n previousCellMaxX = rectangle.max.x + padding\n result.push(rectangle)\n \n }\n \n return result\n \n }\n \n rectanglesBySplittingHeight(\n weights: number[],\n paddings: number | number[] = 0,\n absoluteHeights: number | number[] = nil\n ) {\n \n if (IS_NIL(paddings)) {\n paddings = 1\n }\n if (!((paddings as any) instanceof Array)) {\n paddings = [paddings].arrayByRepeating(weights.length - 1)\n }\n paddings = (paddings as number[]).arrayByTrimmingToLengthIfLonger(weights.length - 1)\n if (!(absoluteHeights instanceof Array) && IS_NOT_NIL(absoluteHeights)) {\n absoluteHeights = [absoluteHeights].arrayByRepeating(weights.length)\n }\n \n const result: UIRectangle[] = []\n const sumOfWeights = weights.reduce(\n (a, b, index) => {\n if (IS_NOT_NIL((absoluteHeights as number[])[index])) {\n b = 0\n }\n return a + b\n },\n 0\n )\n const sumOfPaddings = paddings.summedValue\n const sumOfAbsoluteHeights = (absoluteHeights as number[]).summedValue\n const totalRelativeHeight = this.height - sumOfPaddings - sumOfAbsoluteHeights\n var previousCellMaxY = this.y\n \n for (var i = 0; i < weights.length; i++) {\n var resultHeight: number\n if (IS_NOT_NIL(absoluteHeights[i])) {\n \n resultHeight = absoluteHeights[i] || 0\n \n }\n else {\n \n resultHeight = totalRelativeHeight * (weights[i] / sumOfWeights)\n \n }\n \n const rectangle = this.rectangleWithHeight(resultHeight)\n \n var padding = 0\n if (paddings.length > i && paddings[i]) {\n padding = paddings[i]\n }\n \n rectangle.y = previousCellMaxY\n previousCellMaxY = rectangle.max.y + padding\n //rectangle = rectangle.rectangleWithInsets(0, 0, padding, 0);\n result.push(rectangle)\n }\n \n return result\n \n }\n \n \n rectanglesByEquallySplittingWidth(numberOfFrames: number, padding: number = 0) {\n const result: UIRectangle[] = []\n const totalPadding = padding * (numberOfFrames - 1)\n const resultWidth = (this.width - totalPadding) / numberOfFrames\n for (var i = 0; i < numberOfFrames; i++) {\n const rectangle = this.rectangleWithWidth(resultWidth, i / (numberOfFrames - 1))\n result.push(rectangle)\n }\n return result\n }\n \n rectanglesByEquallySplittingHeight(numberOfFrames: number, padding: number = 0) {\n const result: UIRectangle[] = []\n const totalPadding = padding * (numberOfFrames - 1)\n const resultHeight = (this.height - totalPadding) / numberOfFrames\n for (var i = 0; i < numberOfFrames; i++) {\n const rectangle = this.rectangleWithHeight(resultHeight, i / (numberOfFrames - 1))\n result.push(rectangle)\n }\n return result\n }\n \n \n distributeViewsAlongWidth(\n views: UIView[],\n weights: number | number[] = 1,\n paddings?: number | number[],\n absoluteWidths?: number | number[]\n ) {\n if (!(weights instanceof Array)) {\n weights = [weights].arrayByRepeating(views.length)\n }\n const frames = this.rectanglesBySplittingWidth(weights, paddings, absoluteWidths)\n frames.forEach((frame, index) => FIRST_OR_NIL(views[index]).frame = frame)\n return this\n }\n \n distributeViewsAlongHeight(\n views: UIView[],\n weights: number | number[] = 1,\n paddings?: number | number[],\n absoluteHeights?: number | number[]\n ) {\n if (!(weights instanceof Array)) {\n weights = [weights].arrayByRepeating(views.length)\n }\n const frames = this.rectanglesBySplittingHeight(weights, paddings, absoluteHeights)\n frames.forEach((frame, index) => FIRST_OR_NIL(views[index]).frame = frame)\n return this\n }\n \n \n distributeViewsEquallyAlongWidth(views: UIView[], padding: number) {\n const frames = this.rectanglesByEquallySplittingWidth(views.length, padding)\n frames.forEach((frame, index) => views[index].frame = frame)\n return this\n }\n \n distributeViewsEquallyAlongHeight(views: UIView[], padding: number) {\n const frames = this.rectanglesByEquallySplittingHeight(views.length, padding)\n frames.forEach((frame, index) => views[index].frame = frame)\n return this\n }\n \n \n rectangleForNextRow(padding: number = 0, height: number | ((constrainingWidth: number) => number) | UIView = this.height) {\n if (height instanceof Function) {\n height = height(this.width)\n }\n if (height instanceof UIView) {\n height = height.intrinsicContentHeight(this.width)\n }\n const result = this.rectangleWithY(this.max.y + padding)\n if (height != this.height) {\n result.height = height\n }\n return result\n }\n \n rectangleForNextColumn(padding: number = 0, width: number | ((constrainingHeight: number) => number) | UIView = this.width) {\n if (width instanceof Function) {\n width = width(this.height)\n }\n if (width instanceof UIView) {\n width = width.intrinsicContentWidth(this.height)\n }\n const result = this.rectangleWithX(this.max.x + padding)\n if (width != this.width) {\n result.width = width\n }\n return result\n }\n \n rectangleForPreviousRow(padding: number = 0, height: number | ((constrainingWidth: number) => number) | UIView = this.height) {\n if (height instanceof Function) {\n height = height(this.width)\n }\n if (height instanceof UIView) {\n height = height.intrinsicContentHeight(this.width)\n }\n const result = this.rectangleWithY(this.min.y - height - padding)\n if (height != this.height) {\n result.height = height\n }\n return result\n }\n \n rectangleForPreviousColumn(padding: number = 0, width: number | ((constrainingHeight: number) => number) | UIView = this.width) {\n if (width instanceof Function) {\n width = width(this.height)\n }\n if (width instanceof UIView) {\n width = width.intrinsicContentWidth(this.height)\n }\n const result = this.rectangleWithX(this.min.x - width - padding)\n if (width != this.width) {\n result.width = width\n }\n return result\n \n }\n \n rectangleWithIntrinsicContentSizeForView(view: UIView, centeredOnXPosition = 0, centeredOnYPosition = 0) {\n const intrinsicContentSize = view.intrinsicContentSize()\n return this.rectangleWithHeight(intrinsicContentSize.height, centeredOnYPosition)\n .rectangleWithWidth(intrinsicContentSize.width, centeredOnXPosition)\n }\n \n rectangleWithIntrinsicContentHeightForView(view: UIView, centeredOnPosition = 0) {\n return this.rectangleWithHeight(view.intrinsicContentHeight(this.width), centeredOnPosition)\n }\n \n rectangleWithIntrinsicContentWidthForView(view: UIView, centeredOnPosition = 0) {\n return this.rectangleWithWidth(view.intrinsicContentWidth(this.height), centeredOnPosition)\n }\n \n settingMinSizes(minHeight?: number, minWidth?: number) {\n this.minHeight = minHeight\n this.minWidth = minWidth\n return this\n }\n \n settingMaxSizes(maxHeight?: number, maxWidth?: number) {\n this.maxHeight = maxHeight\n this.maxWidth = maxWidth\n return this\n }\n \n \n assignedAsFrameOfView(view: UIView) {\n view.frame = this\n return this\n }\n \n \n // Bounding box\n static boundingBoxForPoints(points: string | any[]) {\n const result = new UIRectangle()\n for (let i = 0; i < points.length; i++) {\n result.updateByAddingPoint(points[i])\n }\n return result\n }\n \n \n beginUpdates() {\n this._isBeingUpdated = YES\n }\n \n finishUpdates() {\n this._isBeingUpdated = NO\n this.didChange()\n }\n \n \n didChange() {\n \n // Callback to be set by delegate\n \n }\n \n _rectanglePointDidChange() {\n if (!this._isBeingUpdated) {\n this.didChange()\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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uicore-ts",
3
- "version": "1.1.26",
3
+ "version": "1.1.28",
4
4
  "description": "UICore is a library to build native-like user interfaces using pure Typescript. No HTML is needed at all. Components are described as TS classes and all user interactions are handled explicitly. This library is strongly inspired by the UIKit framework that is used in IOS. In addition, UICore has tools to handle URL based routing, array sorting and filtering and adds a number of other utilities for convenience.",
5
5
  "main": "compiledScripts/index.js",
6
6
  "types": "compiledScripts/index.d.ts",
@@ -1,4 +1,4 @@
1
- import { FIRST_OR_NIL, IS, IS_NIL, IS_NOT_NIL, nil, NO, UIObject, YES } from "./UIObject"
1
+ import { FIRST_OR_NIL, IS, IS_DEFINED, IS_NIL, IS_NOT_NIL, nil, NO, UIObject, YES } from "./UIObject"
2
2
  import { UIPoint } from "./UIPoint"
3
3
  import { UIView } from "./UIView"
4
4
 
@@ -10,6 +10,12 @@ export class UIRectangle extends UIObject {
10
10
  max: UIPoint
11
11
  min: UIPoint
12
12
 
13
+ minHeight?: number
14
+ maxHeight?: number
15
+
16
+ minWidth?: number
17
+ maxWidth?: number
18
+
13
19
 
14
20
  constructor(x: number = 0, y: number = 0, height: number = 0, width: number = 0) {
15
21
 
@@ -627,10 +633,13 @@ export class UIRectangle extends UIObject {
627
633
  }
628
634
 
629
635
 
630
- rectangleForNextRow(padding: number = 0, height: number | ((constrainingWidth: number) => number) = this.height) {
636
+ rectangleForNextRow(padding: number = 0, height: number | ((constrainingWidth: number) => number) | UIView = this.height) {
631
637
  if (height instanceof Function) {
632
638
  height = height(this.width)
633
639
  }
640
+ if (height instanceof UIView) {
641
+ height = height.intrinsicContentHeight(this.width)
642
+ }
634
643
  const result = this.rectangleWithY(this.max.y + padding)
635
644
  if (height != this.height) {
636
645
  result.height = height
@@ -638,10 +647,13 @@ export class UIRectangle extends UIObject {
638
647
  return result
639
648
  }
640
649
 
641
- rectangleForNextColumn(padding: number = 0, width: number | ((constrainingHeight: number) => number) = this.width) {
650
+ rectangleForNextColumn(padding: number = 0, width: number | ((constrainingHeight: number) => number) | UIView = this.width) {
642
651
  if (width instanceof Function) {
643
652
  width = width(this.height)
644
653
  }
654
+ if (width instanceof UIView) {
655
+ width = width.intrinsicContentWidth(this.height)
656
+ }
645
657
  const result = this.rectangleWithX(this.max.x + padding)
646
658
  if (width != this.width) {
647
659
  result.width = width
@@ -649,12 +661,59 @@ export class UIRectangle extends UIObject {
649
661
  return result
650
662
  }
651
663
 
652
- rectangleForPreviousRow(padding: number = 0) {
653
- return this.rectangleWithY(this.min.y - this.height - padding)
664
+ rectangleForPreviousRow(padding: number = 0, height: number | ((constrainingWidth: number) => number) | UIView = this.height) {
665
+ if (height instanceof Function) {
666
+ height = height(this.width)
667
+ }
668
+ if (height instanceof UIView) {
669
+ height = height.intrinsicContentHeight(this.width)
670
+ }
671
+ const result = this.rectangleWithY(this.min.y - height - padding)
672
+ if (height != this.height) {
673
+ result.height = height
674
+ }
675
+ return result
654
676
  }
655
677
 
656
- rectangleForPreviousColumn(padding: number = 0) {
657
- return this.rectangleWithX(this.min.x - this.width - padding)
678
+ rectangleForPreviousColumn(padding: number = 0, width: number | ((constrainingHeight: number) => number) | UIView = this.width) {
679
+ if (width instanceof Function) {
680
+ width = width(this.height)
681
+ }
682
+ if (width instanceof UIView) {
683
+ width = width.intrinsicContentWidth(this.height)
684
+ }
685
+ const result = this.rectangleWithX(this.min.x - width - padding)
686
+ if (width != this.width) {
687
+ result.width = width
688
+ }
689
+ return result
690
+
691
+ }
692
+
693
+ rectangleWithIntrinsicContentSizeForView(view: UIView, centeredOnXPosition = 0, centeredOnYPosition = 0) {
694
+ const intrinsicContentSize = view.intrinsicContentSize()
695
+ return this.rectangleWithHeight(intrinsicContentSize.height, centeredOnYPosition)
696
+ .rectangleWithWidth(intrinsicContentSize.width, centeredOnXPosition)
697
+ }
698
+
699
+ rectangleWithIntrinsicContentHeightForView(view: UIView, centeredOnPosition = 0) {
700
+ return this.rectangleWithHeight(view.intrinsicContentHeight(this.width), centeredOnPosition)
701
+ }
702
+
703
+ rectangleWithIntrinsicContentWidthForView(view: UIView, centeredOnPosition = 0) {
704
+ return this.rectangleWithWidth(view.intrinsicContentWidth(this.height), centeredOnPosition)
705
+ }
706
+
707
+ settingMinSizes(minHeight?: number, minWidth?: number) {
708
+ this.minHeight = minHeight
709
+ this.minWidth = minWidth
710
+ return this
711
+ }
712
+
713
+ settingMaxSizes(maxHeight?: number, maxWidth?: number) {
714
+ this.maxHeight = maxHeight
715
+ this.maxWidth = maxWidth
716
+ return this
658
717
  }
659
718
 
660
719