@edv4h/usketch-shape-utils 2.2.11 → 2.3.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.
@@ -1,5 +1,6 @@
1
1
  import type { BoundingBox } from "@edv4h/usketch-shared";
2
2
  export type FreePositionStrategy = "ring" | "push";
3
+ export type FreePositionDirection = "right" | "left" | "down" | "up";
3
4
  export interface FindFreePositionOptions {
4
5
  /** 置きたい位置・サイズ(回転 shape は回転後 AABB を渡す)。 */
5
6
  desired: BoundingBox;
@@ -13,6 +14,16 @@ export interface FindFreePositionOptions {
13
14
  maxDistance?: number;
14
15
  /** push の反復上限(既定 50)。 */
15
16
  maxIterations?: number;
17
+ /**
18
+ * 指定すると strategy に関わらず、その方向へ一直線にずらして最初の空きを返す。
19
+ * ずらし幅は `step`、上限は `maxDistance`(超過時は best-effort で desired)。
20
+ */
21
+ direction?: FreePositionDirection;
22
+ /**
23
+ * 既存矩形との最小余白(world px、既定 0)。各 occupied を gap だけ膨らませて判定する。
24
+ * desired が既に空いている場合でも gap 内に既存があれば移動対象になる。
25
+ */
26
+ gap?: number;
16
27
  }
17
28
  /** box がいずれかの occupied と重なるか。 */
18
29
  export declare function overlapsAny(box: BoundingBox, occupied: BoundingBox[]): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"free-position.d.ts","sourceRoot":"","sources":["../src/free-position.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD,MAAM,WAAW,uBAAuB;IACvC,0CAA0C;IAC1C,OAAO,EAAE,WAAW,CAAC;IACrB,uBAAuB;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;CACvB;AAkBD,iCAAiC;AACjC,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAG9E;AAqFD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,WAAW,CAoB3E"}
1
+ {"version":3,"file":"free-position.d.ts","sourceRoot":"","sources":["../src/free-position.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnD,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;AAErE,MAAM,WAAW,uBAAuB;IACvC,0CAA0C;IAC1C,OAAO,EAAE,WAAW,CAAC;IACrB,uBAAuB;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,SAAS,CAAC,EAAE,qBAAqB,CAAC;IAClC;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AAkBD,iCAAiC;AACjC,wBAAgB,WAAW,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,OAAO,CAG9E;AAwGD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,uBAAuB,GAAG,WAAW,CAuC3E"}
@@ -96,26 +96,49 @@ function findByPush(opts) {
96
96
  }
97
97
  return box;
98
98
  }
99
+ /** 指定方向へ step 刻みでずらし、最初に衝突しない位置を返す。見つからなければ desired。 */
100
+ function findByDirection(desired, occupied, direction, step, maxDistance) {
101
+ const dx = direction === "right" ? 1 : direction === "left" ? -1 : 0;
102
+ const dy = direction === "down" ? 1 : direction === "up" ? -1 : 0;
103
+ for (let d = step; d <= maxDistance; d += step) {
104
+ const candidate = moveTo(desired, desired.x + dx * d, desired.y + dy * d);
105
+ if (!overlapsAny(candidate, occupied))
106
+ return candidate;
107
+ }
108
+ return desired;
109
+ }
99
110
  /**
100
111
  * `desired` に最も近い、occupied と重ならない位置(同サイズ)を返す。
101
112
  * `desired` がそのまま空いていればそのまま返す。
102
113
  */
103
114
  export function findFreePosition(opts) {
104
115
  const strategy = opts.strategy ?? "ring";
105
- if (opts.occupied.length === 0 || !overlapsAny(opts.desired, opts.occupied)) {
116
+ const gap = Math.max(0, opts.gap ?? 0);
117
+ const occupied = gap > 0
118
+ ? opts.occupied.map((o) => ({
119
+ x: o.x - gap,
120
+ y: o.y - gap,
121
+ width: o.width + gap * 2,
122
+ height: o.height + gap * 2,
123
+ }))
124
+ : opts.occupied;
125
+ if (occupied.length === 0 || !overlapsAny(opts.desired, occupied)) {
106
126
  return opts.desired;
107
127
  }
128
+ if (opts.direction) {
129
+ return findByDirection(opts.desired, occupied, opts.direction, opts.step ?? 20, opts.maxDistance ?? 2000);
130
+ }
108
131
  if (strategy === "push") {
109
132
  return findByPush({
110
133
  desired: opts.desired,
111
- occupied: opts.occupied,
134
+ occupied,
112
135
  strategy,
113
136
  maxIterations: opts.maxIterations ?? 50,
114
137
  });
115
138
  }
116
139
  return findByRing({
117
140
  desired: opts.desired,
118
- occupied: opts.occupied,
141
+ occupied,
119
142
  strategy,
120
143
  step: opts.step ?? 20,
121
144
  maxDistance: opts.maxDistance ?? 2000,
@@ -1 +1 @@
1
- {"version":3,"file":"free-position.js","sourceRoot":"","sources":["../src/free-position.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"free-position.js","sourceRoot":"","sources":["../src/free-position.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export { getBounds } from "./bounds.js";
2
2
  export { createEditableTextController, type EditableTextController, type EditableTextOptions, } from "./editable-text/controller.js";
3
3
  export { editableTextProps, TEXT_BLUR_EVENT, TEXT_ESCAPE_EVENT, TEXT_INPUT_EVENT, } from "./editable-text/render-props.js";
4
- export { type FindFreePositionOptions, type FreePositionStrategy, findFreePosition, overlapsAny, } from "./free-position.js";
4
+ export { type FindFreePositionOptions, type FreePositionDirection, type FreePositionStrategy, findFreePosition, overlapsAny, } from "./free-position.js";
5
5
  export { aabbHitTest, ellipseHitTest, lineHitTest, pointInPolygon } from "./hit-test.js";
6
- export { createResize } from "./resize.js";
6
+ export { type AspectResizeOptions, createAspectResize, createResize } from "./resize.js";
7
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACN,4BAA4B,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,WAAW,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACN,4BAA4B,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GACxB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACN,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,oBAAoB,EACzB,gBAAgB,EAChB,WAAW,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,KAAK,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -3,5 +3,5 @@ export { createEditableTextController, } from "./editable-text/controller.js";
3
3
  export { editableTextProps, TEXT_BLUR_EVENT, TEXT_ESCAPE_EVENT, TEXT_INPUT_EVENT, } from "./editable-text/render-props.js";
4
4
  export { findFreePosition, overlapsAny, } from "./free-position.js";
5
5
  export { aabbHitTest, ellipseHitTest, lineHitTest, pointInPolygon } from "./hit-test.js";
6
- export { createResize } from "./resize.js";
6
+ export { createAspectResize, createResize } from "./resize.js";
7
7
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACN,4BAA4B,GAG5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAGN,gBAAgB,EAChB,WAAW,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACN,4BAA4B,GAG5B,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACN,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,gBAAgB,GAChB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAIN,gBAAgB,EAChB,WAAW,GACX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzF,OAAO,EAA4B,kBAAkB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
package/dist/resize.d.ts CHANGED
@@ -1,3 +1,17 @@
1
1
  import type { Point, ResizeHandle, ShapeData } from "@edv4h/usketch-shared";
2
2
  export declare function createResize(minW: number, minH: number): (data: ShapeData, handle: ResizeHandle, delta: Point) => ShapeData;
3
+ export interface AspectResizeOptions {
4
+ /** Minimum width. Default `0`. */
5
+ minWidth?: number;
6
+ /** Minimum height (enforced by growing the width along the ratio). Default `0`. */
7
+ minHeight?: number;
8
+ }
9
+ /**
10
+ * Aspect-ratio-locked resize. `getAspect` returns width / height; a falsy
11
+ * result falls back to the shape's current ratio (then `1`). Corner and e/w
12
+ * handles drive the width, n/s drive the height; the opposite edge stays put
13
+ * and the cross axis stays centered for edge handles. Min size is applied
14
+ * along the ratio so clamping never distorts the shape.
15
+ */
16
+ export declare function createAspectResize(getAspect: (data: ShapeData) => number, options?: AspectResizeOptions): (data: ShapeData, handle: ResizeHandle, delta: Point) => ShapeData;
3
17
  //# sourceMappingURL=resize.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../src/resize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UACxC,SAAS,UAAU,YAAY,SAAS,KAAK,KAAG,SAAS,CA8CvE"}
1
+ {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../src/resize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAE5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UACxC,SAAS,UAAU,YAAY,SAAS,KAAK,KAAG,SAAS,CA8CvE;AAED,MAAM,WAAW,mBAAmB;IACnC,kCAAkC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CACjC,SAAS,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,MAAM,EACtC,OAAO,GAAE,mBAAwB,UAGnB,SAAS,UAAU,YAAY,SAAS,KAAK,KAAG,SAAS,CAwBvE"}
package/dist/resize.js CHANGED
@@ -46,4 +46,40 @@ export function createResize(minW, minH) {
46
46
  };
47
47
  };
48
48
  }
49
+ /**
50
+ * Aspect-ratio-locked resize. `getAspect` returns width / height; a falsy
51
+ * result falls back to the shape's current ratio (then `1`). Corner and e/w
52
+ * handles drive the width, n/s drive the height; the opposite edge stays put
53
+ * and the cross axis stays centered for edge handles. Min size is applied
54
+ * along the ratio so clamping never distorts the shape.
55
+ */
56
+ export function createAspectResize(getAspect, options = {}) {
57
+ const { minWidth = 0, minHeight = 0 } = options;
58
+ return (data, handle, delta) => {
59
+ const aspect = getAspect(data) || data.width / data.height || 1;
60
+ const usesVertical = handle === "n" || handle === "s";
61
+ let width;
62
+ if (usesVertical) {
63
+ const dh = handle === "n" ? -delta.y : delta.y;
64
+ width = (data.height + dh) * aspect;
65
+ }
66
+ else {
67
+ const dw = handle.includes("w") ? -delta.x : delta.x;
68
+ width = data.width + dw;
69
+ }
70
+ width = Math.max(width, minWidth, minHeight * aspect);
71
+ const height = width / aspect;
72
+ let x = data.x;
73
+ let y = data.y;
74
+ if (handle.includes("w"))
75
+ x = data.x + (data.width - width);
76
+ if (handle.includes("n"))
77
+ y = data.y + (data.height - height);
78
+ if (usesVertical)
79
+ x = data.x + (data.width - width) / 2;
80
+ if (handle === "e" || handle === "w")
81
+ y = data.y + (data.height - height) / 2;
82
+ return { ...data, x, y, width, height };
83
+ };
84
+ }
49
85
  //# sourceMappingURL=resize.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resize.js","sourceRoot":"","sources":["../src/resize.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,IAAY;IACtD,OAAO,CAAC,IAAe,EAAE,MAAoB,EAAE,KAAY,EAAa,EAAE;QACzE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QACnC,QAAQ,MAAM,EAAE,CAAC;YAChB,KAAK,IAAI;gBACR,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;gBAClB,MAAM;YACP,KAAK,IAAI;gBACR,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;gBACb,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;gBACb,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;gBAClB,MAAM;YACP,KAAK,IAAI;gBACR,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;gBACb,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;gBAClB,MAAM;YACP,KAAK,IAAI;gBACR,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;gBACb,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;gBAClB,MAAM;YACP,KAAK,GAAG;gBACP,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;gBACjB,MAAM;YACP,KAAK,GAAG;gBACP,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;gBACb,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC;gBACjB,MAAM;YACP,KAAK,GAAG;gBACP,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;gBAClB,MAAM;YACP,KAAK,GAAG;gBACP,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC;gBAClB,MAAM;QACR,CAAC;QACD,OAAO;YACN,GAAG,IAAI;YACP,CAAC;YACD,CAAC;YACD,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;YAC5B,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC;SAC9B,CAAC;IACH,CAAC,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"resize.js","sourceRoot":"","sources":["../src/resize.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edv4h/usketch-shape-utils",
3
- "version": "2.2.11",
3
+ "version": "2.3.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -12,7 +12,7 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@edv4h/usketch-shared": "4.15.0",
15
+ "@edv4h/usketch-shared": "4.17.0",
16
16
  "@zag-js/core": "^1.37.0",
17
17
  "@zag-js/vanilla": "^1.37.0"
18
18
  },
@@ -20,9 +20,9 @@
20
20
  "react": ">=19"
21
21
  },
22
22
  "devDependencies": {
23
- "@types/react": "19.2.18",
23
+ "@types/react": "19.3.0",
24
24
  "typescript": "7.0.2",
25
- "vitest": "5.0.3"
25
+ "vitest": "5.0.4"
26
26
  },
27
27
  "publishConfig": {
28
28
  "access": "public"