import { observable, action, runInAction } from 'mobx'; import { Doc } from '../../fields/Doc'; export namespace SnappingManager { class Manager { @observable ShiftKey = false; @observable CtrlKey = false; @observable IsDragging: boolean = false; @observable IsResizing: Doc | undefined = undefined; @observable CanEmbed: boolean = false; @observable public horizSnapLines: number[] = []; @observable public vertSnapLines: number[] = []; @action public clearSnapLines() { this.vertSnapLines = []; this.horizSnapLines = []; } @action public addSnapLines(horizLines: number[], vertLines: number[]) { this.horizSnapLines.push(...horizLines); this.vertSnapLines.push(...vertLines); } } const manager = new Manager(); export function clearSnapLines() { manager.clearSnapLines(); } export function addSnapLines(horizLines: number[], vertLines: number[]) { manager.addSnapLines(horizLines, vertLines); } export function horizSnapLines() { return manager.horizSnapLines; } export function vertSnapLines() { return manager.vertSnapLines; } export function SetShiftKey(down: boolean) { runInAction(() => (manager.ShiftKey = down)); } export function SetCtrlKey(down: boolean) { runInAction(() => (manager.CtrlKey = down)); } export function SetIsDragging(dragging: boolean) { runInAction(() => (manager.IsDragging = dragging)); } export function SetIsResizing(doc: Doc | undefined) { runInAction(() => (manager.IsResizing = doc)); } export function SetCanEmbed(canEmbed: boolean) { runInAction(() => (manager.CanEmbed = canEmbed)); } export function GetShiftKey() { return manager.ShiftKey; } export function GetCtrlKey() { return manager.CtrlKey; } export function GetIsDragging() { return manager.IsDragging; } export function GetIsResizing() { return manager.IsResizing; } export function GetCanEmbed() { return manager.CanEmbed; } }