@edv4h/usketch-plugin-map 0.7.0 → 0.9.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.ts CHANGED
@@ -1,10 +1,14 @@
1
1
  export { BASE_MAP_TYPE, type BaseInfo, type BaseMapShapeData, } from "./base/base-map-shape.js";
2
2
  export { type BaseToolState, baseStateStore, useBaseState } from "./base/base-state.js";
3
3
  export { computeTerritory, type Territory } from "./base/territory.js";
4
+ export { type BaseGenParams, baseTerrainAt, DEFAULT_BASE_GEN } from "./base-terrain.js";
4
5
  export { type GenState, genStateStore, useGenState, type WorldRect } from "./gen-state.js";
6
+ export { resolveTilemap } from "./generate.js";
5
7
  export { GENERATORS, type GenContext, type GenParam, type MapGenerator, } from "./generators/index.js";
6
8
  export { ICONS, type IconCategory, type IconDef } from "./icons.js";
9
+ export { DEFAULT_INFINITE_SEED, disableInfiniteTerrain, type EnableInfiniteTerrainOptions, enableInfiniteTerrain, getInfiniteSeed, isInfiniteTerrainEnabled, setInfiniteSeed, } from "./infinite-terrain.js";
7
10
  export { MAP_ICON_TYPE, type MapIconShapeData } from "./map-icon-shape.js";
11
+ export { createMapApi, getMapApi, type MapApi, mapService } from "./map-service.js";
8
12
  export { MAP_TOOL_ID } from "./map-tool-id.js";
9
13
  export type { ColorMode } from "./palette.js";
10
14
  export { createMapPlugin, type MapPluginOptions } from "./plugin.js";
@@ -12,6 +16,7 @@ export { type RangeEraseTargets, rangeEraseStore, useRangeEraseTargets, } from "
12
16
  export type { ReactiveStore } from "./reactive-store.js";
13
17
  export { type LineStyle, type MapRenderConfig, renderConfigStore, } from "./render-config.js";
14
18
  export { TERRAINS, type TerrainDef, type TerrainKey } from "./terrain.js";
15
- export { DEFAULT_TILE, TILEMAP_TYPE, type TileMapShapeData } from "./tilemap-shape.js";
19
+ export { DEFAULT_TILE, isTileMap, lowestTilemap, makeTileMap, seededTilemap, TILEMAP_TYPE, type TileMapShapeData, } from "./tilemap-shape.js";
16
20
  export { MAP_MODES, type MapMode, type MapToolState, toolStateStore, useMapToolState, } from "./tool-state.js";
21
+ export { type InfiniteTerrainControls, useInfiniteTerrain, } from "./use-infinite-terrain.js";
17
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,gBAAgB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,KAAK,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EACN,UAAU,EACV,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,YAAY,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACN,KAAK,iBAAiB,EACtB,eAAe,EACf,oBAAoB,GACpB,MAAM,wBAAwB,CAAC;AAMhC,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACN,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACvF,OAAO,EACN,SAAS,EACT,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,cAAc,EACd,eAAe,GACf,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,gBAAgB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,KAAK,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,KAAK,aAAa,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAE,KAAK,QAAQ,EAAE,aAAa,EAAE,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAK3F,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACN,UAAU,EACV,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,KAAK,YAAY,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,KAAK,YAAY,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAMpE,OAAO,EACN,qBAAqB,EACrB,sBAAsB,EACtB,KAAK,4BAA4B,EACjC,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,eAAe,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAI3E,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EACN,KAAK,iBAAiB,EACtB,eAAe,EACf,oBAAoB,GACpB,MAAM,wBAAwB,CAAC;AAMhC,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EACN,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAE,KAAK,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EACN,YAAY,EACZ,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,EACZ,KAAK,gBAAgB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,SAAS,EACT,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,cAAc,EACd,eAAe,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,KAAK,uBAAuB,EAC5B,kBAAkB,GAClB,MAAM,2BAA2B,CAAC"}
package/dist/index.js CHANGED
@@ -1,15 +1,32 @@
1
1
  export { BASE_MAP_TYPE, } from "./base/base-map-shape.js";
2
2
  export { baseStateStore, useBaseState } from "./base/base-state.js";
3
3
  export { computeTerritory } from "./base/territory.js";
4
+ export { baseTerrainAt, DEFAULT_BASE_GEN } from "./base-terrain.js";
4
5
  export { genStateStore, useGenState } from "./gen-state.js";
6
+ // NOTE: `resolveTilemap` returns the FIRST tilemap in iteration order (or creates
7
+ // one) — NOT deterministic across synced peers when several tilemaps exist. For
8
+ // deterministic selection use `seededTilemap` / `lowestTilemap`, or the
9
+ // `enableInfiniteTerrain` API which already picks deterministically.
10
+ export { resolveTilemap } from "./generate.js";
5
11
  export { GENERATORS, } from "./generators/index.js";
