Skip to main content

dioxus_mdx/components/
update.rs

1//! Update (changelog) entry component.
2
3use dioxus::prelude::*;
4
5use crate::components::DocNodeRenderer;
6use crate::parser::UpdateNode;
7
8/// Props for DocUpdate component.
9#[derive(Props, Clone, PartialEq)]
10pub struct DocUpdateProps {
11    /// The update entry to render.
12    pub update: UpdateNode,
13}
14
15/// Changelog version update entry.
16#[component]
17pub fn DocUpdate(props: DocUpdateProps) -> Element {
18    let update = &props.update;
19
20    rsx! {
21        div { class: "grid grid-cols-[120px_1fr] gap-x-8 py-8 border-b border-base-content/10 last:border-b-0 max-sm:grid-cols-1 max-sm:gap-y-3",
22            // Left column: version badge + date
23            div { class: "flex flex-col items-start gap-1.5",
24                span { class: "badge badge-primary font-mono",
25                    "{update.label}"
26                }
27                if !update.description.is_empty() {
28                    span { class: "text-xs text-base-content/50",
29                        "{update.description}"
30                    }
31                }
32            }
33            // Right column: changelog content
34            div {
35                class: "prose prose-sm max-w-none",
36                for (i, node) in update.content.iter().enumerate() {
37                    DocNodeRenderer { key: "{i}", node: node.clone() }
38                }
39            }
40        }
41    }
42}