calepin 0.0.21

A Rust CLI for preprocessing Typst documents with executable code chunks
#import "../core/target.typ": _is-html, _is-query

#let columns(
  html-tag: "div",
  html-class: "grid",
  columns: 2,
  wrap: true,
  html-attrs: ( : ),
  ..blocks,
) = {
  if type(columns) != int or columns < 1 {
    panic("calepin.elements.columns: columns must be a positive integer")
  }

  let classes = html-attrs.at("class", default: "")
  let attrs-class = if classes == "" {
    html-class
  } else {
    html-class + " " + classes
  }

  let items = blocks.pos()
  if _is-query() {
    return items
  }

  if _is-html() {
    let attrs = (
      ..html-attrs,
      class: attrs-class,
    )
    return std.html.elem(html-tag, attrs: attrs)[
      #for item in items {
        if wrap {
          std.html.elem("div")[#item]
        } else {
          item
        }
      }
    ]
  }

  grid(
    columns: columns,
    gutter: 1em,
    ..items,
  )
}