All files / src/packlets/editor-core/slices tool-slice.ts

100% Statements 6/6
100% Branches 0/0
100% Functions 2/2
100% Lines 6/6

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20          1x   51x 51x     10x 10x       51x      
import { atom } from "nanostores";
import { createNanoEvents } from "nanoevents";
import { Slice } from "../slice";
 
export class ToolSlice extends Slice {
  static readonly sliceKey = "tool";
 
  $activeTool = atom<"select" | "pencil" | "erase" | "pan">("select");
  private events = createNanoEvents<{ toolChanged: () => void }>();
 
  setTool(tool: "select" | "pencil" | "erase" | "pan"): void {
    this.$activeTool.set(tool);
    this.events.emit("toolChanged");
  }
 
  onToolChanged(cb: () => void): () => void {
    return this.events.on("toolChanged", cb);
  }
}