6
12
  export { ICONS } from "./icons.js";
13
+ // ── Infinite base terrain public API (#946 / #937 follow-up) ──
14
+ // Enable/disable/seed the infinite base terrain from a host's own UI without the
15
+ // Control HUD. Same logic the HUD toggle runs; the seed lives on the tilemap
16
+ // shape (synced/persisted), so these take a BoardStore. Use the functions for
17
+ // imperative control, or `useInfiniteTerrain(store)` for a reactive React binding.
18
+ export { DEFAULT_INFINITE_SEED, disableInfiniteTerrain, enableInfiniteTerrain, getInfiniteSeed, isInfiniteTerrainEnabled, setInfiniteSeed, } from "./infinite-terrain.js";
7
19
  export { MAP_ICON_TYPE } from "./map-icon-shape.js";
20
+ // ── Host-facing service (recommended seam; #927/#946 pattern generalized) ──
21
+ // `getMapApi(app.services)?.enableInfiniteTerrain({ seed })` from a host, without
22
+ // the Control HUD and without importing individual helpers (undefined if absent).
23
+ export { createMapApi, getMapApi, mapService } from "./map-service.js";
8
24
  export { MAP_TOOL_ID } from "./map-tool-id.js";
9
25
  export { createMapPlugin } from "./plugin.js";
10
26
  export { rangeEraseStore, useRangeEraseTargets, } from "./range-erase-state.js";
11
27
  export { renderConfigStore, } from "./render-config.js";
12
28
  export { TERRAINS } from "./terrain.js";
13
- export { DEFAULT_TILE, TILEMAP_TYPE } from "./tilemap-shape.js";
29
+ export { DEFAULT_TILE, isTileMap, lowestTilemap, makeTileMap, seededTilemap, TILEMAP_TYPE, } from "./tilemap-shape.js";
14
30
  export { MAP_MODES, toolStateStore, useMapToolState, } from "./tool-state.js";
31
+ export { useInfiniteTerrain, } from "./use-infinite-terrain.js";
15
32
  //# 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,EACN,aAAa,GAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAsB,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAkB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAiB,aAAa,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EACN,UAAU,GAIV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,aAAa,EAAyB,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAyB,MAAM,aAAa,CAAC;AACrE,OAAO,EAEN,eAAe,EACf,oBAAoB,GACpB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAGN,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAoC,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAyB,MAAM,oBAAoB,CAAC;AACvF,OAAO,EACN,SAAS,EAGT,cAAc,EACd,eAAe,GACf,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,GAGb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAsB,cAAc,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAkB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAsB,aAAa,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EAAiB,aAAa,EAAE,WAAW,EAAkB,MAAM,gBAAgB,CAAC;AAC3F,kFAAkF;AAClF,gFAAgF;AAChF,wEAAwE;AACxE,qEAAqE;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACN,UAAU,GAIV,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAmC,MAAM,YAAY,CAAC;AACpE,iEAAiE;AACjE,iFAAiF;AACjF,6EAA6E;AAC7E,8EAA8E;AAC9E,mFAAmF;AACnF,OAAO,EACN,qBAAqB,EACrB,sBAAsB,EAEtB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,eAAe,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAyB,MAAM,qBAAqB,CAAC;AAC3E,8EAA8E;AAC9E,kFAAkF;AAClF,kFAAkF;AAClF,OAAO,EAAE,YAAY,EAAE,SAAS,EAAe,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAyB,MAAM,aAAa,CAAC;AACrE,OAAO,EAEN,eAAe,EACf,oBAAoB,GACpB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EAGN,iBAAiB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,QAAQ,EAAoC,MAAM,cAAc,CAAC;AAC1E,OAAO,EACN,YAAY,EACZ,SAAS,EACT,aAAa,EACb,WAAW,EACX,aAAa,EACb,YAAY,GAEZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,SAAS,EAGT,cAAc,EACd,eAAe,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEN,kBAAkB,GAClB,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { BoardStore } from "@edv4h/usketch-shared";
