@zag-js/rect-utils 0.38.1 → 0.40.0

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.
package/dist/index.d.mts CHANGED
@@ -1,13 +1,26 @@
1
- type Point = {
2
- x: number;
3
- y: number;
4
- };
5
- type RectValue = {
1
+ interface Point {
6
2
  x: number;
7
3
  y: number;
4
+ }
5
+ interface Size {
8
6
  width: number;
9
7
  height: number;
10
- };
8
+ }
9
+ interface Bounds {
10
+ minX: number;
11
+ midX: number;
12
+ maxX: number;
13
+ minY: number;
14
+ midY: number;
15
+ maxY: number;
16
+ }
17
+ interface CenterPoint {
18
+ center: Point;
19
+ }
20
+ interface RectInit extends Point, Size {
21
+ }
22
+ interface Rect extends Point, Size, Bounds, CenterPoint {
23
+ }
11
24
  type RectSide = "top" | "right" | "bottom" | "left";
12
25
  type RectPoint = "top-left" | "top-center" | "top-right" | "right-center" | "left-center" | "bottom-left" | "bottom-right" | "bottom-center" | "center";
13
26
  type RectEdge = [Point, Point];
@@ -24,96 +37,90 @@ type RectCenters = Record<RectCenter, Point> & {
24
37
  value: RectPoints;
25
38
  };
26
39
  type RectInset = Partial<Record<RectSide, number>>;
27
- type SymmetricRectInset = {
40
+ interface SymmetricRectInset {
28
41
  dx?: number;
29
42
  dy?: number;
30
- };
43
+ }
44
+ interface ScalingOptions {
45
+ scalingOriginMode: "center" | "extent";
46
+ lockAspectRatio: boolean;
47
+ }
48
+ interface AlignOptions {
49
+ h: HAlign;
50
+ v: VAlign;
51
+ }
52
+ type HAlign = "left-inside" | "left-outside" | "center" | "right-inside" | "right-outside";
53
+ type VAlign = "top-inside" | "top-outside" | "center" | "bottom-inside" | "bottom-outside";
54
+
55
+ declare class AffineTransform {
56
+ m00: number;
57
+ m01: number;
58
+ m02: number;
59
+ m10: number;
60
+ m11: number;
61
+ m12: number;
62
+ constructor([m00, m01, m02, m10, m11, m12]?: Iterable<number>);
63
+ applyTo(point: Point): Point;
64
+ prepend(other: AffineTransform): AffineTransform;
65
+ append(other: AffineTransform): AffineTransform;
66
+ get determinant(): number;
67
+ get isInvertible(): boolean;
68
+ invert(): AffineTransform;
69
+ get array(): number[];
70
+ get float32Array(): Float32Array;
71
+ static get identity(): AffineTransform;
72
+ static rotate(theta: number, origin?: Point): AffineTransform;
73
+ rotate: (typeof AffineTransform)["rotate"];
74
+ static scale(sx: number, sy?: number, origin?: Point): AffineTransform;
75
+ scale: (typeof AffineTransform)["scale"];
76
+ static translate(tx: number, ty: number): AffineTransform;
77
+ translate: (typeof AffineTransform)["translate"];
78
+ static multiply(...[first, ...rest]: AffineTransform[]): AffineTransform;
79
+ get a(): number;
80
+ get b(): number;
81
+ get c(): number;
82
+ get d(): number;
83
+ get tx(): number;
84
+ get ty(): number;
85
+ get scaleComponents(): Point;
86
+ get translationComponents(): Point;
87
+ get skewComponents(): Point;
88
+ toString(): string;
89
+ }
90
+
91
+ declare function alignRect(a: Rect, ref: Rect, options: AlignOptions): Rect;
31
92
 
