renderreport 0.2.2

Data-driven report generation with Typst as embedded render engine — no CLI dependency
Documentation
// ChecklistPanel Component
// Card with label–diagnosis rows and optional status indicators

#let checklist-panel(data) = {
  theme-card[
    #if data.title != none [
      #text(weight: "bold", size: font-size-sm, fill: color-text)[#data.title]
      #v(spacing-3)
    ]

    #for (i, row) in data.rows.enumerate() [
      #grid(
        columns: (1fr, 2fr),
        column-gutter: spacing-4,
        align: (top, top),

        // Label + optional status dot
        stack(
          dir: ltr,
          spacing: 4pt,
          if row.status != none {
            let dot-color = if row.status == "good" { color-ok }
              else if row.status == "warn" { color-warn }
              else if row.status == "bad"  { color-bad }
              else { color-text-muted }
            box(
              width: 7pt,
              height: 7pt,
              radius: 999pt,
              fill: dot-color,
            )
          },
          text(size: font-size-sm, weight: "bold", fill: color-text)[#row.label],
        ),

        text(size: font-size-sm, fill: color-text)[#row.diagnosis],
      )

      #if i < data.rows.len() - 1 [
        #v(spacing-2)
        #line(length: 100%, stroke: 0.5pt + color-border)
        #v(spacing-2)
      ]
    ]
  ]
}