2
+ /** Seed used when enabling without an explicit one (matches the HUD default). */
3
+ export declare const DEFAULT_INFINITE_SEED = 12345;
4
+ export interface EnableInfiniteTerrainOptions {
5
+ /**
6
+ * Seed for the world. Rounded to an integer. Omitted → keep the current seed if
7
+ * already enabled, else {@link DEFAULT_INFINITE_SEED}.
8
+ */
9
+ seed?: number;
10
+ /** Tile size for a tilemap created on a blank board. Default {@link DEFAULT_TILE}. */
11
+ tile?: number;
12
+ }
13
+ /** The board's effective infinite-terrain seed, or `null` when disabled. */
14
+ export declare function getInfiniteSeed(store: BoardStore): number | null;
15
+ /** Whether the infinite base terrain is enabled on the board. */
16
+ export declare function isInfiniteTerrainEnabled(store: BoardStore): boolean;
17
+ /**
18
+ * Enable (or re-seed) the infinite base terrain — the same operation the HUD
19
+ * toggle runs. Stamps `baseSeed` + a frozen `baseGen` onto the deterministically
20
+ * chosen tilemap: an already-seeded one, else the lowest-id tilemap, else a freshly
21
+ * created one on a blank board. Persists + syncs (it's shape data). Returns the
22
+ * integer seed applied. Throws `RangeError` on a non-finite seed or a non-finite /
23
+ * non-positive `tile`.
24
+ */
25
+ export declare function enableInfiniteTerrain(store: BoardStore, opts?: EnableInfiniteTerrainOptions): number;
26
+ /** Disable the infinite base terrain (clears `baseSeed` on every seeded tilemap). */
27
+ export declare function disableInfiniteTerrain(store: BoardStore): void;
28
+ /**
29
+ * Set the seed: a number enables/re-seeds, `null` disables — the "reactive setter"
30
+ * ergonomics requested in #946 (`set({ seed })` / `set({ seed: null })`), backed by
31
+ * the functions above so behaviour is identical to the HUD.
32
+ */
33
+ export declare function setInfiniteSeed(store: BoardStore, seed: number | null): void;
34
+ //# sourceMappingURL=infinite-terrain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infinite-terrain.d.ts","sourceRoot":"","sources":["../src/infinite-terrain.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAWxD,iFAAiF;AACjF,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAE3C,MAAM,WAAW,4BAA4B;IAC5C;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sFAAsF;IACtF,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAEhE;AAED,iEAAiE;AACjE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAEnE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,UAAU,EACjB,IAAI,GAAE,4BAAiC,GACrC,MAAM,CAyBR;AAED,qFAAqF;AACrF,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAM9D;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAG5E"}
@@ -0,0 +1,64 @@
1
+ import { DEFAULT_BASE_GEN } from "./base-terrain.js";
2
+ import { resolveTilemap } from "./generate.js";
3
+ import { DEFAULT_TILE, isTileMap, lowestTilemap, seededTilemap, } from "./tilemap-shape.js";
4
+ /** Seed used when enabling without an explicit one (matches the HUD default). */
5
+ export const DEFAULT_INFINITE_SEED = 12345;
6
+ /** The board's effective infinite-terrain seed, or `null` when disabled. */
7
+ export function getInfiniteSeed(store) {
8
+ return seededTilemap(store.getShapes().values())?.baseSeed ?? null;
9
+ }
10
+ /** Whether the infinite base terrain is enabled on the board. */
11
+ export function isInfiniteTerrainEnabled(store) {
12
+ return getInfiniteSeed(store) != null;
13
+ }
14
+ /**
15
+ * Enable (or re-seed) the infinite base terrain — the same operation the HUD
16
+ * toggle runs. Stamps `baseSeed` + a frozen `baseGen` onto the deterministically
17
+ * chosen tilemap: an already-seeded one, else the lowest-id tilemap, else a freshly
18
+ * created one on a blank board. Persists + syncs (it's shape data). Returns the
19
+ * integer seed applied. Throws `RangeError` on a non-finite seed or a non-finite /
20
+ * non-positive `tile`.
21
+ */
22
+ export function enableInfiniteTerrain(store, opts = {}) {
23
+ const raw = opts.seed ?? getInfiniteSeed(store) ?? DEFAULT_INFINITE_SEED;
24
+ const seed = Math.trunc(Number(raw));
25
+ if (!Number.isFinite(seed)) {
26
+ throw new RangeError(`enableInfiniteTerrain: seed must be a finite number, got ${String(raw)}`);
27
+ }
28
+ // Validate the tile size — it feeds cell math (move/viewport divide by tile), so
29
+ // a non-finite/non-positive value would later cause NaN/÷0 cells.
30
+ const tile = opts.tile ?? DEFAULT_TILE;
31
+ if (!Number.isFinite(tile) || tile <= 0) {
32
+ throw new RangeError(`enableInfiniteTerrain: tile must be a finite positive number, got ${String(opts.tile)}`);
33
+ }
34
+ // Deterministic target so every synced client agrees (see seededTilemap). Reuse
35
+ // the target's own recorded gen if present so re-enabling keeps the same world
36
+ // even after the default gen advances.
37
+ const target = seededTilemap(store.getShapes().values()) ?? lowestTilemap(store.getShapes().values());
38
+ const id = target?.id ?? resolveTilemap(store, tile).id;
39
+ store.updateShape(id, {
40
+ baseSeed: seed,
41
+ baseGen: target?.baseGen ?? DEFAULT_BASE_GEN,
42
+ });
43
+ return seed;
44
+ }
45
+ /** Disable the infinite base terrain (clears `baseSeed` on every seeded tilemap). */
46
+ export function disableInfiniteTerrain(store) {
47
+ for (const [id, s] of store.getShapes()) {
48
+ if (isTileMap(s) && s.baseSeed != null) {
49
+ store.updateShape(id, { baseSeed: undefined });
50
+ }
51
+ }
52
+ }
53
+ /**
54
+ * Set the seed: a number enables/re-seeds, `null` disables — the "reactive setter"
55
+ * ergonomics requested in #946 (`set({ seed })` / `set({ seed: null })`), backed by
56
+ * the functions above so behaviour is identical to the HUD.
57
+ */
58
+ export function setInfiniteSeed(store, seed) {
59
+ if (seed == null)
60
+ disableInfiniteTerrain(store);
61
+ else
62
+ enableInfiniteTerrain(store, { seed });
63
+ }
64
+ //# sourceMappingURL=infinite-terrain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infinite-terrain.js","sourceRoot":"","sources":["../src/infinite-terrain.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EACN,YAAY,EACZ,SAAS,EACT,aAAa,EACb,aAAa,GAEb,MAAM,oBAAoB,CAAC;AAE5B,iFAAiF;AACjF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,CAAC;AAY3C,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,KAAiB;IAChD,OAAO,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,IAAI,IAAI,CAAC;AACpE,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,wBAAwB,CAAC,KAAiB;IACzD,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AACvC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACpC,KAAiB,EACjB,IAAI,GAAiC,EAAE;IAEvC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC,KAAK,CAAC,IAAI,qBAAqB,CAAC;IACzE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IACrC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,4DAA4D,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACjG,CAAC;IACD,iFAAiF;IACjF,kEAAkE;IAClE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,UAAU,CACnB,qEAAqE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACxF,CAAC;IACH,CAAC;IACD,gFAAgF;IAChF,+EAA+E;IAC/E,uCAAuC;IACvC,MAAM,MAAM,GACX,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;IACxF,MAAM,EAAE,GAAG,MAAM,EAAE,EAAE,IAAI,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IACxD,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE;QACrB,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,gBAAgB;KACf,CAAC,CAAC;IAChC,OAAO,IAAI,CAAC;AACb,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,sBAAsB,CAAC,KAAiB;IACvD,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC;QACzC,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;YACxC,KAAK,CAAC,WAAW,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAA+B,CAAC,CAAC;QAC7E,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,KAAiB,EAAE,IAAmB;IACrE,IAAI,IAAI,IAAI,IAAI;QAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC;;QAC3C,qBAAqB,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type BoardStore, type ServiceRegistry } from "@edv4h/usketch-shared";
2
+ import { type EnableInfiniteTerrainOptions } from "./infinite-terrain.js";
3
+ import type { ReactiveStore } from "./reactive-store.js";
4
+ import { type MapRenderConfig } from "./render-config.js";
5
+ import { type MapToolState } from "./tool-state.js";
6
+ /** The map plugin's host-facing operations + live stores. */
7
+ export interface MapApi {
8
+ /** Enable/re-seed the infinite base terrain. Returns the applied integer seed. */
9
+ enableInfiniteTerrain(opts?: EnableInfiniteTerrainOptions): number;
10
+ disableInfiniteTerrain(): void;
11
+ /** Current effective seed, or `null` when disabled. */
12
+ getInfiniteSeed(): number | null;
13
+ isInfiniteTerrainEnabled(): boolean;
14
+ /** A number enables/re-seeds, `null` disables. */
15
+ setInfiniteSeed(seed: number | null): void;
16
+ toolState: ReactiveStore<MapToolState>;
17
+ renderConfig: ReactiveStore<MapRenderConfig>;
18
+ }
19
+ /** Typed service handle for the map API. Provide in `setup`, get via {@link getMapApi}. */
20
+ export declare const mapService: import("@edv4h/usketch-shared").ServiceHandle<MapApi>;
21
+ /** Build the API bound to a specific board store (called in the plugin's setup). */
22
+ export declare function createMapApi(store: BoardStore): MapApi;
23
+ /**
24
+ * Host accessor: `getMapApi(app.services)?.enableInfiniteTerrain({ seed })`. Returns
25
+ * `undefined` when the map plugin isn't active. Works with `ctx.services` too.
26
+ */
27
+ export declare function getMapApi(services: ServiceRegistry): MapApi | undefined;
28
+ //# sourceMappingURL=map-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-service.d.ts","sourceRoot":"","sources":["../src/map-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,UAAU,EAAiB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EAEN,KAAK,4BAA4B,EAKjC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,eAAe,EAAqB,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,KAAK,YAAY,EAAkB,MAAM,iBAAiB,CAAC;AAEpE,6DAA6D;AAC7D,MAAM,WAAW,MAAM;IAEtB,kFAAkF;IAClF,qBAAqB,CAAC,IAAI,CAAC,EAAE,4BAA4B,GAAG,MAAM,CAAC;IACnE,sBAAsB,IAAI,IAAI,CAAC;IAC/B,uDAAuD;IACvD,eAAe,IAAI,MAAM,GAAG,IAAI,CAAC;IACjC,wBAAwB,IAAI,OAAO,CAAC;IACpC,kDAAkD;IAClD,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IAK3C,SAAS,EAAE,aAAa,CAAC,YAAY,CAAC,CAAC;IACvC,YAAY,EAAE,aAAa,CAAC,eAAe,CAAC,CAAC;CAC7C;AAED,2FAA2F;AAC3F,eAAO,MAAM,UAAU,uDAA8C,CAAC;AAEtE,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAUtD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,GAAG,SAAS,CAEvE"}
@@ -0,0 +1,31 @@
1
+ // The map plugin's host-facing API, published on the `ctx.services` seam so a host
2
+ // (or any other plugin) can drive map operations WITHOUT the Control HUD and
3
+ // without importing individual helpers. This is the reference for the convention
4
+ // in docs/plugin-system-design.md: operation logic lives in plain functions, the
5
+ // HUD/actions call them, and the same functions are bundled into a service.
6
+ import { defineService } from "@edv4h/usketch-shared";
7
+ import { disableInfiniteTerrain, enableInfiniteTerrain, getInfiniteSeed, isInfiniteTerrainEnabled, setInfiniteSeed, } from "./infinite-terrain.js";
8
+ import { renderConfigStore } from "./render-config.js";
9
+ import { toolStateStore } from "./tool-state.js";
10
+ /** Typed service handle for the map API. Provide in `setup`, get via {@link getMapApi}. */
11
+ export const mapService = defineService("usketch-plugin-map");
12
+ /** Build the API bound to a specific board store (called in the plugin's setup). */
13
+ export function createMapApi(store) {
14
+ return {
15
+ enableInfiniteTerrain: (opts) => enableInfiniteTerrain(store, opts),
16
+ disableInfiniteTerrain: () => disableInfiniteTerrain(store),
17
+ getInfiniteSeed: () => getInfiniteSeed(store),
18
+ isInfiniteTerrainEnabled: () => isInfiniteTerrainEnabled(store),
19
+ setInfiniteSeed: (seed) => setInfiniteSeed(store, seed),
20
+ toolState: toolStateStore,
21
+ renderConfig: renderConfigStore,
22
+ };
23
+ }
24
+ /**
25
+ * Host accessor: `getMapApi(app.services)?.enableInfiniteTerrain({ seed })`. Returns
26
+ * `undefined` when the map plugin isn't active. Works with `ctx.services` too.
27
+ */
28
+ export function getMapApi(services) {
29
+ return mapService.get(services);
30
+ }
31
+ //# sourceMappingURL=map-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"map-service.js","sourceRoot":"","sources":["../src/map-service.ts"],"names":[],"mappings":"AAAA,mFAAmF;AACnF,6EAA6E;AAC7E,iFAAiF;AACjF,iFAAiF;AACjF,4EAA4E;AAC5E,OAAO,EAAmB,aAAa,EAAwB,MAAM,uBAAuB,CAAC;AAC7F,OAAO,EACN,sBAAsB,EAEtB,qBAAqB,EACrB,eAAe,EACf,wBAAwB,EACxB,eAAe,GACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAwB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAqB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAqBpE,2FAA2F;AAC3F,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAS,oBAAoB,CAAC,CAAC;AAEtE,oFAAoF;AACpF,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC7C,OAAO;QACN,qBAAqB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC;QACnE,sBAAsB,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAC3D,eAAe,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC;QAC7C,wBAAwB,EAAE,GAAG,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC;QAC/D,eAAe,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,IAAI,CAAC;QACvD,SAAS,EAAE,cAAc;QACzB,YAAY,EAAE,iBAAiB;KAC/B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAyB;IAClD,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACjC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAY1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAWzD,MAAM,WAAW,gBAAgB;IAChC,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;CAC1B;AAMD,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CAmL7E"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAiB1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,EAAE,KAAK,SAAS,EAAqB,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAY,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,WAAW,gBAAgB;IAChC,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B,gBAAgB,CAAC,EAAE,SAAS,CAAC;IAC7B;;;;OAIG;IACH,YAAY,CAAC,EAAE,UAAU,CAAC;CAC1B;AAMD,wBAAgB,eAAe,CAAC,OAAO,GAAE,gBAAqB,GAAG,aAAa,CA2K7E"}
package/dist/plugin.js CHANGED
@@ -2,18 +2,18 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { BaseAreaLayer } from "./base/base-layer.js";
3
3
  import { BASE_MAP_TYPE, createBaseMapShapeDefinition } from "./base/base-map-shape.js";
