fret-ui 0.1.0

Mechanism-layer UI engine for Fret with tree, layout, focus, routing, and interaction contracts.
Documentation
use std::collections::{HashMap, VecDeque};
use std::sync::Arc;

use fret_core::NodeId;

use crate::element::AnyElement;
use crate::elements::ElementContext;
use crate::virtual_list::VirtualRange;
use crate::{ItemKey, UiHost};

pub(crate) type RetainedVirtualListKeyAtFn = Arc<dyn Fn(usize) -> ItemKey>;

pub(crate) type RetainedVirtualListRowFn<H> =
    Arc<dyn for<'a> Fn(&mut ElementContext<'a, H>, usize) -> AnyElement>;

pub(crate) type RetainedVirtualListRangeExtractor = fn(VirtualRange) -> Vec<usize>;

#[derive(Default)]
pub(crate) struct RetainedVirtualListHostMarker;

pub(crate) struct RetainedVirtualListHostCallbacks<H: UiHost> {
    pub key_at: RetainedVirtualListKeyAtFn,
    pub row: RetainedVirtualListRowFn<H>,
    pub range_extractor: RetainedVirtualListRangeExtractor,
}

#[derive(Default)]
pub(crate) struct RetainedVirtualListKeepAliveState {
    pub by_key: HashMap<ItemKey, NodeId>,
    pub order: VecDeque<ItemKey>,
}