renderreport 0.2.0

Data-driven report generation with Typst as embedded render engine — no CLI dependency
Documentation
// Audit Table Component
// Displays tabular data for audit results

#let audit-table(data) = {
  let col-count = data.columns.len()
  
  // Build column widths
  let col-widths = data.columns.map(col => {
    if col.width != none { 
      eval(col.width) 
    } else { 
      1fr 
    }
  })
  
  block(width: 100%)[
    #if data.title != none [
      #text(weight: "semibold", size: font-size-lg)[#data.title]
      #v(spacing-3)
    ]
    
    #set text(size: font-size-sm)
    
    #table(
      columns: col-widths,
      inset: spacing-3,
      stroke: (paint: table-border, thickness: table-border-width),
      fill: (x, y) => {
        if y == 0 { table-header-bg }
        else if data.striped and calc.odd(y) { table-row-alt-bg }
        else { none }
      },
      
      // Header row
      ..data.columns.map(col => {
        text(weight: "semibold", fill: color-text)[#col.header]
      }),
      
      // Data rows
      ..data.rows.flatten()
    )
  ]
}