// Shared signal that asks the sidebar calculator to open and load a ship
// class. The ship-classes table (row activation, "new" button) and the
// mobile bottom-tabs entry publish a request here; the in-game layout
// watches it to flip the sidebar to the calculator tab, and the
// calculator watches it to load the requested class. A module singleton
// keeps these siblings decoupled, mirroring `reach.svelte`.
//
// `token` increments on every request so a repeat request for the same
// class still re-triggers the watchers; each watcher records the last
// token it handled to act exactly once per request.

class CalculatorLoadRequest {
	/** The class name to load, or null to start a fresh design. */
	name: string | null = $state(null);
	token = $state(0);

	request(name: string | null): void {
		this.name = name;
		this.token += 1;
	}
}

export const calculatorLoadRequest = new CalculatorLoadRequest();
