@edv4h/usketch-plugin-map 0.9.0 → 0.10.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.
Files changed (47) hide show
  1. package/dist/autotile.d.ts +4 -0
  2. package/dist/autotile.d.ts.map +1 -1
  3. package/dist/autotile.js +7 -3
  4. package/dist/autotile.js.map +1 -1
  5. package/dist/base/base-layer.d.ts.map +1 -1
  6. package/dist/base/base-layer.js +6 -12
  7. package/dist/base/base-layer.js.map +1 -1
  8. package/dist/base/base-map-shape.d.ts +3 -2
  9. package/dist/base/base-map-shape.d.ts.map +1 -1
  10. package/dist/base/base-map-shape.js.map +1 -1
  11. package/dist/base/base-ops.d.ts +6 -8
  12. package/dist/base/base-ops.d.ts.map +1 -1
  13. package/dist/base/base-ops.js +15 -63
  14. package/dist/base/base-ops.js.map +1 -1
  15. package/dist/base/territory.d.ts.map +1 -1
  16. package/dist/base/territory.js +11 -17
  17. package/dist/base/territory.js.map +1 -1
  18. package/dist/generate.d.ts.map +1 -1
  19. package/dist/generate.js +6 -4
  20. package/dist/generate.js.map +1 -1
  21. package/dist/icon-render.d.ts +10 -0
  22. package/dist/icon-render.d.ts.map +1 -0
  23. package/dist/icon-render.js +26 -0
  24. package/dist/icon-render.js.map +1 -0
  25. package/dist/index.d.ts +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +1 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/map-icon-layer.d.ts +9 -0
  30. package/dist/map-icon-layer.d.ts.map +1 -0
  31. package/dist/map-icon-layer.js +55 -0
  32. package/dist/map-icon-layer.js.map +1 -0
  33. package/dist/map-tool.d.ts.map +1 -1
  34. package/dist/map-tool.js +89 -54
  35. package/dist/map-tool.js.map +1 -1
  36. package/dist/plugin.d.ts.map +1 -1
  37. package/dist/plugin.js +15 -3
  38. package/dist/plugin.js.map +1 -1
  39. package/dist/tilemap-shape.d.ts +15 -3
  40. package/dist/tilemap-shape.d.ts.map +1 -1
  41. package/dist/tilemap-shape.js +40 -14
  42. package/dist/tilemap-shape.js.map +1 -1
  43. package/package.json +1 -1
  44. package/dist/map-icon-shape.d.ts +0 -17
  45. package/dist/map-icon-shape.d.ts.map +0 -1
  46. package/dist/map-icon-shape.js +0 -106
  47. package/dist/map-icon-shape.js.map +0 -1
@@ -1,11 +1,20 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { generateId } from "@edv4h/usketch-shared";
3
- import { cellKey, cellsBounds, parseCellKey } from "./autotile.js";
3
+ import { cellKey, keysBounds, parseCellKey } from "./autotile.js";
4
4
  export const TILEMAP_TYPE = "tilemap";
5
5
  export const DEFAULT_TILE = 40;
6
6
  export function isTileMap(shape) {
7
7
  return shape.type === TILEMAP_TYPE;
8
8
  }