32
- declare function createRect(r: RectValue): {
93
+ declare const clampPoint: (position: Point, size: Size, boundaryRect: RectInit) => {
33
94
  x: number;
34
95
  y: number;
96
+ };
97
+ declare const clampSize: (size: Size, minSize?: Size, maxSize?: Size) => {
35
98
  width: number;
36
99
  height: number;
37
- minX: number;
38
- minY: number;
39
- maxX: number;
40
- maxY: number;
41
- midX: number;
42
- midY: number;
43
- center: {
44
- x: number;
45
- y: number;
46
- };
47
- };
48
- type Rect = ReturnType<typeof createRect>;
49
- declare function isRect(v: any): v is Rect;
50
- declare function getRectCenters(v: Rect): {
51
- top: {
52
- x: number;
53
- y: number;
54
- };
55
- right: {
56
- x: number;
57
- y: number;
58
- };
59
- bottom: {
60
- x: number;
61
- y: number;
62
- };
63
- left: {
64
- x: number;
65
- y: number;
66
- };
67
- };
68
- declare function getRectCorners(v: Rect): {
69
- top: {
70
- x: number;
71
- y: number;
72
- };
73
- right: {
74
- x: number;
75
- y: number;
76
- };
77
- bottom: {
78
- x: number;
79
- y: number;
80
- };
81
- left: {
82
- x: number;
83
- y: number;
84
- };
85
- };
86
- declare function getRectEdges(v: Rect): {
87
- top: RectEdge;
88
- right: RectEdge;
89
- bottom: RectEdge;
90
- left: RectEdge;
91
100
  };
92
101
 
93
- declare function alignRect(a: Rect, ref: Rect, options: AlignOptions): Rect;
94
- type AlignOptions = {
95
- h: HAlign;
96
- v: VAlign;
97
- };
98
- type HAlign = "left-inside" | "left-outside" | "center" | "right-inside" | "right-outside";
99
- type VAlign = "top-inside" | "top-outside" | "center" | "bottom-inside" | "bottom-outside";
100
-
101
102
  declare function closest(...pts: Point[]): (a: Point) => Point;
102
103
  declare function closestSideToRect(ref: Rect, r: Rect): RectSide;
103
104
  declare function closestSideToPoint(ref: Rect, p: Point): RectSide;
104
105
 
106
+ declare const constrainRect: (rect: RectInit, boundary: RectInit) => RectInit;
107
+
105
108
  declare function containsPoint(r: Rect, p: Point): boolean;
106
109
  declare function containsRect(a: Rect, b: Rect): boolean;
107
110
  declare function contains(r: Rect, v: Rect | Point): boolean;
108
111
 
109
- type DistanceValue = Point & {
112
+ interface DistanceValue extends Point {
110
113
  value: number;
111
- };
114
+ }
112
115
  declare function distance(a: Point, b?: Point): number;
113
116
  declare function distanceFromPoint(r: Rect, p: Point): DistanceValue;
114
117
  declare function distanceFromRect(a: Rect, b: Rect): DistanceValue;
115
118
  declare function distanceBtwEdges(a: Rect, b: Rect): Record<RectSide, number>;
116
119
 
120
+ declare const isSizeEqual: (a: Size, b: Size) => boolean;
121
+ declare const isPointEqual: (a: Point, b: Point) => boolean;
122
+ declare const isRectEqual: (a: RectInit, b: RectInit) => boolean;
123
+
117
124
  declare function getElementRect(el: HTMLElement, opts?: ElementRectOptions): Rect;
118
125
  type ElementRectOptions = {
119
126
  /**
@@ -154,11 +161,6 @@ declare function getViewportRect(win: Window, opts: WindowRectOptions): {
154
161
  height: number;
155
162
  };
156
163
 
157
- declare function getElementPolygon(rectValue: RectValue, placement: string): {
158
- x: number;
159
- y: number;
160
- }[] | undefined;
161
-
162
164
  /**
163
165
  * Checks if a Rect intersects another Rect
164
166
  */
@@ -178,9 +180,75 @@ declare function expand(r: Rect, v: number | SymmetricRectInset): Rect;
178
180
  declare function shrink(r: Rect, v: number | SymmetricRectInset): Rect;
179
181
  declare function shift(r: Rect, o: Partial<Point>): Rect;
180
182
 
183
+ declare function getElementPolygon(rectValue: RectInit, placement: string): {
184
+ x: number;
185
+ y: number;
186
+ }[] | undefined;
181
187
  declare function isPointInPolygon(polygon: Point[], point: Point): boolean;
182
188
  declare function debugPolygon(polygon: Point[]): () => void;
183
189
 
190
+ declare const createPoint: (x: number, y: number) => {
191
+ x: number;
192
+ y: number;
193
+ };
194
+ declare const subtractPoints: (a: Point, b: Point) => {
195
+ x: number;
196
+ y: number;
197
+ };
198
+ declare const addPoints: (a: Point, b: Point) => {
199
+ x: number;
200
+ y: number;
201
+ };
202
+ declare function isPoint(v: any): v is Point;
203
+ declare function createRect(r: RectInit): Rect;
204
+ declare function isRect(v: any): v is Rect;
205
+ declare function getRectCenters(v: Rect): {
206
+ top: {
207
+ x: number;
208
+ y: number;
209
+ };
210
+ right: {
211
+ x: number;
212
+ y: number;
213
+ };
214
+ bottom: {
215
+ x: number;
216
+ y: number;
217
+ };
218
+ left: {
219
+ x: number;
220
+ y: number;
221
+ };
222
+ };
223
+ declare function getRectCorners(v: Rect): {
224
+ top: {
225
+ x: number;
226
+ y: number;
227
+ };
228
+ right: {
229
+ x: number;
230
+ y: number;
231
+ };
232
+ bottom: {
233
+ x: number;
234
+ y: number;
235
+ };
236
+ left: {
237
+ x: number;
238
+ y: number;
239
+ };
240
+ };
241
+ declare function getRectEdges(v: Rect): {
242
+ top: RectEdge;
243
+ right: RectEdge;
244
+ bottom: RectEdge;
245
+ left: RectEdge;
246
+ };
247
+
248
+ type CompassDirection = "n" | "ne" | "e" | "se" | "s" | "sw" | "w" | "nw";
249
+
250
+ declare function resizeRect(rect: Rect, offset: Point, direction: CompassDirection, opts: ScalingOptions): RectInit;
251
+
184
252
  declare function union(...rs: Rect[]): Rect;
185
253
 
186
- export { type AlignOptions, type DistanceValue, type ElementRectOptions, type HAlign, type Point, type Rect, type RectCenter, type RectCenters, type RectCorner, type RectCorners, type RectEdge, type RectEdges, type RectInset, type RectPoint, type RectPoints, type RectSide, type RectValue, type SymmetricRectInset, type VAlign, type WindowRectOptions, alignRect, closest, closestSideToPoint, closestSideToRect, collisions, contains, containsPoint, containsRect, createRect, debugPolygon, distance, distanceBtwEdges, distanceFromPoint, distanceFromRect, expand, fromRange, getElementPolygon, getElementRect, getRectCenters, getRectCorners, getRectEdges, getRectFromPoints, getRotationRect, getViewportRect, getWindowRect, inset, intersection, intersects, isPointInPolygon, isRect, isSymmetric, rotate, shift, shrink, toRad, union };
254
+ export { AffineTransform, type AlignOptions, type Bounds, type CenterPoint, type DistanceValue, type ElementRectOptions, type HAlign, type Point, type Rect, type RectCenter, type RectCenters, type RectCorner, type RectCorners, type RectEdge, type RectEdges, type RectInit, type RectInset, type RectPoint, type RectPoints, type RectSide, type ScalingOptions, type Size, type SymmetricRectInset, type VAlign, type WindowRectOptions, addPoints, alignRect, clampPoint, clampSize, closest, closestSideToPoint, closestSideToRect, collisions, constrainRect, contains, containsPoint, containsRect, createPoint, createRect, debugPolygon, distance, distanceBtwEdges, distanceFromPoint, distanceFromRect, expand, fromRange, getElementPolygon, getElementRect, getRectCenters, getRectCorners, getRectEdges, getRectFromPoints, getRotationRect, getViewportRect, getWindowRect, inset, intersection, intersects, isPoint, isPointEqual, isPointInPolygon, isRect, isRectEqual, isSizeEqual, isSymmetric, resizeRect, rotate, shift, shrink, subtractPoints, toRad, union };
package/dist/index.d.ts CHANGED
@@ -1,13 +1,26 @@
1
- type Point = {
2
- x: number;
3
- y: number;
4
- };
5
- type RectValue = {
1
+ interface Point {
6
2
  x: number;
7
3
  y: number;
4
+ }
5
+ interface Size {
8
6
  width: number;
9
7
  height: number;
10
- };
8
+ }
9
+ interface Bounds {
10
+ minX: number;
11
+ midX: number;
12
+ maxX: number;
13
+ minY: number;
14
+ midY: number;
15
+ maxY: number;
16
+ }
17
+ interface CenterPoint {
18
+ center: Point;
19
+ }
20
+ interface RectInit extends Point, Size {
21
+ }
22
+ interface Rect extends Point, Size, Bounds, CenterPoint {
23
+ }
11
24
  type RectSide = "top" | "right" | "bottom" | "left";
12
25
  type RectPoint = "top-left" | "top-center" | "top-right" | "right-center" | "left-center" | "bottom-left" | "bottom-right" | "bottom-center" | "center";
13
26
  type RectEdge = [Point, Point];
@@ -24,96 +37,90 @@ type RectCenters = Record<RectCenter, Point> & {
24
37
  value: RectPoints;
25
38
  };
26
39
  type RectInset = Partial<Record<RectSide, number>>;
27
- type SymmetricRectInset = {
40
+ interface SymmetricRectInset {
28
41
  dx?: number;
29
42
  dy?: number;
30
- };
43
+ }
44
+ interface ScalingOptions {
45
+ scalingOriginMode: "center" | "extent";
46
+ lockAspectRatio: boolean;
47
+ }
48
+ interface AlignOptions {
49
+ h: HAlign;
50
+ v: VAlign;
51
+ }
52
+ type HAlign = "left-inside" | "left-outside" | "center" | "right-inside" | "right-outside";
53
+ type VAlign = "top-inside" | "top-outside" | "center" | "bottom-inside" | "bottom-outside";
54
+
55
+ declare class AffineTransform {
56
+ m00: number;
57
+ m01: number;
58
+ m02: number;
59
+ m10: number;
60
+ m11: number;
61
+ m12: number;
62
+ constructor([m00, m01, m02, m10, m11, m12]?: Iterable<number>);
63
+ applyTo(point: Point): Point;
64
+ prepend(other: AffineTransform): AffineTransform;
65
+ append(other: AffineTransform): AffineTransform;
66
+ get determinant(): number;
67
+ get isInvertible(): boolean;
68
+ invert(): AffineTransform;
69
+ get array(): number[];
70
+ get float32Array(): Float32Array;
71
+ static get identity(): AffineTransform;
72
+ static rotate(theta: number, origin?: Point): AffineTransform;
73
+ rotate: (typeof AffineTransform)["rotate"];
74
+ static scale(sx: number, sy?: number, origin?: Point): AffineTransform;
75
+ scale: (typeof AffineTransform)["scale"];
76
+ static translate(tx: number, ty: number): AffineTransform;
77
+ translate: (typeof AffineTransform)["translate"];
78
+ static multiply(...[first, ...rest]: AffineTransform[]): AffineTransform;
79
+ get a(): number;
80
+ get b(): number;
81
+ get c(): number;
82
+ get d(): number;
83
+ get tx(): number;
84
+ get ty(): number;
85
+ get scaleComponents(): Point;
86
+ get translationComponents(): Point;
87
+ get skewComponents(): Point;
88
+ toString(): string;
89
+ }
90
+
91
+ declare function alignRect(a: Rect, ref: Rect, options: AlignOptions): Rect;
31
92
 
32
- declare function createRect(r: RectValue): {
93
+ declare const clampPoint: (position: Point, size: Size, boundaryRect: RectInit) => {
33
94
  x: number;
34
95
  y: number;
96
+ };
97
+ declare const clampSize: (size: Size, minSize?: Size, maxSize?: Size) => {
35
98
  width: number;
36
99
  height: number;
37
- minX: number;
38
- minY: number;
39
- maxX: number;
40
- maxY: number;
41
- midX: number;
42
- midY: number;
43
- center: {
44
- x: number;
45
- y: number;
46
- };
47
- };
48
- type Rect = ReturnType<typeof createRect>;
49
- declare function isRect(v: any): v is Rect;
50
- declare function getRectCenters(v: Rect): {
51
- top: {
52
- x: number;
53
- y: number;
54
- };
55
- right: {
56
- x: number;
57
- y: number;
58
- };
59
- bottom: {
60
- x: number;
61
- y: number;
62
- };
63
- left: {
64
- x: number;
65
- y: number;
66
- };
67
- };
68
- declare function getRectCorners(v: Rect): {
69
- top: {
70
- x: number;
71
- y: number;
72
- };
73
- right: {
74
- x: number;
75
- y: number;
76
- };
77
- bottom: {
78
- x: number;
79
- y: number;
80
- };
81
- left: {
82
- x: number;
83
- y: number;
84
- };
85
- };
86
- declare function getRectEdges(v: Rect): {
87
- top: RectEdge;
88
- right: RectEdge;
89
- bottom: RectEdge;
90
- left: RectEdge;
91
100
  };
92
101
 
93
- declare function alignRect(a: Rect, ref: Rect, options: AlignOptions): Rect;
94
- type AlignOptions = {
95
- h: HAlign;
96
- v: VAlign;
97
- };
98
- type HAlign = "left-inside" | "left-outside" | "center" | "right-inside" | "right-outside";
99
- type VAlign = "top-inside" | "top-outside" | "center" | "bottom-inside" | "bottom-outside";
100
-
101
102
  declare function closest(...pts: Point[]): (a: Point) => Point;
102
103
  declare function closestSideToRect(ref: Rect, r: Rect): RectSide;
103
104
  declare function closestSideToPoint(ref: Rect, p: Point): RectSide;
104
105
 
106
+ declare const constrainRect: (rect: RectInit, boundary: RectInit) => RectInit;
107
+
105
108
  declare function containsPoint(r: Rect, p: Point): boolean;
106
109
  declare function containsRect(a: Rect, b: Rect): boolean;
107
110
  declare function contains(r: Rect, v: Rect | Point): boolean;
108
111
 
109
- type DistanceValue = Point & {
112
+ interface DistanceValue extends Point {
110
113
  value: number;
111
- };
114
+ }
112
115
  declare function distance(a: Point, b?: Point): number;
113
116
  declare function distanceFromPoint(r: Rect, p: Point): DistanceValue;
114
117
  declare function distanceFromRect(a: Rect, b: Rect): DistanceValue;
115
118
  declare function distanceBtwEdges(a: Rect, b: Rect): Record<RectSide, number>;
116
119
 
120
+ declare const isSizeEqual: (a: Size, b: Size) => boolean;
121
+ declare const isPointEqual: (a: Point, b: Point) => boolean;
122
+ declare const isRectEqual: (a: RectInit, b: RectInit) => boolean;
123
+
117
124
  declare function getElementRect(el: HTMLElement, opts?: ElementRectOptions): Rect;
118
125
  type ElementRectOptions = {
119
126
  /**
@@ -154,11 +161,6 @@ declare function getViewportRect(win: Window, opts: WindowRectOptions): {
154
161
  height: number;
155
162
  };
156
163
 
157
- declare function getElementPolygon(rectValue: RectValue, placement: string): {
158
- x: number;
159
- y: number;
160
- }[] | undefined;
161
-
162
164
  /**
163
165
  * Checks if a Rect intersects another Rect
164
166
  */
@@ -178,9 +180,75 @@ declare function expand(r: Rect, v: number | SymmetricRectInset): Rect;
178
180
  declare function shrink(r: Rect, v: number | SymmetricRectInset): Rect;
179
181
  declare function shift(r: Rect, o: Partial<Point>): Rect;
180
182
 
183
+ declare function getElementPolygon(rectValue: RectInit, placement: string): {
184
+ x: number;
185
+ y: number;
186
+ }[] | undefined;
181
187
  declare function isPointInPolygon(polygon: Point[], point: Point): boolean;
182
188
  declare function debugPolygon(polygon: Point[]): () => void;
183
189
 
190
+ declare const createPoint: (x: number, y: number) => {
191
+ x: number;
192
+ y: number;
193
+ };
194
+ declare const subtractPoints: (a: Point, b: Point) => {
195
+ x: number;
196
+ y: number;
197
+ };
198
+ declare const addPoints: (a: Point, b: Point) => {
199
+ x: number;
200
+ y: number;
201
+ };
202
+ declare function isPoint(v: any): v is Point;
203
+ declare function createRect(r: RectInit): Rect;
204
+ declare function isRect(v: any): v is Rect;
205
+ declare function getRectCenters(v: Rect): {
206
+ top: {
207
+ x: number;
208
+ y: number;
209
+ };
210
+ right: {
211
+ x: number;
212
+ y: number;
213
+ };
214
+ bottom: {
215
+ x: number;
216
+ y: number;
217
+ };
218
+ left: {
219
+ x: number;
220
+ y: number;
221
+ };
222
+ };
223
+ declare function getRectCorners(v: Rect): {
224
+ top: {
225
+ x: number;
226
+ y: number;
227
+ };
228
+ right: {
229
+ x: number;
230
+ y: number;
231
+ };
232
+ bottom: {
233
+ x: number;
234
+ y: number;
235
+ };
236
+ left: {
237
+ x: number;
238
+ y: number;
239
+ };
240
+ };
241
+ declare function getRectEdges(v: Rect): {
242
+ top: RectEdge;
243
+ right: RectEdge;
244
+ bottom: RectEdge;
245
+ left: RectEdge;
246
+ };
247
+
248
+ type CompassDirection = "n" | "ne" | "e" | "se" | "s" | "sw" | "w" | "nw";
249
+
250
+ declare function resizeRect(rect: Rect, offset: Point, direction: CompassDirection, opts: ScalingOptions): RectInit;
251
+
184
252
  declare function union(...rs: Rect[]): Rect;
185
253
 
186
- export { type AlignOptions, type DistanceValue, type ElementRectOptions, type HAlign, type Point, type Rect, type RectCenter, type RectCenters, type RectCorner, type RectCorners, type RectEdge, type RectEdges, type RectInset, type RectPoint, type RectPoints, type RectSide, type RectValue, type SymmetricRectInset, type VAlign, type WindowRectOptions, alignRect, closest, closestSideToPoint, closestSideToRect, collisions, contains, containsPoint, containsRect, createRect, debugPolygon, distance, distanceBtwEdges, distanceFromPoint, distanceFromRect, expand, fromRange, getElementPolygon, getElementRect, getRectCenters, getRectCorners, getRectEdges, getRectFromPoints, getRotationRect, getViewportRect, getWindowRect, inset, intersection, intersects, isPointInPolygon, isRect, isSymmetric, rotate, shift, shrink, toRad, union };
254
+ export { AffineTransform, type AlignOptions, type Bounds, type CenterPoint, type DistanceValue, type ElementRectOptions, type HAlign, type Point, type Rect, type RectCenter, type RectCenters, type RectCorner, type RectCorners, type RectEdge, type RectEdges, type RectInit, type RectInset, type RectPoint, type RectPoints, type RectSide, type ScalingOptions, type Size, type SymmetricRectInset, type VAlign, type WindowRectOptions, addPoints, alignRect, clampPoint, clampSize, closest, closestSideToPoint, closestSideToRect, collisions, constrainRect, contains, containsPoint, containsRect, createPoint, createRect, debugPolygon, distance, distanceBtwEdges, distanceFromPoint, distanceFromRect, expand, fromRange, getElementPolygon, getElementRect, getRectCenters, getRectCorners, getRectEdges, getRectFromPoints, getRotationRect, getViewportRect, getWindowRect, inset, intersection, intersects, isPoint, isPointEqual, isPointInPolygon, isRect, isRectEqual, isSizeEqual, isSymmetric, resizeRect, rotate, shift, shrink, subtractPoints, toRad, union };