// Admitted candidate `model_0` (claude-code:default, 104/104); provenance: relpos.provenance.json use crate::relpos::{RelposInputs, RelposOutputs}; use dom::computed::LengthPercentageOrAuto; fn length_of(value: LengthPercentageOrAuto) -> Option { match value { LengthPercentageOrAuto::Length(v) => Some(v), LengthPercentageOrAuto::Auto => None, LengthPercentageOrAuto::Percentage(_) => None, LengthPercentageOrAuto::Unresolved => None, } } pub fn resolve(inputs: &RelposInputs) -> RelposOutputs { let left = length_of(inputs.left); let right = length_of(inputs.right); let top = length_of(inputs.top); let bottom = length_of(inputs.bottom); let rtl = matches!(inputs.direction, crate::width::Direction::Rtl); let shift_x = match (left, right) { (None, None) => 0.0, (Some(l), None) => l, (None, Some(r)) => -r, (Some(l), Some(r)) => { if rtl { -r } else { l } } }; let shift_y = match (top, bottom) { (None, None) => 0.0, (Some(t), _) => t, (None, Some(b)) => -b, }; RelposOutputs { shift_x, shift_y } }