# Size

The Size object is used to describe the size or dimensions of something, through its `width` and `height` properties.

Example: Create a size that is 10pt wide and 5pt high, and use it to define a rectangle:

```jsx
var size = new Size(10, 5);
console.log(size.width); // 10
console.log(size.height); // 5
var rect = new Rectangle(new Point(20, 15), size);
console.log(rect); // { x: 20, y: 15, width: 10, height: 5 }
```

## Constructors

* `Size(width, height)`

  Creates a Size object with the given width and height values.

  * Parameters:
  * `width:` `Number` — the width
  * `height:` `Number` — the height
  * Returns:
  * `Size`

  Example:Create a size that is 10pt wide and 5pt high

  ```jsx
  var size = new Size(10, 5);
  console.log(size.width); // 10
  console.log(size.height); // 5
  ```
* `Size(array)`

  Creates a Size object using the numbers in the given array as dimensions.

  * Parameters:
  * `array:` `Array`
  * Returns:
  * `Size`

  Example:Creating a size of width: 320, height: 240 using an array of numbers:

  ```jsx
  var array = [320, 240];
  var size = new Size(array);
  console.log(size.width); // 320
  console.log(size.height); // 240
  ```
* `Size(object)`

  Creates a Size object using the properties in the given object.

  * Parameters:
  * `object:` `Object`
  * Returns:
  * `Size`

  Example:Creating a size of width: 10, height: 20 using an object literal:

  ```jsx
  var size = new Size({
      width: 10,
      height: 20
  });
  console.log(size.width); // 10
  console.log(size.height); // 20
  ```
* `Size(size)`

  Creates a Size object using the coordinates of the given Size object.

  * Parameters:
  * `size:` `Size`
  * Returns:
  * `Size`
* `Size(point)`

  Creates a Size object using the `point.x` and `point.y` values of the given Point object.

  * Parameters:
  * `point:` `Point`
  * Returns:
  * `Size`

  Example:

  ```jsx
  var point = new Point(50, 50);
  var size = new Size(point);
  console.log(size.width); // 50
  console.log(size.height); // 50
  ```

## Operators

* `+number`, `+size`

  Returns the addition of the supplied value to the width and height of the size as a new size. The object itself is not modified!

  * Parameters:
  * `number:` `Number` — the number to add
  * Returns:
  * `Size` — the addition of the size and the value as a new size

  Example:

  ```jsx
  var size = new Size(5, 10);
  var result = size + 20;
  console.log(result); // {width: 25, height: 30}
  ```

  Returns the addition of the width and height of the supplied size to the size as a new size. The object itself is not modified!

  * Parameters:
  * `size:` `Size` — the size to add
  * Returns:
  * `Size` — the addition of the two sizes as a new size

  Example:

  ```jsx
  var size1 = new Size(5, 10);
  var size2 = new Size(10, 20);
  var result = size1 + size2;
  console.log(result); // {width: 15, height: 30}
  ```
* `-number`, `-size`

  Returns the subtraction of the supplied value from the width and height of the size as a new size. The object itself is not modified! The object itself is not modified!

  * Parameters:
  * `number:` `Number` — the number to subtract
  * Returns:
  * `Size` — the subtraction of the size and the value as a new size

  Example:

  ```jsx
  var size = new Size(10, 20);
  var result = size - 5;
  console.log(result); // {width: 5, height: 15}
  ```

  Returns the subtraction of the width and height of the supplied size from the size as a new size. The object itself is not modified!

  * Parameters:
  * `size:` `Size` — the size to subtract
  * Returns:
  * `Size` — the subtraction of the two sizes as a new size

  Example:

  ```jsx
  var firstSize = new Size(10, 20);
  var secondSize = new Size(5, 5);
  var result = firstSize - secondSize;
  console.log(result); // {width: 5, height: 15}
  ```
* `*number`, `*size`

  Returns the multiplication of the supplied value with the width and height of the size as a new size. The object itself is not modified!

  * Parameters:
  * `number:` `Number` — the number to multiply by
  * Returns:
  * `Size` — the multiplication of the size and the value as a new size

  Example:

  ```jsx
  var size = new Size(10, 20);
  var result = size * 2;
  console.log(result); // {width: 20, height: 40}
  ```

  Returns the multiplication of the width and height of the supplied size with the size as a new size. The object itself is not modified!

  * Parameters:
  * `size:` `Size` — the size to multiply by
  * Returns:
  * `Size` — the multiplication of the two sizes as a new size

  Example:

  ```jsx
  var firstSize = new Size(5, 10);
  var secondSize = new Size(4, 2);
  var result = firstSize * secondSize;
  console.log(result); // {width: 20, height: 20}
  ```