4
4
  import { EnterBanner } from "./base/enter-banner.js";
5
- import { DEFAULT_BASE_GEN } from "./base-terrain.js";
6
5
  import { genStateStore } from "./gen-state.js";
7
- import { resolveTilemap } from "./generate.js";
8
6
  import { registerMapHud } from "./hud/register-map-hud.js";
7
+ import { disableInfiniteTerrain, enableInfiniteTerrain, getInfiniteSeed, isInfiniteTerrainEnabled, } from "./infinite-terrain.js";
9
8
  import { MAP_ICON_TYPE, mapIconShapeDefinition } from "./map-icon-shape.js";
10
9
  import { MapTerrainLayer } from "./map-layer.js";
10
+ import { createMapApi, mapService } from "./map-service.js";
11
11
  import { createMapToolDefinition } from "./map-tool.js";
12
12
  import { MAP_TOOL_ID } from "./map-tool-id.js";
13
13
  import { createRangeEraseToolDefinition, RANGE_ERASE_TOOL_ID } from "./range-erase-tool.js";
14
14
  import { renderConfigStore } from "./render-config.js";
15
15
  import { TERRAINS } from "./terrain.js";
16
- import { createTileMapShapeDefinition, DEFAULT_TILE, isTileMap, lowestTilemap, seededTilemap, TILEMAP_TYPE, } from "./tilemap-shape.js";
16
+ import { createTileMapShapeDefinition, DEFAULT_TILE, TILEMAP_TYPE } from "./tilemap-shape.js";
17
17
  const TERRAIN_LAYER_ID = "usketch-map:terrain";
