@griddle/core 0.1.5 → 0.1.6

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/README.md CHANGED
@@ -28,6 +28,18 @@ const json = grid.toJSON(); // serialize
28
28
  grid.loadJSON(json); // restore
29
29
  ```
30
30
 
31
+ ## Layout invariant
32
+
33
+ Ordinary in-flow tiles must always use positive integer footprints, remain
34
+ fully inside the configured grid, and never overlap. The constructor,
35
+ `addTile()`, `updateConfig()`, `reflow()`, and `loadJSON()` reject illegal
36
+ geometry without partially mutating the grid. Use
37
+ `addTileWithDisplacement()` when adding at an occupied position and you want
38
+ Griddle to move neighboring tiles into legal slots.
39
+
40
+ `absolute` and `fixed` tiles are intentionally out of flow, so they remain
41
+ exempt from grid-cell collision and containment checks.
42
+
31
43
  ## Adapter animation configuration
32
44
 
33
45
  Core stores and normalizes the animation settings shared by the React, Vue,
package/dist/grid.d.ts CHANGED
@@ -98,8 +98,9 @@ export declare class Grid {
98
98
  /**
99
99
  * Replace this grid's config and tiles with a snapshot, in bulk. Unlike
100
100
  * add/remove/resize this has no side effects (no gravity compaction, no
101
- * structural repack, no pack-on-toggle) the stored layout is restored
102
- * verbatim. Emits a single 'load' event.
101
+ * structural repack, no pack-on-toggle). Invalid snapshots are rejected
102
+ * atomically so the grid can never enter an overlapping/out-of-bounds state.
103
+ * Emits a single 'load' event.
103
104
  */
104
105
  loadJSON(snap: GridSnapshot): void;
105
106
  static fromJSON(snap: GridSnapshot): Grid;
@@ -1 +1 @@
1
- {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../src/grid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../src/grid.ts"],"names":[],"mappings":"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"}
package/dist/grid.js CHANGED
@@ -22,6 +22,48 @@ function defaultConfig(c) {
22
22
  animation: resolveAnimationConfig(c.animation),
23
23
  };
24
24
  }
25
+ function assertPositiveInteger(value, label) {
26
+ if (!Number.isInteger(value) || value <= 0) {
27
+ throw new RangeError(`Griddle: ${label} must be a positive integer`);
28
+ }
29
+ }
30
+ function rectInConfigBounds(config, rect) {
31
+ if (!config.infiniteX && (rect.col < 0 || rect.col + rect.w > config.cols)) {
32
+ return false;
33
+ }
34
+ if (config.infiniteX && rect.col < 0)
35
+ return false;
36
+ if (!config.infiniteY && (rect.row < 0 || rect.row + rect.h > config.rows)) {
37
+ return false;
38
+ }
39
+ return !config.infiniteY || rect.row >= 0;
40
+ }
41
+ function assertValidLayout(config, tiles) {
42
+ const ids = new Set();
43
+ const placed = [];
44
+ for (const tile of tiles) {
45
+ if (ids.has(tile.id)) {
46
+ throw new Error(`Griddle: duplicate tile id "${tile.id}"`);
47
+ }
48
+ ids.add(tile.id);
49
+ assertPositiveInteger(tile.w, `tile "${tile.id}" width`);
50
+ assertPositiveInteger(tile.h, `tile "${tile.id}" height`);
51
+ if (!isInFlow(tile))
52
+ continue;
53
+ if (!Number.isInteger(tile.col) || !Number.isInteger(tile.row)) {
54
+ throw new RangeError(`Griddle: tile "${tile.id}" position must use integer cells`);
55
+ }
56
+ const rect = tileRect(tile);
57
+ if (!rectInConfigBounds(config, rect)) {
58
+ throw new RangeError(`Griddle: tile "${tile.id}" is outside the grid bounds`);
59
+ }
60
+ const collision = placed.find((other) => rectsOverlap(tileRect(other), rect));
61
+ if (collision) {
62
+ throw new RangeError(`Griddle: tiles "${collision.id}" and "${tile.id}" overlap`);
63
+ }
64
+ placed.push(tile);
65
+ }
66
+ }
25
67
  function findNearestFreeCell(grid, victim, avoid, selfId) {
26
68
  const visited = new Set();
27
69
  const queue = [{ col: victim.col, row: victim.row }];
@@ -52,8 +94,10 @@ export class Grid {
52
94
  this.changes = new Emitter();
53
95
  this.config = defaultConfig(config);
54
96
  assertLoopable(this.config);
55
- for (const t of initialTiles)
56
- this.tilesById.set(t.id, { ...t });
97
+ const tiles = initialTiles.map((tile) => ({ ...tile }));
98
+ assertValidLayout(this.config, tiles);
99
+ for (const tile of tiles)
100
+ this.tilesById.set(tile.id, tile);
57
101
  // Note: no auto-pack here even when loop starts enabled — packing fires
58
102
  // only on the loop off->on toggle (see updateConfig). Constructing or
59
103
  // loading a snapshot respects the stored layout as-is.
@@ -69,6 +113,7 @@ export class Grid {
69
113
  : this.config.animation,
70
114
  });
71
115
  assertLoopable(next);
116
+ assertValidLayout(next, this.tiles);
72
117
  this.config = next;
73
118
  this.changes.emit({ type: 'config', tileIds: [] });
74
119
  // Loop repeats the content's bounding box; holes inside it would repeat
@@ -160,7 +205,9 @@ export class Grid {
160
205
  if (this.tilesById.has(tile.id)) {
161
206
  throw new Error(`Griddle: duplicate tile id "${tile.id}"`);
162
207
  }
163
- this.tilesById.set(tile.id, { ...tile });
208
+ const next = { ...tile };
209
+ assertValidLayout(this.config, [...this.tiles, next]);
210
+ this.tilesById.set(tile.id, next);
164
211
  this.changes.emit({ type: 'add', tileIds: [tile.id] });
165
212
  if (this.config.gravity && this.config.gravity !== 'none') {
166
213
  this.compactAll();
@@ -176,6 +223,14 @@ export class Grid {
176
223
  if (this.tilesById.has(tile.id)) {
177
224
  throw new Error(`Griddle: duplicate tile id "${tile.id}"`);
178
225
  }
226
+ assertPositiveInteger(tile.w, `tile "${tile.id}" width`);
227
+ assertPositiveInteger(tile.h, `tile "${tile.id}" height`);
228
+ if (!isInFlow(tile)) {
229
+ this.addTile(tile);
230
+ return true;
231
+ }
232
+ if (!Number.isInteger(tile.col) || !Number.isInteger(tile.row))
233
+ return false;
179
234
  const newRect = { col: tile.col, row: tile.row, w: tile.w, h: tile.h };
180
235
  if (!this.rectInBounds(newRect))
181
236
  return false;
@@ -216,6 +271,13 @@ export class Grid {
216
271
  return false;
217
272
  }
218
273
  }
274
+ try {
275
+ assertValidLayout(this.config, this.tiles);
276
+ }
277
+ catch {
278
+ this.restoreTiles(snapshot);
279
+ return false;
280
+ }
219
281
  this.changes.emit({ type: 'add', tileIds: [tile.id] });
220
282
  if (this.config.gravity && this.config.gravity !== 'none')
221
283
  this.compactAll();
@@ -272,8 +334,16 @@ export class Grid {
272
334
  return false;
273
335
  if (tile.col === target.col && tile.row === target.row)
274
336
  return true;
337
+ const snapshot = this.snapshotTiles();
275
338
  const ok = moveEngine(this, id, target);
276
339
  if (ok) {
340
+ try {
341
+ assertValidLayout(this.config, this.tiles);
342
+ }
343
+ catch {
344
+ this.restoreTiles(snapshot);
345
+ return false;
346
+ }
277
347
  this.changes.emit({ type: 'move', tileIds: this.tiles.map((t) => t.id) });
278
348
  if (this.config.gravity && this.config.gravity !== 'none') {
279
349
  this.compactAll();
@@ -350,6 +420,13 @@ export class Grid {
350
420
  return false;
351
421
  }
352
422
  }
423
+ try {
424
+ assertValidLayout(this.config, this.tiles);
425
+ }
426
+ catch {
427
+ this.restoreTiles(snapshot);
428
+ return false;
429
+ }
353
430
  this.changes.emit({ type: 'move', tileIds: this.tiles.map((t) => t.id) });
354
431
  if (this.config.gravity && this.config.gravity !== 'none') {
355
432
  this.compactAll();
@@ -393,13 +470,20 @@ export class Grid {
393
470
  const tile = this.tilesById.get(id);
394
471
  if (!tile)
395
472
  return false;
396
- tile.position = position;
473
+ const candidate = { ...tile, position };
397
474
  if (opts.pinned !== undefined)
398
- tile.pinned = { ...opts.pinned };
475
+ candidate.pinned = { ...opts.pinned };
399
476
  if (opts.offset !== undefined)
400
- tile.offset = { ...opts.offset };
477
+ candidate.offset = { ...opts.offset };
401
478
  if (opts.sticky !== undefined)
402
- tile.sticky = { ...opts.sticky };
479
+ candidate.sticky = { ...opts.sticky };
480
+ try {
481
+ assertValidLayout(this.config, this.tiles.map((current) => current.id === id ? candidate : current));
482
+ }
483
+ catch {
484
+ return false;
485
+ }
486
+ Object.assign(tile, candidate);
403
487
  this.changes.emit({ type: 'move', tileIds: [id] });
404
488
  return true;
405
489
  }
@@ -471,6 +555,13 @@ export class Grid {
471
555
  }
472
556
  }
473
557
  }
558
+ try {
559
+ assertValidLayout(this.config, this.tiles);
560
+ }
561
+ catch {
562
+ this.restoreTiles(snapshot);
563
+ return false;
564
+ }
474
565
  this.changes.emit({ type: 'resize', tileIds: [id] });
475
566
  if (this.config.gravity && this.config.gravity !== 'none')
476
567
  this.compactAll();
@@ -561,8 +652,9 @@ export class Grid {
561
652
  /**
562
653
  * Replace this grid's config and tiles with a snapshot, in bulk. Unlike
563
654
  * add/remove/resize this has no side effects (no gravity compaction, no
564
- * structural repack, no pack-on-toggle) the stored layout is restored
565
- * verbatim. Emits a single 'load' event.
655
+ * structural repack, no pack-on-toggle). Invalid snapshots are rejected
656
+ * atomically so the grid can never enter an overlapping/out-of-bounds state.
657
+ * Emits a single 'load' event.
566
658
  */
567
659
  loadJSON(snap) {
568
660
  if (snap.version !== 1) {
@@ -570,10 +662,12 @@ export class Grid {
570
662
  }
571
663
  const next = defaultConfig(snap.config);
572
664
  assertLoopable(next);
665
+ const tiles = snap.tiles.map((tile) => ({ ...tile }));
666
+ assertValidLayout(next, tiles);
573
667
  this.config = next;
574
668
  this.tilesById.clear();
575
- for (const t of snap.tiles)
576
- this.tilesById.set(t.id, { ...t });
669
+ for (const tile of tiles)
670
+ this.tilesById.set(tile.id, tile);
577
671
  this.changes.emit({ type: 'load', tileIds: this.tiles.map((t) => t.id) });
578
672
  }
579
673
  static fromJSON(snap) {
package/dist/grid.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"grid.js","sourceRoot":"","sources":["../src/grid.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["../src/grid.ts"],"names":[],"mappings":"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"}
package/dist/reflow.d.ts CHANGED
@@ -7,7 +7,7 @@ export interface ReflowOptions {
7
7
  cols: number;
8
8
  /** Immutable algorithm identifier. */
9
9
  strategy: ReflowStrategy;
10
- /** Optional caller-supplied geometry that remains authoritative. */
10
+ /** Optional caller-supplied geometry; authoritative when legal. */
11
11
  placements?: Readonly<Record<string, CellRect>>;
12
12
  }
13
13
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"reflow.d.ts","sourceRoot":"","sources":["../src/reflow.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEjD,6DAA6D;AAC7D,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;AAE3C,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,QAAQ,EAAE,cAAc,CAAC;IACzB,oEAAoE;IACpE,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CACjD;AA8GD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,OAAO,EAAE,aAAa,GACrB,IAAI,EAAE,CAMR"}
1
+ {"version":3,"file":"reflow.d.ts","sourceRoot":"","sources":["../src/reflow.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEjD,6DAA6D;AAC7D,MAAM,MAAM,cAAc,GAAG,aAAa,CAAC;AAE3C,sDAAsD;AACtD,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,QAAQ,EAAE,cAAc,CAAC;IACzB,mEAAmE;IACnE,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;CACjD;AAwJD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,SAAS,IAAI,EAAE,EACtB,OAAO,EAAE,aAAa,GACrB,IAAI,EAAE,CAMR"}
package/dist/reflow.js CHANGED
@@ -13,6 +13,9 @@ function assertOptions(options) {
13
13
  }
14
14
  }
15
15
  function scaleTileToFit(tile, cols) {
16
+ if (!Number.isInteger(tile.w) || tile.w <= 0 || !Number.isInteger(tile.h) || tile.h <= 0) {
17
+ throw new RangeError(`Griddle: tile "${tile.id}" footprint must use positive integer cells`);
18
+ }
16
19
  if (tile.w <= cols)
17
20
  return { ...tile };
18
21
  const scale = cols / tile.w;
@@ -22,6 +25,27 @@ function scaleTileToFit(tile, cols) {
22
25
  h: Math.max(1, Math.round(tile.h * scale)),
23
26
  };
24
27
  }
28
+ function assertFiniteLayout(tiles, cols) {
29
+ const placed = [];
30
+ for (const tile of tiles) {
31
+ if (!Number.isInteger(tile.col) ||
32
+ !Number.isInteger(tile.row) ||
33
+ !Number.isInteger(tile.w) ||
34
+ !Number.isInteger(tile.h) ||
35
+ tile.col < 0 ||
36
+ tile.row < 0 ||
37
+ tile.w <= 0 ||
38
+ tile.h <= 0 ||
39
+ tile.col + tile.w > cols) {
40
+ throw new RangeError(`Griddle: reflow placement for tile "${tile.id}" is outside the grid bounds`);
41
+ }
42
+ const collision = placed.find((other) => rectsOverlap(tileRect(other), tileRect(tile)));
43
+ if (collision) {
44
+ throw new RangeError(`Griddle: reflow placements for tiles "${collision.id}" and "${tile.id}" overlap`);
45
+ }
46
+ placed.push(tile);
47
+ }
48
+ }
25
49
  function findFirstAvailableSpot(placed, width, height, cols, startRow = 0) {
26
50
  const candidate = {
27
51
  col: 0,
@@ -50,7 +74,11 @@ function reflowWithoutPlacements(tiles, cols) {
50
74
  const placed = [];
51
75
  for (const tile of ordered) {
52
76
  const scaled = scaleTileToFit(tile, cols);
53
- const withinBounds = scaled.col >= 0 && scaled.col + scaled.w <= cols;
77
+ const withinBounds = Number.isInteger(scaled.col) &&
78
+ Number.isInteger(scaled.row) &&
79
+ scaled.col >= 0 &&
80
+ scaled.row >= 0 &&
81
+ scaled.col + scaled.w <= cols;
54
82
  const canKeepPosition = withinBounds &&
55
83
  !placed.some((other) => rectsOverlap(tileRect(other), tileRect(scaled)));
56
84
  if (canKeepPosition) {
@@ -61,7 +89,9 @@ function reflowWithoutPlacements(tiles, cols) {
61
89
  placed.push({ ...scaled, ...position });
62
90
  }
63
91
  const placedById = new Map(placed.map((tile) => [tile.id, tile]));
64
- return tiles.map((tile) => placedById.get(tile.id) ?? { ...tile });
92
+ const result = tiles.map((tile) => placedById.get(tile.id) ?? { ...tile });
93
+ assertFiniteLayout(result, cols);
94
+ return result;
65
95
  }
66
96
  function reflowWithPlacements(tiles, cols, placements) {
67
97
  const positioned = [];
@@ -69,17 +99,22 @@ function reflowWithPlacements(tiles, cols, placements) {
69
99
  for (const tile of tiles) {
70
100
  const placement = placements[tile.id];
71
101
  if (placement) {
72
- positioned.push({ ...tile, ...placement });
102
+ positioned.push(scaleTileToFit({ ...tile, ...placement }, cols));
73
103
  }
74
104
  else {
75
105
  missing.push(scaleTileToFit(tile, cols));
76
106
  }
77
107
  }
108
+ // Explicit placements are authoritative, but they are not allowed to break
109
+ // the core layout invariant. Reject them before placing missing tiles so an
110
+ // invalid width cannot make the open-slot scan run forever.
111
+ assertFiniteLayout(positioned, cols);
78
112
  const projected = [...positioned];
79
113
  for (const tile of missing) {
80
114
  const position = findFirstAvailableSpot(projected, tile.w, tile.h, cols);
81
115
  projected.push({ ...tile, ...position });
82
116
  }
117
+ assertFiniteLayout(projected, cols);
83
118
  return projected;
84
119
  }
85
120
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"reflow.js","sourceRoot":"","sources":["../src/reflow.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reflow.js","sourceRoot":"","sources":["../src/reflow.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@griddle/core",
3
- "version": "0.1.5",
3
+ "version": "0.1.6",
4
4
  "description": "Headless grid/canvas engine. Zero runtime dependencies.",
5
5
  "keywords": [
6
6
  "grid",
package/src/grid.ts CHANGED
@@ -43,6 +43,52 @@ function defaultConfig(c: GridConfig): GridConfig {
43
43
  };
44
44
  }
45
45
 
46
+ function assertPositiveInteger(value: number, label: string): void {
47
+ if (!Number.isInteger(value) || value <= 0) {
48
+ throw new RangeError(`Griddle: ${label} must be a positive integer`);
49
+ }
50
+ }
51
+
52
+ function rectInConfigBounds(config: GridConfig, rect: CellRect): boolean {
53
+ if (!config.infiniteX && (rect.col < 0 || rect.col + rect.w > config.cols)) {
54
+ return false;
55
+ }
56
+ if (config.infiniteX && rect.col < 0) return false;
57
+ if (!config.infiniteY && (rect.row < 0 || rect.row + rect.h > config.rows)) {
58
+ return false;
59
+ }
60
+ return !config.infiniteY || rect.row >= 0;
61
+ }
62
+
63
+ function assertValidLayout(config: GridConfig, tiles: readonly Tile[]): void {
64
+ const ids = new Set<string>();
65
+ const placed: Tile[] = [];
66
+
67
+ for (const tile of tiles) {
68
+ if (ids.has(tile.id)) {
69
+ throw new Error(`Griddle: duplicate tile id "${tile.id}"`);
70
+ }
71
+ ids.add(tile.id);
72
+ assertPositiveInteger(tile.w, `tile "${tile.id}" width`);
73
+ assertPositiveInteger(tile.h, `tile "${tile.id}" height`);
74
+ if (!isInFlow(tile)) continue;
75
+ if (!Number.isInteger(tile.col) || !Number.isInteger(tile.row)) {
76
+ throw new RangeError(`Griddle: tile "${tile.id}" position must use integer cells`);
77
+ }
78
+ const rect = tileRect(tile);
79
+ if (!rectInConfigBounds(config, rect)) {
80
+ throw new RangeError(`Griddle: tile "${tile.id}" is outside the grid bounds`);
81
+ }
82
+ const collision = placed.find((other) => rectsOverlap(tileRect(other), rect));
83
+ if (collision) {
84
+ throw new RangeError(
85
+ `Griddle: tiles "${collision.id}" and "${tile.id}" overlap`,
86
+ );
87
+ }
88
+ placed.push(tile);
89
+ }
90
+ }
91
+
46
92
  function findNearestFreeCell(
47
93
  grid: Grid,
48
94
  victim: Tile,
@@ -80,7 +126,9 @@ export class Grid {
80
126
  constructor(config: GridConfig, initialTiles: Tile[] = []) {
81
127
  this.config = defaultConfig(config);
82
128
  assertLoopable(this.config);
83
- for (const t of initialTiles) this.tilesById.set(t.id, { ...t });
129
+ const tiles = initialTiles.map((tile) => ({ ...tile }));
130
+ assertValidLayout(this.config, tiles);
131
+ for (const tile of tiles) this.tilesById.set(tile.id, tile);
84
132
  // Note: no auto-pack here even when loop starts enabled — packing fires
85
133
  // only on the loop off->on toggle (see updateConfig). Constructing or
86
134
  // loading a snapshot respects the stored layout as-is.
@@ -98,6 +146,7 @@ export class Grid {
98
146
  : this.config.animation,
99
147
  });
100
148
  assertLoopable(next);
149
+ assertValidLayout(next, this.tiles);
101
150
  this.config = next;
102
151
  this.changes.emit({ type: 'config', tileIds: [] });
103
152
  // Loop repeats the content's bounding box; holes inside it would repeat
@@ -190,7 +239,9 @@ export class Grid {
190
239
  if (this.tilesById.has(tile.id)) {
191
240
  throw new Error(`Griddle: duplicate tile id "${tile.id}"`);
192
241
  }
193
- this.tilesById.set(tile.id, { ...tile });
242
+ const next = { ...tile };
243
+ assertValidLayout(this.config, [...this.tiles, next]);
244
+ this.tilesById.set(tile.id, next);
194
245
  this.changes.emit({ type: 'add', tileIds: [tile.id] });
195
246
  if (this.config.gravity && this.config.gravity !== 'none') {
196
247
  this.compactAll();
@@ -207,6 +258,13 @@ export class Grid {
207
258
  if (this.tilesById.has(tile.id)) {
208
259
  throw new Error(`Griddle: duplicate tile id "${tile.id}"`);
209
260
  }
261
+ assertPositiveInteger(tile.w, `tile "${tile.id}" width`);
262
+ assertPositiveInteger(tile.h, `tile "${tile.id}" height`);
263
+ if (!isInFlow(tile)) {
264
+ this.addTile(tile);
265
+ return true;
266
+ }
267
+ if (!Number.isInteger(tile.col) || !Number.isInteger(tile.row)) return false;
210
268
  const newRect: CellRect = { col: tile.col, row: tile.row, w: tile.w, h: tile.h };
211
269
  if (!this.rectInBounds(newRect)) return false;
212
270
 
@@ -249,6 +307,13 @@ export class Grid {
249
307
  }
250
308
  }
251
309
 
310
+ try {
311
+ assertValidLayout(this.config, this.tiles);
312
+ } catch {
313
+ this.restoreTiles(snapshot);
314
+ return false;
315
+ }
316
+
252
317
  this.changes.emit({ type: 'add', tileIds: [tile.id] });
253
318
  if (this.config.gravity && this.config.gravity !== 'none') this.compactAll();
254
319
  this._structuralRepack();
@@ -301,8 +366,15 @@ export class Grid {
301
366
  if (!tile) return false;
302
367
  if (!isInFlow(tile)) return false;
303
368
  if (tile.col === target.col && tile.row === target.row) return true;
369
+ const snapshot = this.snapshotTiles();
304
370
  const ok = moveEngine(this, id, target);
305
371
  if (ok) {
372
+ try {
373
+ assertValidLayout(this.config, this.tiles);
374
+ } catch {
375
+ this.restoreTiles(snapshot);
376
+ return false;
377
+ }
306
378
  this.changes.emit({ type: 'move', tileIds: this.tiles.map((t) => t.id) });
307
379
  if (this.config.gravity && this.config.gravity !== 'none') {
308
380
  this.compactAll();
@@ -383,6 +455,13 @@ export class Grid {
383
455
  }
384
456
  }
385
457
 
458
+ try {
459
+ assertValidLayout(this.config, this.tiles);
460
+ } catch {
461
+ this.restoreTiles(snapshot);
462
+ return false;
463
+ }
464
+
386
465
  this.changes.emit({ type: 'move', tileIds: this.tiles.map((t) => t.id) });
387
466
  if (this.config.gravity && this.config.gravity !== 'none') {
388
467
  this.compactAll();
@@ -434,10 +513,19 @@ export class Grid {
434
513
  ): boolean {
435
514
  const tile = this.tilesById.get(id);
436
515
  if (!tile) return false;
437
- tile.position = position;
438
- if (opts.pinned !== undefined) tile.pinned = { ...opts.pinned };
439
- if (opts.offset !== undefined) tile.offset = { ...opts.offset };
440
- if (opts.sticky !== undefined) tile.sticky = { ...opts.sticky };
516
+ const candidate: Tile = { ...tile, position };
517
+ if (opts.pinned !== undefined) candidate.pinned = { ...opts.pinned };
518
+ if (opts.offset !== undefined) candidate.offset = { ...opts.offset };
519
+ if (opts.sticky !== undefined) candidate.sticky = { ...opts.sticky };
520
+ try {
521
+ assertValidLayout(
522
+ this.config,
523
+ this.tiles.map((current) => current.id === id ? candidate : current),
524
+ );
525
+ } catch {
526
+ return false;
527
+ }
528
+ Object.assign(tile, candidate);
441
529
  this.changes.emit({ type: 'move', tileIds: [id] });
442
530
  return true;
443
531
  }
@@ -511,6 +599,13 @@ export class Grid {
511
599
  }
512
600
  }
513
601
 
602
+ try {
603
+ assertValidLayout(this.config, this.tiles);
604
+ } catch {
605
+ this.restoreTiles(snapshot);
606
+ return false;
607
+ }
608
+
514
609
  this.changes.emit({ type: 'resize', tileIds: [id] });
515
610
  if (this.config.gravity && this.config.gravity !== 'none') this.compactAll();
516
611
  this._structuralRepack();
@@ -609,8 +704,9 @@ export class Grid {
609
704
  /**
610
705
  * Replace this grid's config and tiles with a snapshot, in bulk. Unlike
611
706
  * add/remove/resize this has no side effects (no gravity compaction, no
612
- * structural repack, no pack-on-toggle) the stored layout is restored
613
- * verbatim. Emits a single 'load' event.
707
+ * structural repack, no pack-on-toggle). Invalid snapshots are rejected
708
+ * atomically so the grid can never enter an overlapping/out-of-bounds state.
709
+ * Emits a single 'load' event.
614
710
  */
615
711
  loadJSON(snap: GridSnapshot): void {
616
712
  if (snap.version !== 1) {
@@ -618,9 +714,11 @@ export class Grid {
618
714
  }
619
715
  const next = defaultConfig(snap.config);
620
716
  assertLoopable(next);
717
+ const tiles = snap.tiles.map((tile) => ({ ...tile }));
718
+ assertValidLayout(next, tiles);
621
719
  this.config = next;
622
720
  this.tilesById.clear();
623
- for (const t of snap.tiles) this.tilesById.set(t.id, { ...t });
721
+ for (const tile of tiles) this.tilesById.set(tile.id, tile);
624
722
  this.changes.emit({ type: 'load', tileIds: this.tiles.map((t) => t.id) });
625
723
  }
626
724
 
package/src/reflow.ts CHANGED
@@ -16,7 +16,7 @@ export interface ReflowOptions {
16
16
  cols: number;
17
17
  /** Immutable algorithm identifier. */
18
18
  strategy: ReflowStrategy;
19
- /** Optional caller-supplied geometry that remains authoritative. */
19
+ /** Optional caller-supplied geometry; authoritative when legal. */
20
20
  placements?: Readonly<Record<string, CellRect>>;
21
21
  }
22
22
 
@@ -30,6 +30,9 @@ function assertOptions(options: ReflowOptions): void {
30
30
  }
31
31
 
32
32
  function scaleTileToFit(tile: Tile, cols: number): Tile {
33
+ if (!Number.isInteger(tile.w) || tile.w <= 0 || !Number.isInteger(tile.h) || tile.h <= 0) {
34
+ throw new RangeError(`Griddle: tile "${tile.id}" footprint must use positive integer cells`);
35
+ }
33
36
  if (tile.w <= cols) return { ...tile };
34
37
  const scale = cols / tile.w;
35
38
  return {
@@ -39,6 +42,32 @@ function scaleTileToFit(tile: Tile, cols: number): Tile {
39
42
  };
40
43
  }
41
44
 
45
+ function assertFiniteLayout(tiles: readonly Tile[], cols: number): void {
46
+ const placed: Tile[] = [];
47
+ for (const tile of tiles) {
48
+ if (
49
+ !Number.isInteger(tile.col) ||
50
+ !Number.isInteger(tile.row) ||
51
+ !Number.isInteger(tile.w) ||
52
+ !Number.isInteger(tile.h) ||
53
+ tile.col < 0 ||
54
+ tile.row < 0 ||
55
+ tile.w <= 0 ||
56
+ tile.h <= 0 ||
57
+ tile.col + tile.w > cols
58
+ ) {
59
+ throw new RangeError(`Griddle: reflow placement for tile "${tile.id}" is outside the grid bounds`);
60
+ }
61
+ const collision = placed.find((other) => rectsOverlap(tileRect(other), tileRect(tile)));
62
+ if (collision) {
63
+ throw new RangeError(
64
+ `Griddle: reflow placements for tiles "${collision.id}" and "${tile.id}" overlap`,
65
+ );
66
+ }
67
+ placed.push(tile);
68
+ }
69
+ }
70
+
42
71
  function findFirstAvailableSpot(
43
72
  placed: readonly Tile[],
44
73
  width: number,
@@ -74,7 +103,12 @@ function reflowWithoutPlacements(tiles: readonly Tile[], cols: number): Tile[] {
74
103
 
75
104
  for (const tile of ordered) {
76
105
  const scaled = scaleTileToFit(tile, cols);
77
- const withinBounds = scaled.col >= 0 && scaled.col + scaled.w <= cols;
106
+ const withinBounds =
107
+ Number.isInteger(scaled.col) &&
108
+ Number.isInteger(scaled.row) &&
109
+ scaled.col >= 0 &&
110
+ scaled.row >= 0 &&
111
+ scaled.col + scaled.w <= cols;
78
112
  const canKeepPosition =
79
113
  withinBounds &&
80
114
  !placed.some((other) => rectsOverlap(tileRect(other), tileRect(scaled)));
@@ -95,7 +129,9 @@ function reflowWithoutPlacements(tiles: readonly Tile[], cols: number): Tile[] {
95
129
  }
96
130
 
97
131
  const placedById = new Map(placed.map((tile) => [tile.id, tile]));
98
- return tiles.map((tile) => placedById.get(tile.id) ?? { ...tile });
132
+ const result = tiles.map((tile) => placedById.get(tile.id) ?? { ...tile });
133
+ assertFiniteLayout(result, cols);
134
+ return result;
99
135
  }
100
136
 
101
137
  function reflowWithPlacements(
@@ -109,12 +145,17 @@ function reflowWithPlacements(
109
145
  for (const tile of tiles) {
110
146
  const placement = placements[tile.id];
111
147
  if (placement) {
112
- positioned.push({ ...tile, ...placement });
148
+ positioned.push(scaleTileToFit({ ...tile, ...placement }, cols));
113
149
  } else {
114
150
  missing.push(scaleTileToFit(tile, cols));
115
151
  }
116
152
  }
117
153
 
154
+ // Explicit placements are authoritative, but they are not allowed to break
155
+ // the core layout invariant. Reject them before placing missing tiles so an
156
+ // invalid width cannot make the open-slot scan run forever.
157
+ assertFiniteLayout(positioned, cols);
158
+
118
159
  const projected = [...positioned];
119
160
  for (const tile of missing) {
120
161
  const position = findFirstAvailableSpot(
@@ -125,6 +166,7 @@ function reflowWithPlacements(
125
166
  );
126
167
  projected.push({ ...tile, ...position });
127
168
  }
169
+ assertFiniteLayout(projected, cols);
128
170
  return projected;
129
171
  }
130
172