alma 0.1.0

A Bevy-native modal text editor with Vim-style navigation.
Documentation
//! Layout ECS components.

use crate::{
    domain::{render_text::RenderedVimTextSpan, viewport::TextViewport},
    ecs::events::intent::ViewportIntent,
};
use bevy::prelude::Component;
use std::ops::Range;

/// Viewport state attached to an editor buffer entity.
#[derive(Clone, Component, Debug, Default, Eq, PartialEq)]
pub struct ViewportState {
    /// Pure viewport range tracker.
    pub viewport: TextViewport,
    /// Pending cursor-relative placement request.
    pub pending_intent: Option<ViewportIntent>,
}

/// Visible byte range derived from buffer and viewport state.
#[derive(Clone, Component, Debug, Default, Eq, PartialEq)]
pub struct VisibleTextRange {
    /// Half-open byte range visible in the text viewport.
    pub range: Range<usize>,
}

/// Render-facing styled spans derived from visible text and editor state.
#[derive(Clone, Component, Debug, Default, Eq, PartialEq)]
pub struct TextSpanLayout {
    /// Styled text spans ready for Bevy UI synchronization.
    pub spans: Vec<RenderedVimTextSpan>,
}