use bevy::prelude::*;
use crate::types::EntityId;
use super::canvas::CanvasTransform;
use bevy_egui::egui;
#[derive(Debug, Default, Resource)]
pub struct Workspace {
pub global_selection: Option<(EntityId, EntityId)>,
pub board_drag_doc: Option<EntityId>,
pub board_transform: CanvasTransform,
pub rename_inline: Option<RenameInline>,
pub pending_rename_commit: Option<RenameInline>,
pub delay_inline: Option<DelayInline>,
pub pending_delay_commit: Option<DelayInline>,
pub edge_build: Option<EdgeBuildState>,
pub edge_menu: Option<EdgeMenuState>,
pub available_event_edges: Vec<String>,
pub preview_edges: Vec<PreviewEdge>,
pub pending_edge_create: Option<PendingEdgeCreate>,
pub pending_fetch_docs: Vec<EntityId>,
}
#[derive(Debug, Clone)]
pub struct RenameInline { pub doc: EntityId, pub target: EntityId, pub text: String }
#[derive(Debug, Clone)]
pub struct EdgeBuildState { pub doc: EntityId, pub source: EntityId, pub just_started: bool }
#[derive(Debug, Clone)]
pub struct EdgeMenuState { pub doc: EntityId, pub source: EntityId, pub target: EntityId, pub pos: egui::Pos2, pub just_opened: bool, pub filter: String }
#[derive(Debug, Clone)]
pub struct PreviewEdge { pub doc: EntityId, pub source: EntityId, pub target: EntityId }
#[derive(Debug, Clone)]
pub struct PendingEdgeCreate { pub doc: EntityId, pub source: EntityId, pub target: EntityId, pub kind: String }
#[derive(Debug, Clone)]
pub struct DelayInline { pub doc: EntityId, pub target: EntityId, pub text: String }