18
18
  const BASE_LAYER_ID = "usketch-map:base";
19
19
  const ENTER_BANNER_ID = "usketch-map:enter-banner";
@@ -60,10 +60,6 @@ export function createMapPlugin(options = {}) {
60
60
  // ── Controls: all map operations live on the Control HUD (no bespoke
61
61
  // on-canvas palette). Toggle the HUD with the backtick key. ──
62
62
  const unregisterMapHud = registerMapHud(ctx, tile);
63
- // The infinite-terrain seed is read from the seeded tilemap shape (board
64
- // data — persisted + synced), not from app-local render config. Chosen
65
- // deterministically so the HUD agrees with the renderer and across clients.
66
- const currentBaseSeed = () => seededTilemap(ctx.store.getShapes().values())?.baseSeed ?? null;
67
63
  // ── Tweaks as declarative HUD settings ──
68
64
  const unregisterHud = ctx.hud.registerSettings({
69
65
  id: "usketch-map:tweaks",
@@ -108,9 +104,9 @@ export function createMapPlugin(options = {}) {
108
104
  // infinite/seed live on the tilemap SHAPE (persisted + synced), not on the
109
105
  // app-local render config — so the generated world survives reload.
110
106
  if (name === "infinite")
111
- return currentBaseSeed() != null;
107
+ return getInfiniteSeed(ctx.store) != null;
112
108
  if (name === "seed")
113
- return currentBaseSeed() ?? genStateStore.get().seed;
109
+ return getInfiniteSeed(ctx.store) ?? genStateStore.get().seed;
114
110
  return renderConfigStore.get()[name];
115
111
  },
116
112
  set: (name, value) => {
@@ -125,42 +121,33 @@ export function createMapPlugin(options = {}) {
125
121
  emptyTerrain: value === "none" ? null : value,
126
122
  });
127
123
  else if (name === "infinite") {
128
- const on = value === true || value === "true";
129
- if (on) {
130
- // Stamp the seed onto a tilemap so it persists + syncs. Target the
131
- // same shape every client would: an already-seeded tilemap if present,
132
- // else the lowest-id existing tilemap; only create one when the board
133
- // is blank. (resolveTilemap's insertion-order pick isn't stable across
134
- // synced peers, so it's the last resort.)
135
- const seed = currentBaseSeed() ?? genStateStore.get().seed;
136
- const target = seededTilemap(ctx.store.getShapes().values()) ??
137
- lowestTilemap(ctx.store.getShapes().values());
138
- const id = target?.id ?? resolveTilemap(ctx.store, tile).id;
139
- // Freeze the generation contract on the shape. Reuse the target's own
140
- // recorded gen if it has one (so an off→on toggle keeps the same world
141
- // even after the default advances); else stamp the current default.
142
- ctx.store.updateShape(id, {
143
- baseSeed: seed,
144
- baseGen: target?.baseGen ?? DEFAULT_BASE_GEN,
124
+ // Drive the public API (single source of truth for the enable logic —
125
+ // deterministic tilemap target, frozen baseGen, integer seed). Default
126
+ // to the gen UI's seed when turning on a board that has none yet.
127
+ if (value === true || value === "true") {
128
+ // Prefer the current/gen seed, but fall back to the API default when
129
+ // it's junk (enableInfiniteTerrain rejects non-finite seeds) so toggling
130
+ // ON always works, even on a corrupt store or bad init order.
131
+ const genSeed = getInfiniteSeed(ctx.store) ?? Math.trunc(Number(genStateStore.get().seed));
132
+ enableInfiniteTerrain(ctx.store, {
133
+ seed: Number.isFinite(genSeed) ? genSeed : undefined,
134
+ tile,
145
135
  });
146
136
  }
147
137
  else {
148
- for (const [id, s] of ctx.store.getShapes())
149
- if (isTileMap(s) && s.baseSeed != null)
150
- ctx.store.updateShape(id, { baseSeed: undefined });
138
+ disableInfiniteTerrain(ctx.store);
151
139
  }
152
140
  }
153
141
  else if (name === "seed") {
154
- // Coerce to a finite integer (matches step:1); ignore junk so a bad
155
- // value can't turn baseSeed into NaN → NaN elevations everywhere.
142
+ // Coerce to a finite integer (matches step:1); ignore junk.
156
143
  const seed = Math.trunc(Number(value));
157
144
  if (!Number.isFinite(seed))
158
145
  return;
159
- // Remember on the gen store, and re-seed any tilemap that already has a base.
146
+ // Remember on the gen store, and re-seed only when already enabled (the
147
+ // seed field shouldn't turn the infinite terrain on by itself).
160
148
  genStateStore.set({ seed });
161
- for (const [id, s] of ctx.store.getShapes())
162
- if (isTileMap(s) && s.baseSeed != null)
163
- ctx.store.updateShape(id, { baseSeed: seed });
149
+ if (isInfiniteTerrainEnabled(ctx.store))
150
+ enableInfiniteTerrain(ctx.store, { seed });
164
151
  }
165
152
  },
166
153
  // Re-read on look-and-feel changes (renderConfig) AND shape mutations (the
@@ -181,7 +168,14 @@ export function createMapPlugin(options = {}) {
181
168
  };
182
169
  },
183
170
  });
171
+ // ── Host-facing API (ctx.services seam) — lets a host or another plugin
172
+ // drive map operations without the Control HUD. See map-service.ts.
173
+ // Provided LAST, after every throw-prone registration above, so a setup
174
+ // failure can't leak the service (createApp only rolls back a returned
175
+ // teardown). ──
176
+ const unprovideService = mapService.provide(ctx.services, createMapApi(ctx.store));
184
177
  return () => {
178
+ unprovideService();
185
179
  ctx.layers.unregister(TERRAIN_LAYER_ID);
186
180
  ctx.layers.unregister(BASE_LAYER_ID);
187
181
  ctx.layers.unregister(ENTER_BANNER_ID);
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { BoardStore } from "@edv4h/usketch-shared";
2
+ import { type EnableInfiniteTerrainOptions } from "./infinite-terrain.js";
3
+ export interface InfiniteTerrainControls {
4
+ /** Current effective seed, or `null` when disabled. Reactive. */
5
+ seed: number | null;
6
+ enabled: boolean;
7
+ /** Enable / re-seed; returns the applied integer seed. */
8
+ enable: (opts?: EnableInfiniteTerrainOptions) => number;
9
+ disable: () => void;
10
+ /** Number enables/re-seeds, `null` disables. */
11
+ setSeed: (seed: number | null) => void;
12
+ }
13
+ /**
14
+ * Subscribe a component to the board's infinite-terrain seed and get controls to
15
+ * change it. Re-renders when the seed changes (incl. edits from another client),
16
+ * not on pan/zoom — it listens to shape mutations only.
17
+ */
18
+ export declare function useInfiniteTerrain(store: BoardStore): InfiniteTerrainControls;
19
+ //# sourceMappingURL=use-infinite-terrain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-infinite-terrain.d.ts","sourceRoot":"","sources":["../src/use-infinite-terrain.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,uBAAuB,CAAC;AAEpE,OAAO,EAEN,KAAK,4BAA4B,EAIjC,MAAM,uBAAuB,CAAC;AAG/B,MAAM,WAAW,uBAAuB;IACvC,iEAAiE;IACjE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,4BAA4B,KAAK,MAAM,CAAC;IACxD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gDAAgD;IAChD,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,uBAAuB,CAoC7E"}
@@ -0,0 +1,45 @@
1
+ import { useSyncExternalStore } from "react";
2
+ import { disableInfiniteTerrain, enableInfiniteTerrain, getInfiniteSeed, setInfiniteSeed, } from "./infinite-terrain.js";
3
+ import { isTileMap } from "./tilemap-shape.js";
4
+ /**
5
+ * Subscribe a component to the board's infinite-terrain seed and get controls to
6
+ * change it. Re-renders when the seed changes (incl. edits from another client),
7
+ * not on pan/zoom — it listens to shape mutations only.
8
+ */
9
+ export function useInfiniteTerrain(store) {
10
+ const seed = useSyncExternalStore((onChange) => store.onMutation((e) => {
11
+ // Only recompute the seed when something could actually change it — not on
12
+ // every edit (tile painting fires shape:updated on the tilemap constantly,
13
+ // changing cells/bounds but not baseSeed).
14
+ if (e.type === "shape:updated") {
15
+ const { before, after } = e.payload;
16
+ if (isTileMap(after)) {
17
+ const prev = isTileMap(before) ? before.baseSeed : undefined;
18
+ if (prev !== after.baseSeed)
19
+ onChange(); // baseSeed actually changed
20
+ }
21
+ }
22
+ else if (e.type === "shape:added") {
23
+ // A new tilemap affects the effective seed only if it already carries one.
24
+ const seededAdded = e.payload.ids.some((id) => {
25
+ const s = store.getShape(id);
26
+ return s != null && isTileMap(s) && s.baseSeed != null;
27
+ });
28
+ if (seededAdded)
29
+ onChange();
30
+ }
31
+ else if (e.type === "shape:removed") {
32
+ // The removed shapes are already gone (can't inspect); a removed seeded
33
+ // tilemap can change the effective seed, so recompute conservatively.
34
+ onChange();
35
+ }
36
+ }), () => getInfiniteSeed(store), () => getInfiniteSeed(store));
37
+ return {
38
+ seed,
39
+ enabled: seed != null,
40
+ enable: (opts) => enableInfiniteTerrain(store, opts),
41
+ disable: () => disableInfiniteTerrain(store),
42
+ setSeed: (s) => setInfiniteSeed(store, s),
43
+ };
44
+ }
45
+ //# sourceMappingURL=use-infinite-terrain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-infinite-terrain.js","sourceRoot":"","sources":["../src/use-infinite-terrain.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EACN,sBAAsB,EAEtB,qBAAqB,EACrB,eAAe,EACf,eAAe,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAa/C;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IACnD,MAAM,IAAI,GAAG,oBAAoB,CAChC,CAAC,QAAQ,EAAE,EAAE,CACZ,KAAK,CAAC,UAAU,CAAC,CAAC,CAAa,EAAE,EAAE;QAClC,2EAA2E;QAC3E,2EAA2E;QAC3E,2CAA2C;QAC3C,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YAChC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC;YACpC,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;gBAC7D,IAAI,IAAI,KAAK,KAAK,CAAC,QAAQ;oBAAE,QAAQ,EAAE,CAAC,CAAC,4BAA4B;YACtE,CAAC;QACF,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YACrC,2EAA2E;YAC3E,MAAM,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE;gBAC7C,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC7B,OAAO,CAAC,IAAI,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC;YACxD,CAAC,CAAC,CAAC;YACH,IAAI,WAAW;gBAAE,QAAQ,EAAE,CAAC;QAC7B,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;YACvC,wEAAwE;YACxE,sEAAsE;YACtE,QAAQ,EAAE,CAAC;QACZ,CAAC;IACF,CAAC,CAAC,EACH,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,EAC5B,GAAG,EAAE,CAAC,eAAe,CAAC,KAAK,CAAC,CAC5B,CAAC;IACF,OAAO;QACN,IAAI;QACJ,OAAO,EAAE,IAAI,IAAI,IAAI;QACrB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC;QACpD,OAAO,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,KAAK,CAAC;QAC5C,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC,CAAC;KACzC,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edv4h/usketch-plugin-map",
3
- "version": "0.7.0",
3
+ "version": "0.9.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -12,8 +12,8 @@
12
12
  }
13
13
  },
14
14
  "dependencies": {
15
- "@edv4h/usketch-shared": "4.10.0",
16
- "@edv4h/usketch-store": "3.5.2"
15
+ "@edv4h/usketch-shared": "4.11.0",
16
+ "@edv4h/usketch-store": "3.5.3"
17
17
  },
18
18
  "peerDependencies": {
19
19
  "react": ">=19"