@edv4h/usketch-plugin-map 0.2.0 → 0.4.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/autotile.d.ts +10 -0
- package/dist/autotile.d.ts.map +1 -1
- package/dist/autotile.js +15 -0
- package/dist/autotile.js.map +1 -1
- package/dist/{team/team-layer.d.ts → base/base-layer.d.ts} +2 -2
- package/dist/base/base-layer.d.ts.map +1 -0
- package/dist/{team/team-layer.js → base/base-layer.js} +28 -19
- package/dist/base/base-layer.js.map +1 -0
- package/dist/base/base-map-shape.d.ts +20 -0
- package/dist/{team/team-map-shape.d.ts.map → base/base-map-shape.d.ts.map} +1 -1
- package/dist/{team/team-map-shape.js → base/base-map-shape.js} +14 -14
- package/dist/{team/team-map-shape.js.map → base/base-map-shape.js.map} +1 -1
- package/dist/{team/team-ops.d.ts → base/base-ops.d.ts} +20 -20
- package/dist/{team/team-ops.d.ts.map → base/base-ops.d.ts.map} +1 -1
- package/dist/{team/team-ops.js → base/base-ops.js} +33 -33
- package/dist/{team/team-ops.js.map → base/base-ops.js.map} +1 -1
- package/dist/base/base-state.d.ts +9 -0
- package/dist/{team/team-state.d.ts.map → base/base-state.d.ts.map} +1 -1
- package/dist/base/base-state.js +13 -0
- package/dist/{team/team-state.js.map → base/base-state.js.map} +1 -1
- package/dist/{team → base}/enter-banner.d.ts.map +1 -1
- package/dist/{team → base}/enter-banner.js +12 -12
- package/dist/{team → base}/enter-banner.js.map +1 -1
- package/dist/hud/register-map-hud.d.ts +8 -0
- package/dist/hud/register-map-hud.d.ts.map +1 -0
- package/dist/hud/register-map-hud.js +0 -0
- package/dist/hud/register-map-hud.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/map-tool.d.ts.map +1 -1
- package/dist/map-tool.js +69 -34
- package/dist/map-tool.js.map +1 -1
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +16 -30
- package/dist/plugin.js.map +1 -1
- package/dist/range-erase-state.d.ts +2 -2
- package/dist/range-erase-state.js +1 -1
- package/dist/range-erase.d.ts +1 -1
- package/dist/range-erase.d.ts.map +1 -1
- package/dist/range-erase.js +13 -13
- package/dist/range-erase.js.map +1 -1
- package/dist/tool-state.d.ts +7 -1
- package/dist/tool-state.d.ts.map +1 -1
- package/dist/tool-state.js +1 -0
- package/dist/tool-state.js.map +1 -1
- package/package.json +3 -3
- package/dist/team/team-layer.d.ts.map +0 -1
- package/dist/team/team-layer.js.map +0 -1
- package/dist/team/team-map-shape.d.ts +0 -20
- package/dist/team/team-state.d.ts +0 -9
- package/dist/team/team-state.js +0 -13
- package/dist/ui/palette.d.ts +0 -7
- package/dist/ui/palette.d.ts.map +0 -1
- package/dist/ui/palette.js +0 -178
- package/dist/ui/palette.js.map +0 -1
- package/dist/ui/range-erase-palette.d.ts +0 -5
- package/dist/ui/range-erase-palette.d.ts.map +0 -1
- package/dist/ui/range-erase-palette.js +0 -42
- package/dist/ui/range-erase-palette.js.map +0 -1
- /package/dist/{team → base}/enter-banner.d.ts +0 -0
package/dist/autotile.d.ts
CHANGED
|
@@ -39,4 +39,14 @@ export interface CellBox {
|
|
|
39
39
|
* (in cell coordinates) is required to keep the flood bounded.
|
|
40
40
|
*/
|
|
41
41
|
export declare function floodFill(cells: Cells, startCol: number, startRow: number, box?: CellBox): string[];
|
|
42
|
+
/**
|
|
43
|
+
* Region fill: the `floodFill` region from the start cell, but empty when the
|
|
44
|
+
* start terrain is protected (present in `exclude`) — clicking a protected
|
|
45
|
+
* terrain is a no-op. Because `floodFill` only spreads across the start cell's
|
|
46
|
+
* own terrain, a non-excluded start can never reach a protected cell, so the
|
|
47
|
+
* whole returned region is safe to repaint. Backs the map tool's "region" fill
|
|
48
|
+
* mode (fill a connected same-terrain area while keeping excluded terrains,
|
|
49
|
+
* e.g. water, untouched).
|
|
50
|
+
*/
|
|
51
|
+
export declare function regionFillCells(cells: Cells, startCol: number, startRow: number, exclude: ReadonlySet<string>, box?: CellBox): string[];
|
|
42
52
|
//# sourceMappingURL=autotile.d.ts.map
|
package/dist/autotile.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autotile.d.ts","sourceRoot":"","sources":["../src/autotile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAE/C,iCAAiC;AACjC,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAGpE;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,GACvB,UAAU,GAAG,SAAS,CAExB;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAmBnE;AAED,MAAM,WAAW,YAAY;IAC5B,CAAC,EAAE,OAAO,CAAC;IACX,CAAC,EAAE,OAAO,CAAC;IACX,CAAC,EAAE,OAAO,CAAC;IACX,CAAC,EAAE,OAAO,CAAC;CACX;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,GACvB,YAAY,CASd;AAED,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,OAAO,GACX,MAAM,EAAE,CAuBV"}
|
|
1
|
+
{"version":3,"file":"autotile.d.ts","sourceRoot":"","sources":["../src/autotile.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAE/C,iCAAiC;AACjC,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAGpE;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAE1F;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC5B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,GACvB,UAAU,GAAG,SAAS,CAExB;AAED,gFAAgF;AAChF,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAmBnE;AAED,MAAM,WAAW,YAAY;IAC5B,CAAC,EAAE,OAAO,CAAC;IACX,CAAC,EAAE,OAAO,CAAC;IACX,CAAC,EAAE,OAAO,CAAC;IACX,CAAC,EAAE,OAAO,CAAC;CACX;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAC3B,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,KAAK,CAAC,EAAE,UAAU,GAAG,IAAI,GACvB,YAAY,CASd;AAED,MAAM,WAAW,OAAO;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACb;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CACxB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,OAAO,GACX,MAAM,EAAE,CAuBV;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC9B,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,EAC5B,GAAG,CAAC,EAAE,OAAO,GACX,MAAM,EAAE,CAIV"}
|
package/dist/autotile.js
CHANGED
|
@@ -93,4 +93,19 @@ export function floodFill(cells, startCol, startRow, box) {
|
|
|
93
93
|
}
|
|
94
94
|
return out;
|
|
95
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Region fill: the `floodFill` region from the start cell, but empty when the
|
|
98
|
+
* start terrain is protected (present in `exclude`) — clicking a protected
|
|
99
|
+
* terrain is a no-op. Because `floodFill` only spreads across the start cell's
|
|
100
|
+
* own terrain, a non-excluded start can never reach a protected cell, so the
|
|
101
|
+
* whole returned region is safe to repaint. Backs the map tool's "region" fill
|
|
102
|
+
* mode (fill a connected same-terrain area while keeping excluded terrains,
|
|
103
|
+
* e.g. water, untouched).
|
|
104
|
+
*/
|
|
105
|
+
export function regionFillCells(cells, startCol, startRow, exclude, box) {
|
|
106
|
+
const start = cells[cellKey(startCol, startRow)];
|
|
107
|
+
if (start !== undefined && exclude.has(start))
|
|
108
|
+
return [];
|
|
109
|
+
return floodFill(cells, startCol, startRow, box);
|
|
110
|
+
}
|
|
96
111
|
//# sourceMappingURL=autotile.js.map
|
package/dist/autotile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"autotile.js","sourceRoot":"","sources":["../src/autotile.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"autotile.js","sourceRoot":"","sources":["../src/autotile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { BoardStore, RenderMode } from "@edv4h/usketch-shared";
|
|
2
|
-
export declare function
|
|
2
|
+
export declare function BaseAreaLayer({ store, renderMode, }: {
|
|
3
3
|
store: BoardStore;
|
|
4
4
|
renderMode?: RenderMode;
|
|
5
5
|
}): import("react").JSX.Element | null;
|
|
6
|
-
//# sourceMappingURL=
|
|
6
|
+
//# sourceMappingURL=base-layer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-layer.d.ts","sourceRoot":"","sources":["../../src/base/base-layer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAsGpE,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,UAAU,GACV,EAAE;IACF,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC;CACxB,sCA8EA"}
|
|
@@ -3,21 +3,23 @@ import { useEffect, useRef, useState } from "react";
|
|
|
3
3
|
import { exposedEdges, parseCellKey } from "../autotile.js";
|
|
4
4
|
import { blockFactor, downsampleCells, tileDetail } from "../lod.js";
|
|
5
5
|
import { visibleCellRange, visibleWorldRect } from "../map-layer.js";
|
|
6
|
-
import {
|
|
6
|
+
import { MAP_TOOL_ID } from "../map-tool-id.js";
|
|
7
|
+
import { useMapToolState } from "../tool-state.js";
|
|
8
|
+
import { baseRegionAnchors, getBaseMap } from "./base-ops.js";
|
|
7
9
|
const FILL_OPACITY = 0.24;
|
|
8
10
|
const BORDER_RATIO = 0.16; // border strip thickness, fraction of a tile
|
|
9
11
|
const BORDER_OPACITY = 0.85;
|
|
10
|
-
/** Full tier: per-cell translucent fill +
|
|
11
|
-
function renderFull(owner,
|
|
12
|
+
/** Full tier: per-cell translucent fill + base-coloured border on region edges. */
|
|
13
|
+
function renderFull(owner, bases, tile, visible) {
|
|
12
14
|
const nodes = [];
|
|
13
15
|
const asCells = owner; // exposedEdges only compares values
|
|
14
16
|
const bt = BORDER_RATIO * tile;
|
|
15
17
|
const range = visibleCellRange(visible, tile);
|
|
16
18
|
const emit = (c, r) => {
|
|
17
|
-
const
|
|
18
|
-
if (!
|
|
19
|
+
const baseId = owner[`${c},${r}`];
|
|
20
|
+
if (!baseId)
|
|
19
21
|
return;
|
|
20
|
-
const color =
|
|
22
|
+
const color = bases[baseId]?.color;
|
|
21
23
|
if (!color)
|
|
22
24
|
return;
|
|
23
25
|
const x = c * tile;
|
|
@@ -47,13 +49,13 @@ function renderFull(owner, teams, tile, visible) {
|
|
|
47
49
|
}
|
|
48
50
|
return nodes;
|
|
49
51
|
}
|
|
50
|
-
/** Coarse tier: flat translucent blocks (downsampled by owning
|
|
51
|
-
function renderCoarse(owner,
|
|
52
|
+
/** Coarse tier: flat translucent blocks (downsampled by owning base). */
|
|
53
|
+
function renderCoarse(owner, bases, tile, screenTilePx, visible) {
|
|
52
54
|
const factor = blockFactor(screenTilePx);
|
|
53
55
|
const bt = factor * tile;
|
|
54
56
|
const nodes = [];
|
|
55
|
-
for (const [bk,
|
|
56
|
-
const color =
|
|
57
|
+
for (const [bk, baseId] of Object.entries(downsampleCells(owner, factor))) {
|
|
58
|
+
const color = bases[baseId]?.color;
|
|
57
59
|
if (!color)
|
|
58
60
|
continue;
|
|
59
61
|
const [bc, br] = parseCellKey(bk);
|
|
@@ -67,7 +69,8 @@ function renderCoarse(owner, teams, tile, screenTilePx, visible) {
|
|
|
67
69
|
}
|
|
68
70
|
return nodes;
|
|
69
71
|
}
|
|
70
|
-
export function
|
|
72
|
+
export function BaseAreaLayer({ store, renderMode, }) {
|
|
73
|
+
const tool = useMapToolState();
|
|
71
74
|
const [, force] = useState(0);
|
|
72
75
|
const rafRef = useRef(0);
|
|
73
76
|
useEffect(() => {
|
|
@@ -81,19 +84,25 @@ export function TeamAreaLayer({ store, renderMode, }) {
|
|
|
81
84
|
cancelAnimationFrame(rafRef.current);
|
|
82
85
|
};
|
|
83
86
|
}, [store]);
|
|
84
|
-
|
|
85
|
-
|
|
87
|
+
// Territory paint is only shown while actually in base mode (map tool + base
|
|
88
|
+
// submode) — mirrors the EnterBanner indicator gating. Check the mode first so
|
|
89
|
+
// we skip the shape scan in getBaseMap on every non-base-mode re-render.
|
|
90
|
+
const inBaseMode = store.getActiveToolId() === MAP_TOOL_ID && tool.mode === "base";
|
|
91
|
+
if (!inBaseMode)
|
|
92
|
+
return null;
|
|
93
|
+
const base = getBaseMap(store);
|
|
94
|
+
if (!base || Object.keys(base.owner).length === 0)
|
|
86
95
|
return null;
|
|
87
96
|
const vp = store.getViewport();
|
|
88
97
|
const visible = visibleWorldRect(store);
|
|
89
|
-
const tile =
|
|
98
|
+
const tile = base.tile;
|
|
90
99
|
const screenTilePx = tile * vp.zoom;
|
|
91
100
|
const detail = tileDetail(screenTilePx, renderMode);
|
|
92
101
|
const cells = detail === "full"
|
|
93
|
-
? renderFull(
|
|
94
|
-
: renderCoarse(
|
|
102
|
+
? renderFull(base.owner, base.bases, tile, visible)
|
|
103
|
+
: renderCoarse(base.owner, base.bases, tile, screenTilePx, visible);
|
|
95
104
|
// Labels: HTML chips at screen coords (crisp, constant size). Hidden when coarse.
|
|
96
|
-
const anchors = detail === "full" ?
|
|
105
|
+
const anchors = detail === "full" ? baseRegionAnchors(base.owner, base.bases, tile) : [];
|
|
97
106
|
return (_jsxs("div", { style: { position: "absolute", inset: 0, pointerEvents: "none", overflow: "hidden" }, children: [_jsx("svg", { width: "100%", height: "100%", style: { display: "block", overflow: "visible" }, children: _jsx("g", { transform: `translate(${vp.x} ${vp.y}) scale(${vp.zoom})`, children: cells }) }), anchors.map((a) => (_jsxs("div", { style: {
|
|
98
107
|
position: "absolute",
|
|
99
108
|
left: a.x * vp.zoom + vp.x,
|
|
@@ -116,6 +125,6 @@ export function TeamAreaLayer({ store, renderMode, }) {
|
|
|
116
125
|
borderRadius: "50%",
|
|
117
126
|
background: a.color,
|
|
118
127
|
flex: "none",
|
|
119
|
-
} }), a.name] }, a.
|
|
128
|
+
} }), a.name] }, a.baseId)))] }));
|
|
120
129
|
}
|
|
121
|
-
//# sourceMappingURL=
|
|
130
|
+
//# sourceMappingURL=base-layer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-layer.js","sourceRoot":"","sources":["../../src/base/base-layer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BoundingBox, ShapeData, ShapeDefinition } from "@edv4h/usketch-shared";
|
|
2
|
+
export declare const BASE_MAP_TYPE = "base-map";
|
|
3
|
+
export interface BaseInfo {
|
|
4
|
+
name: string;
|
|
5
|
+
color: string;
|
|
6
|
+
}
|
|
7
|
+
/** cellKey("c,r") → baseId (sparse ownership map). */
|
|
8
|
+
export type OwnerMap = Record<string, string>;
|
|
9
|
+
export interface BaseMapShapeData extends ShapeData {
|
|
10
|
+
type: "base-map";
|
|
11
|
+
tile: number;
|
|
12
|
+
bases: Record<string, BaseInfo>;
|
|
13
|
+
owner: OwnerMap;
|
|
14
|
+
}
|
|
15
|
+
export declare function isBaseMap(shape: ShapeData): shape is BaseMapShapeData;
|
|
16
|
+
export declare function makeBaseMap(tile: number): BaseMapShapeData;
|
|
17
|
+
/** Bounds of all owned cells (keys are cellKeys). */
|
|
18
|
+
export declare function ownerBounds(owner: OwnerMap, tile: number): BoundingBox;
|
|
19
|
+
export declare function createBaseMapShapeDefinition(tile?: number): ShapeDefinition;
|
|
20
|
+
//# sourceMappingURL=base-map-shape.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"base-map-shape.d.ts","sourceRoot":"","sources":["../../src/base/base-map-shape.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAKrF,eAAO,MAAM,aAAa,aAAa,CAAC;AAExC,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACd;AAED,sDAAsD;AACtD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IAClD,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,KAAK,EAAE,QAAQ,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,IAAI,gBAAgB,CAErE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAc1D;AAED,qDAAqD;AACrD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAGtE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,GAAE,MAAqB,GAAG,eAAe,CA2CzF"}
|
|
@@ -2,21 +2,21 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { generateId } from "@edv4h/usketch-shared";
|
|
3
3
|
import { cellKey, cellsBounds, parseCellKey } from "../autotile.js";
|
|
4
4
|
import { DEFAULT_TILE } from "../tilemap-shape.js";
|
|
5
|
-
export const
|
|
6
|
-
export function
|
|
7
|
-
return shape.type ===
|
|
5
|
+
export const BASE_MAP_TYPE = "base-map";
|
|
6
|
+
export function isBaseMap(shape) {
|
|
7
|
+
return shape.type === BASE_MAP_TYPE;
|
|
8
8
|
}
|
|
9
|
-
export function
|
|
9
|
+
export function makeBaseMap(tile) {
|
|
10
10
|
return {
|
|
11
11
|
id: generateId(),
|
|
12
|
-
type: "
|
|
12
|
+
type: "base-map",
|
|
13
13
|
x: 0,
|
|
14
14
|
y: 0,
|
|
15
15
|
width: 0,
|
|
16
16
|
height: 0,
|
|
17
17
|
style: { fill: "transparent", stroke: "transparent", strokeWidth: 0, opacity: 1 },
|
|
18
18
|
tile,
|
|
19
|
-
|
|
19
|
+
bases: {},
|
|
20
20
|
owner: {},
|
|
21
21
|
locked: true,
|
|
22
22
|
};
|
|
@@ -26,7 +26,7 @@ export function ownerBounds(owner, tile) {
|
|
|
26
26
|
// cellsBounds only reads keys, so the value type is irrelevant here.
|
|
27
27
|
return cellsBounds(owner, tile);
|
|
28
28
|
}
|
|
29
|
-
export function
|
|
29
|
+
export function createBaseMapShapeDefinition(tile = DEFAULT_TILE) {
|
|
30
30
|
return {
|
|
31
31
|
render: () => _jsx("g", {}),
|
|
32
32
|
renderTarget: "svg",
|
|
@@ -37,7 +37,7 @@ export function createTeamMapShapeDefinition(tile = DEFAULT_TILE) {
|
|
|
37
37
|
hitTest: () => false,
|
|
38
38
|
resizable: false,
|
|
39
39
|
resize: (data) => data,
|
|
40
|
-
createDefault: (params) => ({ ...
|
|
40
|
+
createDefault: (params) => ({ ...makeBaseMap(tile), id: params.id }),
|
|
41
41
|
move: (data, dx, dy) => {
|
|
42
42
|
const d = data;
|
|
43
43
|
const t = d.tile ?? tile;
|
|
@@ -46,24 +46,24 @@ export function createTeamMapShapeDefinition(tile = DEFAULT_TILE) {
|
|
|
46
46
|
if (dc === 0 && dr === 0)
|
|
47
47
|
return {};
|
|
48
48
|
const next = {};
|
|
49
|
-
for (const [key,
|
|
49
|
+
for (const [key, baseId] of Object.entries(d.owner)) {
|
|
50
50
|
const [c, r] = parseCellKey(key);
|
|
51
|
-
next[cellKey(c + dc, r + dr)] =
|
|
51
|
+
next[cellKey(c + dc, r + dr)] = baseId;
|
|
52
52
|
}
|
|
53
53
|
return { owner: next, ...ownerBounds(next, t) };
|
|
54
54
|
},
|
|
55
55
|
serializeForAi: (data) => {
|
|
56
56
|
const d = data;
|
|
57
57
|
return {
|
|
58
|
-
kind: "
|
|
59
|
-
|
|
58
|
+
kind: "base-map",
|
|
59
|
+
baseCount: Object.keys(d.bases ?? {}).length,
|
|
60
60
|
ownedCells: Object.keys(d.owner ?? {}).length,
|
|
61
61
|
};
|
|
62
62
|
},
|
|
63
63
|
debugFields: (data) => {
|
|
64
64
|
const d = data;
|
|
65
65
|
return {
|
|
66
|
-
|
|
66
|
+
bases: Object.values(d.bases ?? {})
|
|
67
67
|
.map((t) => t.name)
|
|
68
68
|
.join(", "),
|
|
69
69
|
ownedCells: Object.keys(d.owner ?? {}).length,
|
|
@@ -71,4 +71,4 @@ export function createTeamMapShapeDefinition(tile = DEFAULT_TILE) {
|
|
|
71
71
|
},
|
|
72
72
|
};
|
|
73
73
|
}
|
|
74
|
-
//# sourceMappingURL=
|
|
74
|
+
//# sourceMappingURL=base-map-shape.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"base-map-shape.js","sourceRoot":"","sources":["../../src/base/base-map-shape.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { BoardStore, CommandRegistry } from "@edv4h/usketch-shared";
|
|
2
2
|
import { type Cells } from "../autotile.js";
|
|
3
|
-
import { type
|
|
4
|
-
export interface
|
|
3
|
+
import { type BaseInfo, type BaseMapShapeData, type OwnerMap } from "./base-map-shape.js";
|
|
4
|
+
export interface BaseDeps {
|
|
5
5
|
store: BoardStore;
|
|
6
6
|
commands: CommandRegistry;
|
|
7
7
|
tile: number;
|
|
8
8
|
}
|
|
9
|
-
/**
|
|
10
|
-
export declare function
|
|
9
|
+
/** Base id owning the cell at a world point, or null. */
|
|
10
|
+
export declare function baseIdAtWorld(owner: OwnerMap, x: number, y: number, tile: number): string | null;
|
|
11
11
|
/**
|
|
12
12
|
* Connected land region (4-neighbour) starting at a cell — all cells reachable
|
|
13
13
|
* without crossing water/empty. `terrainCells` is the tilemap's cells; a cell is
|
|
@@ -15,36 +15,36 @@ export declare function teamIdAtWorld(owner: OwnerMap, x: number, y: number, til
|
|
|
15
15
|
* start isn't land).
|
|
16
16
|
*/
|
|
17
17
|
export declare function landRegionFrom(terrainCells: Cells, startCol: number, startRow: number): string[];
|
|
18
|
-
/** Shallow equality of two ownership maps (same keys +
|
|
18
|
+
/** Shallow equality of two ownership maps (same keys + base ids). */
|
|
19
19
|
export declare function ownersEqual(a: OwnerMap, b: OwnerMap): boolean;
|
|
20
|
-
export interface
|
|
21
|
-
|
|
20
|
+
export interface BaseRegionAnchor {
|
|
21
|
+
baseId: string;
|
|
22
22
|
name: string;
|
|
23
23
|
color: string;
|
|
24
|
-
/** Label anchor in world coords (centre of the
|
|
24
|
+
/** Label anchor in world coords (centre of the base's owned-cell bbox). */
|
|
25
25
|
x: number;
|
|
26
26
|
y: number;
|
|
27
27
|
count: number;
|
|
28
28
|
}
|
|
29
|
-
/** One label anchor per
|
|
30
|
-
export declare function
|
|
31
|
-
/** The single shared
|
|
32
|
-
export declare function
|
|
29
|
+
/** One label anchor per base that owns at least one cell. */
|
|
30
|
+
export declare function baseRegionAnchors(owner: OwnerMap, bases: Record<string, BaseInfo>, tile: number): BaseRegionAnchor[];
|
|
31
|
+
/** The single shared base-map, creating it (live) if none exists yet. */
|
|
32
|
+
export declare function resolveBaseMap(store: BoardStore, tile: number): {
|
|
33
33
|
id: string;
|
|
34
34
|
created: boolean;
|
|
35
35
|
};
|
|
36
|
-
export declare function
|
|
37
|
-
/** Create a new
|
|
38
|
-
export declare function
|
|
39
|
-
/** Live owner snapshot (copy) of the
|
|
36
|
+
export declare function getBaseMap(store: BoardStore): BaseMapShapeData | undefined;
|
|
37
|
+
/** Create a new base (name + color); returns its id. Undoable. */
|
|
38
|
+
export declare function createBase(deps: BaseDeps, name: string, color: string): string;
|
|
39
|
+
/** Live owner snapshot (copy) of the base-map. */
|
|
40
40
|
export declare function currentOwner(store: BoardStore, id: string): OwnerMap;
|
|
41
41
|
/** Live update (non-undoable) used during a paint stroke. */
|
|
42
42
|
export declare function applyOwner(store: BoardStore, id: string, owner: OwnerMap, tile: number): void;
|
|
43
43
|
/** Commit an owner change as one undoable command (undo restores `prevOwner`). */
|
|
44
|
-
export declare function commitOwner(deps:
|
|
44
|
+
export declare function commitOwner(deps: BaseDeps, id: string, prevOwner: OwnerMap): void;
|
|
45
45
|
/**
|
|
46
|
-
* Assign the connected land region (island) under a world point to a
|
|
46
|
+
* Assign the connected land region (island) under a world point to a base, as
|
|
47
47
|
* one undoable command. No-op if there's no tilemap or the point isn't land.
|
|
48
48
|
*/
|
|
49
|
-
export declare function assignIsland(deps:
|
|
50
|
-
//# sourceMappingURL=
|
|
49
|
+
export declare function assignIsland(deps: BaseDeps, x: number, y: number, baseId: string): void;
|
|
50
|
+
//# sourceMappingURL=base-ops.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"base-ops.d.ts","sourceRoot":"","sources":["../../src/base/base-ops.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAW,eAAe,EAAa,MAAM,uBAAuB,CAAC;AAE7F,OAAO,EAAE,KAAK,KAAK,EAAsC,MAAM,gBAAgB,CAAC;AAEhF,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,gBAAgB,EAGrB,KAAK,QAAQ,EAEb,MAAM,qBAAqB,CAAC;AAI7B,MAAM,WAAW,QAAQ;IACxB,KAAK,EAAE,UAAU,CAAC;IAClB,QAAQ,EAAE,eAAe,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;CACb;AAID,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGhG;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAwBhG;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,QAAQ,GAAG,OAAO,CAK7D;AAED,MAAM,WAAW,gBAAgB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,2EAA2E;IAC3E,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;CACd;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,EAC/B,IAAI,EAAE,MAAM,GACV,gBAAgB,EAAE,CA+BpB;AAID,yEAAyE;AACzE,wBAAgB,cAAc,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAOhG;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS,CAG1E;AAOD,kEAAkE;AAClE,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAY9E;AAED,kDAAkD;AAClD,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,CAGpE;AAED,6DAA6D;AAC7D,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAE7F;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAI,CAYjF;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAiBvF"}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { generateId } from "@edv4h/usketch-shared";
|
|
2
2
|
import { cellKey, parseCellKey, worldToCell } from "../autotile.js";
|
|
3
3
|
import { isTileMap } from "../tilemap-shape.js";
|
|
4
|
-
import {
|
|
4
|
+
import { isBaseMap, makeBaseMap, ownerBounds, } from "./base-map-shape.js";
|
|
5
5
|
const MAX_ISLAND_CELLS = 100_000; // safety bound for the flood
|
|
6
6
|
// ── Pure ─────────────────────────────────────────────────────────────────────
|
|
7
|
-
/**
|
|
8
|
-
export function
|
|
7
|
+
/** Base id owning the cell at a world point, or null. */
|
|
8
|
+
export function baseIdAtWorld(owner, x, y, tile) {
|
|
9
9
|
const [c, r] = worldToCell(x, y, tile);
|
|
10
10
|
return owner[cellKey(c, r)] ?? null;
|
|
11
11
|
}
|
|
@@ -45,7 +45,7 @@ export function landRegionFrom(terrainCells, startCol, startRow) {
|
|
|
45
45
|
}
|
|
46
46
|
return out;
|
|
47
47
|
}
|
|
48
|
-
/** Shallow equality of two ownership maps (same keys +
|
|
48
|
+
/** Shallow equality of two ownership maps (same keys + base ids). */
|
|
49
49
|
export function ownersEqual(a, b) {
|
|
50
50
|
const ak = Object.keys(a);
|
|
51
51
|
if (ak.length !== Object.keys(b).length)
|
|
@@ -55,14 +55,14 @@ export function ownersEqual(a, b) {
|
|
|
55
55
|
return false;
|
|
56
56
|
return true;
|
|
57
57
|
}
|
|
58
|
-
/** One label anchor per
|
|
59
|
-
export function
|
|
58
|
+
/** One label anchor per base that owns at least one cell. */
|
|
59
|
+
export function baseRegionAnchors(owner, bases, tile) {
|
|
60
60
|
const acc = new Map();
|
|
61
|
-
for (const [key,
|
|
61
|
+
for (const [key, baseId] of Object.entries(owner)) {
|
|
62
62
|
const [c, r] = parseCellKey(key);
|
|
63
|
-
const a = acc.get(
|
|
63
|
+
const a = acc.get(baseId);
|
|
64
64
|
if (!a)
|
|
65
|
-
acc.set(
|
|
65
|
+
acc.set(baseId, { minC: c, minR: r, maxC: c, maxR: r, n: 1 });
|
|
66
66
|
else {
|
|
67
67
|
a.minC = Math.min(a.minC, c);
|
|
68
68
|
a.minR = Math.min(a.minR, r);
|
|
@@ -72,12 +72,12 @@ export function teamRegionAnchors(owner, teams, tile) {
|
|
|
72
72
|
}
|
|
73
73
|
}
|
|
74
74
|
const out = [];
|
|
75
|
-
for (const [
|
|
76
|
-
const info =
|
|
75
|
+
for (const [baseId, a] of acc) {
|
|
76
|
+
const info = bases[baseId];
|
|
77
77
|
if (!info)
|
|
78
78
|
continue;
|
|
79
79
|
out.push({
|
|
80
|
-
|
|
80
|
+
baseId,
|
|
81
81
|
name: info.name,
|
|
82
82
|
color: info.color,
|
|
83
83
|
x: ((a.minC + a.maxC + 1) / 2) * tile,
|
|
@@ -88,19 +88,19 @@ export function teamRegionAnchors(owner, teams, tile) {
|
|
|
88
88
|
return out;
|
|
89
89
|
}
|
|
90
90
|
// ── Store ops ────────────────────────────────────────────────────────────────
|
|
91
|
-
/** The single shared
|
|
92
|
-
export function
|
|
91
|
+
/** The single shared base-map, creating it (live) if none exists yet. */
|
|
92
|
+
export function resolveBaseMap(store, tile) {
|
|
93
93
|
for (const [, s] of store.getShapes()) {
|
|
94
|
-
if (
|
|
94
|
+
if (isBaseMap(s))
|
|
95
95
|
return { id: s.id, created: false };
|
|
96
96
|
}
|
|
97
|
-
const tm =
|
|
97
|
+
const tm = makeBaseMap(tile);
|
|
98
98
|
store.addShape(tm);
|
|
99
99
|
return { id: tm.id, created: true };
|
|
100
100
|
}
|
|
101
|
-
export function
|
|
101
|
+
export function getBaseMap(store) {
|
|
102
102
|
for (const [, s] of store.getShapes())
|
|
103
|
-
if (
|
|
103
|
+
if (isBaseMap(s))
|
|
104
104
|
return s;
|
|
105
105
|
return undefined;
|
|
106
106
|
}
|
|
@@ -110,21 +110,21 @@ function findTilemap(store) {
|
|
|
110
110
|
return s;
|
|
111
111
|
return undefined;
|
|
112
112
|
}
|
|
113
|
-
/** Create a new
|
|
114
|
-
export function
|
|
115
|
-
const { id } =
|
|
113
|
+
/** Create a new base (name + color); returns its id. Undoable. */
|
|
114
|
+
export function createBase(deps, name, color) {
|
|
115
|
+
const { id } = resolveBaseMap(deps.store, deps.tile);
|
|
116
116
|
const shape = deps.store.getShape(id);
|
|
117
|
-
const
|
|
118
|
-
const
|
|
119
|
-
const
|
|
117
|
+
const baseId = generateId();
|
|
118
|
+
const prevBases = { ...(shape?.bases ?? {}) };
|
|
119
|
+
const nextBases = { ...prevBases, [baseId]: { name, color } };
|
|
120
120
|
const command = {
|
|
121
|
-
execute: () => deps.store.updateShape(id, {
|
|
122
|
-
undo: () => deps.store.updateShape(id, {
|
|
121
|
+
execute: () => deps.store.updateShape(id, { bases: nextBases }),
|
|
122
|
+
undo: () => deps.store.updateShape(id, { bases: prevBases }),
|
|
123
123
|
};
|
|
124
124
|
deps.commands.execute(command);
|
|
125
|
-
return
|
|
125
|
+
return baseId;
|
|
126
126
|
}
|
|
127
|
-
/** Live owner snapshot (copy) of the
|
|
127
|
+
/** Live owner snapshot (copy) of the base-map. */
|
|
128
128
|
export function currentOwner(store, id) {
|
|
129
129
|
const s = store.getShape(id);
|
|
130
130
|
return s ? { ...s.owner } : {};
|
|
@@ -149,10 +149,10 @@ export function commitOwner(deps, id, prevOwner) {
|
|
|
149
149
|
deps.commands.execute(command);
|
|
150
150
|
}
|
|
151
151
|
/**
|
|
152
|
-
* Assign the connected land region (island) under a world point to a
|
|
152
|
+
* Assign the connected land region (island) under a world point to a base, as
|
|
153
153
|
* one undoable command. No-op if there's no tilemap or the point isn't land.
|
|
154
154
|
*/
|
|
155
|
-
export function assignIsland(deps, x, y,
|
|
155
|
+
export function assignIsland(deps, x, y, baseId) {
|
|
156
156
|
const tilemap = findTilemap(deps.store);
|
|
157
157
|
if (!tilemap)
|
|
158
158
|
return;
|
|
@@ -160,11 +160,11 @@ export function assignIsland(deps, x, y, teamId) {
|
|
|
160
160
|
const keys = landRegionFrom(tilemap.cells, c, r);
|
|
161
161
|
if (keys.length === 0)
|
|
162
162
|
return;
|
|
163
|
-
const { id } =
|
|
163
|
+
const { id } = resolveBaseMap(deps.store, deps.tile);
|
|
164
164
|
const prev = currentOwner(deps.store, id);
|
|
165
165
|
const next = { ...prev };
|
|
166
166
|
for (const k of keys)
|
|
167
|
-
next[k] =
|
|
167
|
+
next[k] = baseId;
|
|
168
168
|
const prevB = ownerBounds(prev, deps.tile);
|
|
169
169
|
const nextB = ownerBounds(next, deps.tile);
|
|
170
170
|
const command = {
|
|
@@ -173,4 +173,4 @@ export function assignIsland(deps, x, y, teamId) {
|
|
|
173
173
|
};
|
|
174
174
|
deps.commands.execute(command);
|
|
175
175
|
}
|
|
176
|
-
//# sourceMappingURL=
|
|
176
|
+
//# sourceMappingURL=base-ops.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"base-ops.js","sourceRoot":"","sources":["../../src/base/base-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export type BaseMode = "assign" | "erase" | "island";
|
|
2
|
+
export interface BaseToolState {
|
|
3
|
+
/** Currently selected base id, or null when none is chosen yet. */
|
|
4
|
+
activeBaseId: string | null;
|
|
5
|
+
mode: BaseMode;
|
|
6
|
+
}
|
|
7
|
+
export declare const baseStateStore: import("../reactive-store.js").ReactiveStore<BaseToolState>;
|
|
8
|
+
export declare function useBaseState(): BaseToolState;
|
|
9
|
+
//# sourceMappingURL=base-state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"base-state.d.ts","sourceRoot":"","sources":["../../src/base/base-state.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,aAAa;IAC7B,mEAAmE;IACnE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,QAAQ,CAAC;CACf;AAED,eAAO,MAAM,cAAc,6DAGzB,CAAC;AAEH,wBAAgB,YAAY,IAAI,aAAa,CAE5C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// Active base-tool interaction state, shared between the palette and the tool.
|
|
2
|
+
// Module-scoped, app-local (not synced). Base data itself lives in the synced
|
|
3
|
+
// `base-map` shape; this is only which base/mode the local user is editing with.
|
|
4
|
+
import { useSyncExternalStore } from "react";
|
|
5
|
+
import { createReactiveStore } from "../reactive-store.js";
|
|
6
|
+
export const baseStateStore = createReactiveStore({
|
|
7
|
+
activeBaseId: null,
|
|
8
|
+
mode: "assign",
|
|
9
|
+
});
|
|
10
|
+
export function useBaseState() {
|
|
11
|
+
return useSyncExternalStore(baseStateStore.subscribe, baseStateStore.get, baseStateStore.get);
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=base-state.js.map
|