* `/number`, `/size`

  Returns the division of the supplied value by the width and height of the size as a new size. The object itself is not modified!

  * Parameters:
  * `number:` `Number` — the number to divide by
  * Returns:
  * `Size` — the division of the size and the value as a new size

  Example:

  ```jsx
  var size = new Size(10, 20);
  var result = size / 2;
  console.log(result); // {width: 5, height: 10}
  ```

  Returns the division of the width and height of the supplied size by the size as a new size. The object itself is not modified!

  * Parameters:
  * `size:` `Size` — the size to divide by
  * Returns:
  * `Size` — the division of the two sizes as a new size

  Example:

  ```jsx
  var firstSize = new Size(8, 10);
  var secondSize = new Size(2, 5);
  var result = firstSize / secondSize;
  console.log(result); // {width: 4, height: 2}
  ```
* `%number`, `%size`

  The modulo operator returns the integer remainders of dividing the size by the supplied value as a new size.

  * Parameters:
  * `value:` `Number`
  * Returns:
  * `Size` — the integer remainders of dividing the size by the value as a new size

  Example:

  ```jsx
  var size = new Size(12, 6);
  console.log(size % 5); // {width: 2, height: 1}
  ```

  The modulo operator returns the integer remainders of dividing the size by the supplied size as a new size.

  * Parameters:
  * `size:` `Size`
  * Returns:
  * `Size` — the integer remainders of dividing the sizes by each other as a new size

  Example:

  ```jsx
  var size = new Size(12, 6);
  console.log(size % new Size(5, 2)); // {width: 2, height: 0}
  ```

## Properties

* `width`

  The width of the size

  * Type:
  * `Number`
* `height`

  The height of the size

  * Type:
  * `Number`

## Methods

* `set(...values)`

  Sets the size to the passed values. Note that any sequence of parameters that is supported by the various `Size`() constructors also work for calls of `set()`.

  * Parameters:
  * `values:` `any value`
  * Returns:
  * `Size`
* `equals(size)`

  Checks whether the width and height of the size are equal to those of the supplied size.

  * Parameters:
  * `size:` `Size` — the size to compare to
  * Returns:
  * `Boolean`

  Example:

  ```jsx
  var size = new Size(5, 10);
  console.log(size == new Size(5, 10)); // true
  console.log(size == new Size(1, 1)); // false
  console.log(size != new Size(1, 1)); // true
  ```
* `clone()`

  Returns a copy of the size.

  * Returns:
  * `Size`
* `toString()`
  * Returns:
  * `String` — a string representation of the size

### Tests

* `isZero()`

  Checks if this size has both the width and height set to 0.

  * Returns:
  * `Boolean` — `true` if both width and height are 0, `false` otherwise
* `isNaN()`

  Checks if the width or the height of the size are NaN.

  * Returns:
  * `Boolean` — `true` if the width or height of the size are NaN, `false` otherwise

### Math Functions

* `round()`

  Returns a new size with rounded `width` and `height` values. The object itself is not modified!

  * Returns:
  * `Size`

  Example:

  ```jsx
  var size = new Size(10.2, 10.9);
  var roundSize = size.round();
  console.log(roundSize); // {x: 10, y: 11}
  ```
* `ceil()`

  Returns a new size with the nearest greater non-fractional values to the specified `width` and `height` values. The object itself is not modified!

  * Returns:
  * `Size`

  Example:

  ```jsx
  var size = new Size(10.2, 10.9);
  var ceilSize = size.ceil();
  console.log(ceilSize); // {x: 11, y: 11}
  ```
* `floor()`

  Returns a new size with the nearest smaller non-fractional values to the specified `width` and `height` values. The object itself is not modified!

  * Returns:
  * `Size`

  Example:

  ```jsx
  var size = new Size(10.2, 10.9);
  var floorSize = size.floor();
  console.log(floorSize); // {x: 10, y: 10}
  ```
* `abs()`

  Returns a new size with the absolute values of the specified `width` and `height` values. The object itself is not modified!

  * Returns:
  * `Size`

  Example:

  ```jsx
  var size = new Size(-5, 10);
  var absSize = size.abs();
  console.log(absSize); // {x: 5, y: 10}
  ```

### Math Operator Functions

* `add(number)`

  Returns the addition of the supplied value to the width and height of the size as a new size. The object itself is not modified!

  * Parameters:
  * `number:` `Number` — the number to add
  * Returns:
  * `Size` — the addition of the size and the value as a new size

  Example:

  ```jsx
  var size = new Size(5, 10);
  var result = size + 20;
  console.log(result); // {width: 25, height: 30}
  ```
* `add(size)`

  Returns the addition of the width and height of the supplied size to the size as a new size. The object itself is not modified!

  * Parameters:
  * `size:` `Size` — the size to add
  * Returns:
  * `Size` — the addition of the two sizes as a new size

  Example:

  ```jsx
  var size1 = new Size(5, 10);
  var size2 = new Size(10, 20);
  var result = size1 + size2;
  console.log(result); // {width: 15, height: 30}
  ```
* `subtract(number)`

  Returns the subtraction of the supplied value from the width and height of the size as a new size. The object itself is not modified! The object itself is not modified!

  * Parameters:
  * `number:` `Number` — the number to subtract
  * Returns:
  * `Size` — the subtraction of the size and the value as a new size

  Example:

  ```jsx
  var size = new Size(10, 20);
  var result = size - 5;
  console.log(result); // {width: 5, height: 15}
  ```
