+
🗺 {areaName}
@@ -136,8 +161,9 @@
{#if !hasZone}
Pas de layout répertorié pour cette zone.
{:else}
-
-
+
+
{#if path !== ""}

{:else}
@@ -166,12 +192,22 @@
+ >{seg}
{/each}
{/if}
+
+ {#if activeLegend}
+
Légende :
+
+

+
+ {/if}
+
{#if candidates.length}
{resolved ? "" : path === "" ? "Layouts possibles :" : "Affine :"}
@@ -179,8 +215,7 @@
{#each candidates as c}
{/each}
@@ -197,16 +232,27 @@
Layout identifié.
{/if}
{/if}
+
+
+
diff --git a/src/lib/Settings.svelte b/src/lib/Settings.svelte
index e144c5f..966bbd3 100644
--- a/src/lib/Settings.svelte
+++ b/src/lib/Settings.svelte
@@ -10,6 +10,7 @@
setOverlayLocked,
toggleOverlay,
toggleLayout,
+ setLayoutSize,
saveOverlayGeometry,
getTimer,
timerStart,
@@ -194,8 +195,23 @@
-
diff --git a/src/lib/api.ts b/src/lib/api.ts
index 7daddda..99fb216 100644
--- a/src/lib/api.ts
+++ b/src/lib/api.ts
@@ -17,7 +17,8 @@ export interface Config {
feature_layouts: boolean;
layout_x: number;
layout_y: number;
- layout_size: number;
+ layout_w: number;
+ layout_h: number;
timer_enabled: boolean;
timer_pause_in_town: boolean;
timer_afk_enabled: boolean;
@@ -107,6 +108,8 @@ export const restoreOverlayPosition = () => invoke("restore_overlay_position");
export const toggleLayout = () => invoke("toggle_layout");
export const setLayoutSize = (width: number, height: number) =>
invoke("set_layout_size", { width, height });
+export const startLayoutResize = () => invoke("start_layout_resize");
+export const endLayoutResize = () => invoke("end_layout_resize");
export const saveLayoutGeometry = () => invoke("save_layout_geometry");
export const startLayoutDrag = () => invoke("start_layout_drag");
export const endLayoutDrag = () => invoke("end_layout_drag");
diff --git a/src/lib/layouts.ts b/src/lib/layouts.ts
index 687574c..9f45947 100644
--- a/src/lib/layouts.ts
+++ b/src/lib/layouts.ts
@@ -4,7 +4,8 @@
// where the path is a decision tree encoded as underscore-separated segments:
// "1", "2", "3" = the candidate layouts you first see entering a zone
// "3_1", "3_2" = refinements of "3" revealed as you explore deeper
-// "x", "x_x" = "none of these / not catalogued" dead-ends
+// "x", "x_x" = the zone's legend pages (key to the map symbols), NOT
+// decision candidates — they're shown persistently.
// You pick the candidate matching what you see in-game, then keep refining until
// no children remain. (On disk the space is stored as "~" for URL-safe serving.)
@@ -56,8 +57,12 @@ export function childrenOf(paths: string[], path: string): string[] {
.sort(sortPaths);
}
-/** A path is an "x" (none-of-these / not catalogued) marker. */
-export function isDeadEnd(path: string): boolean {
+/**
+ * A path is a legend page rather than a layout candidate. These are named with
+ * a leading "x" segment ("x", "x_x", …) and hold the key to the map symbols, so
+ * the viewer pulls them out of the decision tree and keeps them always visible.
+ */
+export function isLegend(path: string): boolean {
return path.split("_")[0] === "x";
}