///|
const GenerationMetaStyle : String = "display:flex;flex-direction:column;gap:12px;width:100%"

///|
const GenerationMetaTextStyle : String = "margin:0;font-size:14px;line-height:22px;color:var(--sumi-text-tertiary,rgba(255,255,255,0.6))"

///|
const GenerationMetaActionStyle : String = "display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;margin:0;padding:0;border:none;border-radius:4px;background:transparent;color:var(--sumi-text-tertiary,rgba(255,255,255,0.6));cursor:pointer;appearance:none;-webkit-appearance:none;outline:none"

///|
/// The info-and-actions block under a generation result: a 14/22 tertiary
/// disclaimer line (e.g. the content notice and the credits spent) with a
/// bare copy action below it. Render the action by passing `on_copy`.
///
/// ```moonbit nocheck
/// generation_meta(
///   text="AI-generated content | 0 credits used",
///   on_copy=emit(CopyResult),
/// )
/// ```
pub fn generation_meta(
  text~ : String,
  on_copy? : @cmd.Cmd,
  copy_label? : String = "Copy",
  aria_label? : String,
  id? : String,
  class? : String,
  attrs? : @html.Attrs,
  style? : Array[String] = [],
) -> @html.Html {
  let element_attrs = @internal.sumi_attrs(attrs).data_set(
    "slot", "generation-meta",
  )
  if aria_label is Some(label_text) {
    ignore(element_attrs.aria_label(label_text))
  }
  let children : Array[@html.Html] = [
    @html.p(style=[GenerationMetaTextStyle], [@html.text(text)]),
  ]
  if on_copy is Some(cmd) {
    children.push(
      @html.div(style=["display:flex;align-items:center"], [
        @html.button(
          style=[
            @internal.SumiBoxSizing,
            @internal.SumiTextRendering,
            @internal.SumiTransition,
            GenerationMetaActionStyle,
          ],
          type_="button",
          title=copy_label,
          on_click=cmd,
          attrs=@html.Attrs::build()
            .data_set("slot", "generation-meta-action")
            .aria_label(copy_label),
          [@primitives.icon_copy(size=16)],
        ),
      ]),
    )
  }
  @html.div(
    style=@internal.sumi_styles(
      [
        @internal.SumiBoxSizing,
        @internal.SumiFontSans,
        @internal.SumiTextRendering,
        GenerationMetaStyle,
      ],
      style,
    ),
    id?,
    class?,
    attrs=element_attrs,
    children,
  )
}