* `subtract(size)`

  Returns the subtraction of the width and height of the supplied size from the size as a new size. The object itself is not modified!

  * Parameters:
  * `size:` `Size` — the size to subtract
  * Returns:
  * `Size` — the subtraction of the two sizes as a new size

  Example:

  ```jsx
  var firstSize = new Size(10, 20);
  var secondSize = new Size(5, 5);
  var result = firstSize - secondSize;
  console.log(result); // {width: 5, height: 15}
  ```
* `multiply(number)`

  Returns the multiplication of the supplied value with the width and height of the size as a new size. The object itself is not modified!

  * Parameters:
  * `number:` `Number` — the number to multiply by
  * Returns:
  * `Size` — the multiplication of the size and the value as a new size

  Example:

  ```jsx
  var size = new Size(10, 20);
  var result = size * 2;
  console.log(result); // {width: 20, height: 40}
  ```
* `multiply(size)`

  Returns the multiplication of the width and height of the supplied size with the size as a new size. The object itself is not modified!

  * Parameters:
  * `size:` `Size` — the size to multiply by
  * Returns:
  * `Size` — the multiplication of the two sizes as a new size

  Example:

  ```jsx
  var firstSize = new Size(5, 10);
  var secondSize = new Size(4, 2);
  var result = firstSize * secondSize;
  console.log(result); // {width: 20, height: 20}
  ```
* `divide(number)`

  Returns the division of the supplied value by the width and height of the size as a new size. The object itself is not modified!

  * Parameters:
  * `number:` `Number` — the number to divide by
  * Returns:
  * `Size` — the division of the size and the value as a new size

  Example:

  ```jsx
  var size = new Size(10, 20);
  var result = size / 2;
  console.log(result); // {width: 5, height: 10}
  ```
* `divide(size)`

  Returns the division of the width and height of the supplied size by the size as a new size. The object itself is not modified!

  * Parameters:
  * `size:` `Size` — the size to divide by
  * Returns:
  * `Size` — the division of the two sizes as a new size

  Example:

  ```jsx
  var firstSize = new Size(8, 10);
  var secondSize = new Size(2, 5);
  var result = firstSize / secondSize;
  console.log(result); // {width: 4, height: 2}
  ```
* `modulo(value)`

  The modulo operator returns the integer remainders of dividing the size by the supplied value as a new size.

  * Parameters:
  * `value:` `Number`
  * Returns:
  * `Size` — the integer remainders of dividing the size by the value as a new size

  Example:

  ```jsx
  var size = new Size(12, 6);
  console.log(size % 5); // {width: 2, height: 1}
  ```
* `modulo(size)`

  The modulo operator returns the integer remainders of dividing the size by the supplied size as a new size.

  * Parameters:
  * `size:` `Size`
  * Returns:
  * `Size` — the integer remainders of dividing the sizes by each other as a new size

  Example:

  ```jsx
  var size = new Size(12, 6);
  console.log(size % new Size(5, 2)); // {width: 2, height: 0}
  ```

## Static Methods

* `Size.min(size1, size2)`

  Returns a new size object with the smallest `width` and `height` of the supplied sizes.

  * Parameters:
  * `size1:` `Size`
  * `size2:` `Size`
  * Returns:
  * `Size` — the newly created size object

  Example:

  ```jsx
  var size1 = new Size(10, 100);
  var size2 = new Size(200, 5);
  var minSize = Size.min(size1, size2);
  console.log(minSize); // {width: 10, height: 5}
  ```

  Example:Find the minimum of multiple sizes:

  ```jsx
  var size1 = new Size(60, 100);
  var size2 = new Size(200, 5);
  var size3 = new Size(250, 35);
  [size1, size2, size3].reduce(Size.min) // {width: 60, height: 5}
  ```
* `Size.max(size1, size2)`

  Returns a new size object with the largest `width` and `height` of the supplied sizes.

  * Parameters:
  * `size1:` `Size`
  * `size2:` `Size`
  * Returns:
  * `Size` — the newly created size object

  Example:

  ```jsx
  var size1 = new Size(10, 100);
  var size2 = new Size(200, 5);
  var maxSize = Size.max(size1, size2);
  console.log(maxSize); // {width: 200, height: 100}
  ```

  Example:Find the maximum of multiple sizes:

  ```jsx
  var size1 = new Size(60, 100);
  var size2 = new Size(200, 5);
  var size3 = new Size(250, 35);
  [size1, size2, size3].reduce(Size.max) // {width: 250, height: 100}
  ```
* `Size.random()`

  Returns a size object with random `width` and `height` values between `0` and `1`.

  * Returns:
  * `Size` — the newly created size object

  Example:

  ```jsx
  var maxSize = new Size(100, 100);
  var randomSize = Size.random();
  var size = maxSize * randomSize;
  ```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://paperjs.typogram.co/basic-types/size.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
