alma 0.1.1

A Bevy-native modal text editor with Vim-style navigation.
Documentation
//! Bevy-facing ECS contracts and system pipeline definitions.
#![allow(dead_code)]

pub mod buffer;
pub mod components;
pub mod events;
pub mod focus;
pub mod layout;
mod plugin;
mod plugin_proposal;
pub mod schedules;

use bevy::prelude::{App, Plugin};
use events::{
    command::{CommandFailed, CommandRequested},
    cursor::{CursorMoveRejected, CursorMoveRequested, CursorMoved},
    edit::{
        BufferEditRejected, BufferEditRequested, BufferEdited, EditHistoryApplied,
        EditHistoryRejected, EditHistoryRequested, PluginBufferEditProposalApplyRequested,
        PluginBufferEditProposalDecisionRejected, PluginBufferEditProposalReceipt,
        PluginBufferEditProposalRejectRequested, RevisionGuardedBufferEditRequested,
    },
    focus::{FocusRejected, FocusRequested},
    input::{EditorInputEvent, VimInputRejected},
    intent::{ViewportIntent, ViewportIntentRejected},
    lifecycle::LifecycleRequested,
    plugin::PluginOperationalEventReported,
    status::{StatusMessageRejected, StatusMessageRequested},
};
use plugin::PluginRuntimeEcsPlugin;
use schedules::configure_editor_sets;

pub use buffer::{BufferPlugin, InitialEditorBuffer};
pub use focus::FocusPlugin;
pub use layout::{LayoutPlugin, TextShapePlugin};
pub use plugin_proposal::{
    PendingPluginBufferEditProposal, PluginBufferEditDiffPreview, PluginProposalLane,
    PluginProposalReceiptLog,
};

#[cfg(all(test, feature = "plugin-runtime"))]
pub use plugin::{
    PluginIntentQueue, PluginOwnerQueues, PluginScheduledUpdateOwnerPublicationReport,
};

/// Core editor ECS plugin that owns shared contracts and schedule wiring.
#[derive(Clone, Copy, Debug, Default)]
pub struct EditorCorePlugin;

impl Plugin for EditorCorePlugin {
    fn build(&self, app: &mut App) {
        configure_editor_sets(app);
        let _app = app
            .add_plugins(PluginRuntimeEcsPlugin)
            .add_message::<EditorInputEvent>()
            .add_message::<VimInputRejected>()
            .add_message::<ViewportIntent>()
            .add_message::<CommandRequested>()
            .add_message::<CommandFailed>()
            .add_message::<BufferEditRequested>()
            .add_message::<RevisionGuardedBufferEditRequested>()
            .add_message::<PluginBufferEditProposalApplyRequested>()
            .add_message::<PluginBufferEditProposalRejectRequested>()
            .add_message::<PluginBufferEditProposalDecisionRejected>()
            .add_message::<PluginBufferEditProposalReceipt>()
            .add_message::<BufferEdited>()
            .add_message::<BufferEditRejected>()
            .add_message::<EditHistoryRequested>()
            .add_message::<EditHistoryApplied>()
            .add_message::<EditHistoryRejected>()
            .add_message::<CursorMoveRequested>()
            .add_message::<CursorMoved>()
            .add_message::<CursorMoveRejected>()
            .add_message::<FocusRequested>()
            .add_message::<FocusRejected>()
            .add_message::<ViewportIntentRejected>()
            .add_message::<StatusMessageRequested>()
            .add_message::<StatusMessageRejected>()
            .add_message::<PluginOperationalEventReported>()
            .add_message::<LifecycleRequested>();
    }
}