mod auto_update;
mod middleware;
mod platform;
mod types;
mod utils;
pub use crate::auto_update::*;
pub use crate::middleware::*;
pub use crate::types::*;
pub use floating_ui_core::{
ComputePositionReturn, Derivable, DerivableFn, DetectOverflowOptions, Middleware,
MiddlewareData, MiddlewareReturn, MiddlewareState, MiddlewareWithOptions,
};
#[doc(no_inline)]
pub use floating_ui_utils::{
dom, AlignedPlacement, Alignment, Axis, ClientRectObject, Coords, Dimensions, ElementRects,
Length, Padding, PartialSideObject, Placement, Rect, Side, SideObject, Strategy,
VirtualElement,
};
use floating_ui_core::{
compute_position as compute_position_core, ComputePositionConfig as CoreComputePositionConfig,
};
use web_sys::Element;
use self::platform::Platform;
const PLATFORM: Platform = Platform {};
#[derive(Clone, Default)]
pub struct ComputePositionConfig {
pub placement: Option<Placement>,
pub strategy: Option<Strategy>,
pub middleware: Option<MiddlewareVec>,
}
impl ComputePositionConfig {
pub fn placement(mut self, value: Placement) -> Self {
self.placement = Some(value);
self
}
pub fn strategy(mut self, value: Strategy) -> Self {
self.strategy = Some(value);
self
}
pub fn middleware(mut self, value: MiddlewareVec) -> Self {
self.middleware = Some(value);
self
}
}
pub fn compute_position(
reference: ElementOrVirtual,
floating: &Element,
config: Option<ComputePositionConfig>,
) -> ComputePositionReturn {
let config = config.unwrap_or_default();
compute_position_core(
reference,
floating,
CoreComputePositionConfig {
platform: &PLATFORM,
placement: config.placement,
strategy: config.strategy,
middleware: config.middleware,
},
)
}