9
+ /**
10
+ * Bounds patch keeping x/y/width/height in sync with BOTH painted cells and placed
11
+ * icons — an icon-only cell outside the painted area still counts, so the box
12
+ * encloses everything the tilemap owns.
13
+ */
14
+ export function tilemapBounds(cells, icons, tile) {
15
+ const keys = icons ? [...Object.keys(cells), ...Object.keys(icons)] : Object.keys(cells);
16
+ return keysBounds(keys, tile);
17
+ }
9
18
  /**
10
19
  * The tilemap that owns the infinite-terrain seed, chosen **deterministically**
11
20
  * (lowest `id`) so every synced client resolves the same seed even if several
@@ -54,14 +63,11 @@ export function makeTileMap(tile) {
54
63
  style: { fill: "transparent", stroke: "transparent", strokeWidth: 0, opacity: 1 },
55
64
  tile,
56
65
  cells: {},
66
+ icons: {},
57
67
  handPaint: {},
58
68
  locked: true,
59
69
  };
60
70
  }
61
- /** Bounds patch to keep x/y/width/height in sync with the painted cells. */
62
- export function boundsPatch(cells, tile) {
63
- return cellsBounds(cells, tile);
64
- }
65
71
  export function createTileMapShapeDefinition(tile = DEFAULT_TILE) {
66
72
  return {
67
73
  // Drawing is done by the MapLayer; the shape itself renders nothing.
@@ -69,7 +75,7 @@ export function createTileMapShapeDefinition(tile = DEFAULT_TILE) {
69
75
  renderTarget: "svg",
70
76
  getBounds: (data) => {
71
77
  const d = data;
72
- return cellsBounds(d.cells ?? {}, d.tile ?? tile);
78
+ return tilemapBounds(d.cells ?? {}, d.icons, d.tile ?? tile);
73
79
  },
74
80
  // Never selectable via pointer — it is a substrate, not an object.
75
81
  hitTest: () => false,
@@ -79,8 +85,10 @@ export function createTileMapShapeDefinition(tile = DEFAULT_TILE) {
79
85
  ...makeTileMap(tile),
80
86
  id: params.id,
81
87
  }),
82
- // Locked, so user-move is not expected; support it anyway by shifting cells
83
- // on whole-tile deltas (keeps the grid aligned).
88
+ // Locked, so user-move is not expected; support it anyway by shifting every
89
+ // grid (cells / icons / handPaint) by the same whole-tile delta so they stay
90
+ // aligned — handPaint keys mirror `cells` and territory expansion keys off it,
91
+ // so it must move too.
84
92
  move: (data, dx, dy) => {
85
93
  const d = data;
86
94
  const t = d.tile ?? tile;
@@ -88,12 +96,25 @@ export function createTileMapShapeDefinition(tile = DEFAULT_TILE) {
88
96
  const dr = Math.round(dy / t);
89
97
  if (dc === 0 && dr === 0)
90
98
  return {};
91
- const next = {};
92
- for (const [key, terrain] of Object.entries(d.cells)) {
99
+ const shift = (key) => {
93
100
  const [c, r] = parseCellKey(key);
94
- next[cellKey(c + dc, r + dr)] = terrain;
95
- }
96
- return { cells: next, ...cellsBounds(next, t) };
101
+ return cellKey(c + dc, r + dr);
102
+ };
103
+ const next = {};
104
+ for (const [key, terrain] of Object.entries(d.cells))
105
+ next[shift(key)] = terrain;
106
+ const nextIcons = {};
107
+ for (const [key, iconKey] of Object.entries(d.icons ?? {}))
108
+ nextIcons[shift(key)] = iconKey;
109
+ const nextHandPaint = {};
110
+ for (const key of Object.keys(d.handPaint ?? {}))
111
+ nextHandPaint[shift(key)] = true;
112
+ return {
113
+ cells: next,
114
+ icons: nextIcons,
115
+ handPaint: nextHandPaint,
116
+ ...tilemapBounds(next, nextIcons, t),
117
+ };
97
118
  },
98
119
  serializeForAi: (data) => {
99
120
  const d = data;
@@ -101,12 +122,17 @@ export function createTileMapShapeDefinition(tile = DEFAULT_TILE) {
101
122
  return {
102
123
  kind: "tilemap",
103
124
  tileCount: Object.keys(d.cells ?? {}).length,
125
+ iconCount: Object.keys(d.icons ?? {}).length,
104
126
  terrains: [...used],
105
127
  };
106
128
  },
107
129
  debugFields: (data) => {
108
130
  const d = data;
109
- return { tile: d.tile, cellCount: Object.keys(d.cells ?? {}).length };
131
+ return {
132
+ tile: d.tile,
133
+ cellCount: Object.keys(d.cells ?? {}).length,
134
+ iconCount: Object.keys(d.icons ?? {}).length,
135
+ };
110
136
  },
111
137
  };
112
138
  }
@@ -1 +1 @@
1
- {"version":3,"file":"tilemap-shape.js","sourceRoot":"","sources":["../src/tilemap-shape.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAc,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAI/E,MAAM,CAAC,MAAM,YAAY,GAAG,SAAS,CAAC;AACtC,MAAM,CAAC,MAAM,YAAY,GAAG,EAAE,CAAC;AA6B/B,MAAM,UAAU,SAAS,CAAC,KAAgB;IACzC,OAAO,KAAK,CAAC,IAAI,KAAK,YAAY,CAAC;AACpC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,MAA2B;IACxD,IAAI,IAAI,GAA4B,IAAI,CAAC;IACzC,+EAA+E;IAC/E,2EAA2E;IAC3E,4EAA4E;IAC5E,+EAA+E;IAC/E,QAAQ;IACR,KAAK,MAAM,CAAC,IAAI,MAAM;QACrB,IACC,SAAS,CAAC,CAAC,CAAC;YACZ,CAAC,CAAC,QAAQ,IAAI,IAAI;YAClB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5B,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAEjC,IAAI,GAAG,CAAC,CAAC;IACX,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAA2B;IACxD,IAAI,IAAI,GAA4B,IAAI,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,MAAM;QAAE,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YAAE,IAAI,GAAG,CAAC,CAAC;IACxF,OAAO,IAAI,CAAC;AACb,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,WAAW,CAAC,IAAY;IACvC,MAAM,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IACnD,OAAO;QACN,EAAE,EAAE,UAAU,EAAE;QAChB,IAAI,EAAE,SAAS;QACf,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE;QACjF,IAAI;QACJ,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,IAAI;KACZ,CAAC;AACH,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,WAAW,CAAC,KAAY,EAAE,IAAY;IACrD,OAAO,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAI,GAAW,YAAY;IACvE,OAAO;QACN,qEAAqE;QACrE,MAAM,EAAE,GAAG,EAAE,CAAC,aAAK;QACnB,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,CAAC,IAAI,EAAe,EAAE;YAChC,MAAM,CAAC,GAAG,IAAwB,CAAC;YACnC,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,mEAAmE;QACnE,OAAO,EAAE,GAAG,EAAE,CAAC,KAAK;QACpB,SAAS,EAAE,KAAK;QAChB,MAAM,EAAE,CAAC,IAAI,EAAa,EAAE,CAAC,IAAI;QACjC,aAAa,EAAE,CAAC,MAAM,EAAa,EAAE,CAAC,CAAC;YACtC,GAAG,WAAW,CAAC,IAAI,CAAC;YACpB,EAAE,EAAE,MAAM,CAAC,EAAE;SACb,CAAC;QACF,4EAA4E;QAC5E,iDAAiD;QACjD,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,EAAsB,EAAE;YAC1C,MAAM,CAAC,GAAG,IAAwB,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC;YACzB,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC;gBAAE,OAAO,EAAE,CAAC;YACpC,MAAM,IAAI,GAAU,EAAE,CAAC;YACvB,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtD,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC;YACzC,CAAC;YACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,EAAwB,CAAC;QACvE,CAAC;QACD,cAAc,EAAE,CAAC,IAAI,EAA2B,EAAE;YACjD,MAAM,CAAC,GAAG,IAAwB,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;YAC/D,OAAO;gBACN,IAAI,EAAE,SAAS;gBACf,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM;gBAC5C,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC;aACnB,CAAC;QACH,CAAC;QACD,WAAW,EAAE,CAAC,IAAI,EAA2B,EAAE;YAC9C,MAAM,CAAC,GAAG,IAAwB,CAAC;YACnC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;QACvE,CAAC;KACD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"tilemap-shape.js","sourceRoot":"","sources":["../src/tilemap-shape.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edv4h/usketch-plugin-map",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -1,17 +0,0 @@
1
- import type { ShapeData, ShapeDefinition } from "@edv4h/usketch-shared";
2
- import { type IconCategory } from "./icons.js";
3
- export declare const MAP_ICON_TYPE = "map-icon";
4
- export declare const DEFAULT_ICON_SIZE = 48;
5
- export interface MapIconShapeData extends ShapeData {
6
- type: "map-icon";
7
- meta: {
8
- iconKey: string;
9
- category: IconCategory;
10
- /** Set when this icon is a base "beacon" (see setBeacon). The base's radius
11
- * lives on the base registry, not here. */
12
- baseId?: string;
13
- };
14
- }
15
- export declare function makeMapIcon(iconKey: string, category: IconCategory, x: number, y: number, size?: number): MapIconShapeData;
16
- export declare const mapIconShapeDefinition: ShapeDefinition;
17
- //# sourceMappingURL=map-icon-shape.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"map-icon-shape.d.ts","sourceRoot":"","sources":["../src/map-icon-shape.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAIX,SAAS,EACT,eAAe,EACf,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAgB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAM7D,eAAO,MAAM,aAAa,aAAa,CAAC;AACxC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,MAAM,WAAW,gBAAiB,SAAQ,SAAS;IAClD,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE;QACL,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,YAAY,CAAC;QACvB;oDAC4C;QAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACF;AAED,wBAAgB,WAAW,CAC1B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,YAAY,EACtB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,IAAI,SAAoB,GACtB,gBAAgB,CAWlB;AA6ED,eAAO,MAAM,sBAAsB,EAAE,eAsBpC,CAAC"}
@@ -1,106 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { generateId, withRotation } from "@edv4h/usketch-shared";
3
- import { ICONS_BY_KEY } from "./icons.js";
4
- import { WOBBLE_FILTER_ID } from "./map-layer.js";
5
- import { terrainCssVars } from "./palette.js";
6
- import { useRenderConfig } from "./render-config.js";
7
- import { renderSvgNodes } from "./svg-nodes.js";
8
- export const MAP_ICON_TYPE = "map-icon";
9
- export const DEFAULT_ICON_SIZE = 48;
10
- export function makeMapIcon(iconKey, category, x, y, size = DEFAULT_ICON_SIZE) {
11
- return {
12
- id: generateId(),
13
- type: "map-icon",
14
- x: Math.round(x - size / 2),
15
- y: Math.round(y - size / 2),
16
- width: size,
17
- height: size,
18
- style: { fill: "transparent", stroke: "transparent", strokeWidth: 0, opacity: 1 },
19
- meta: { iconKey, category },
20
- };
21
- }
22
- function parseViewBox(vb) {
23
- const p = vb.split(/[\s,]+/).map(Number);
24
- return [p[0] || 0, p[1] || 0, p[2] || 48, p[3] || 48];
25
- }
26
- function MapIconBody({ data }) {
27
- const cfg = useRenderConfig();
28
- const icon = ICONS_BY_KEY.get(data.meta?.iconKey ?? "");
29
- if (!icon)
30
- return _jsx("g", {});
31
- const [vx, vy, vw, vh] = parseViewBox(icon.viewBox);
32
- const sx = data.width / vw;
33
- const sy = data.height / vh;
34
- const cssVars = terrainCssVars(cfg.colorMode, cfg.strokeScale);
35
- return (_jsx("g", { style: cssVars, filter: cfg.lineStyle === "wobble" ? `url(#${WOBBLE_FILTER_ID})` : undefined, children: _jsx("g", { transform: `translate(${data.x} ${data.y}) scale(${sx} ${sy}) translate(${-vx} ${-vy})`, children: renderSvgNodes(icon.nodes, `icon-${icon.key}`) }) }));
36
- }
37
- function baseHitTest(data, point) {
38
- return (point.x >= data.x &&
39
- point.x <= data.x + data.width &&
40
- point.y >= data.y &&
41
- point.y <= data.y + data.height);
42
- }
43
- function resize(data, handle, delta) {
44
- let { x, y, width, height } = data;
45
- switch (handle) {
46
- case "se":
47
- width += delta.x;
48
- height += delta.y;
49
- break;
50
- case "nw":
51
- x += delta.x;
52
- y += delta.y;
53
- width -= delta.x;
54
- height -= delta.y;
55
- break;
56
- case "ne":
57
- y += delta.y;
58
- width += delta.x;
59
- height -= delta.y;
60
- break;
61
- case "sw":
62
- x += delta.x;
63
- width -= delta.x;
64
- height += delta.y;
65
- break;
66
- case "e":
67
- width += delta.x;
68
- break;
69
- case "w":
70
- x += delta.x;
71
- width -= delta.x;
72
- break;
73
- case "n":
74
- y += delta.y;
75
- height -= delta.y;
76
- break;
77
- case "s":
78
- height += delta.y;
79
- break;
80
- }
81
- return { ...data, x, y, width: Math.max(16, width), height: Math.max(16, height) };
82
- }
83
- export const mapIconShapeDefinition = {
84
- render: (data) => _jsx(MapIconBody, { data: data }),
85
- renderTarget: "svg",
86
- getBounds: (data) => ({
87
- x: data.x,
88
- y: data.y,
89
- width: data.width,
90
- height: data.height,
91
- }),
92
- hitTest: withRotation(baseHitTest),
93
- resize,
94
- minSize: { width: 16, height: 16 },
95
- createDefault: (params) => makeMapIcon("town", "landmark", params.x, params.y),
96
- serializeForAi: (data) => {
97
- const d = data;
98
- const icon = ICONS_BY_KEY.get(d.meta?.iconKey ?? "");
99
- return { kind: "map-icon", icon: d.meta?.iconKey, text: icon?.en };
100
- },
101
- debugFields: (data) => {
102
- const d = data;
103
- return { iconKey: d.meta?.iconKey, category: d.meta?.category };
104
- },
105
- };
106
- //# sourceMappingURL=map-icon-shape.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"map-icon-shape.js","sourceRoot":"","sources":["../src/map-icon-shape.tsx"],"names":[],"mappings":"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"}