///|
const SonnerRichColorCss : String =
  #|[data-slot="sonner"] [data-slot="toast"][data-variant="success"] {
  #|  border-color:var(--rui-sonner-success-border,light-dark(oklch(0.72 0.17 142 / 0.45),oklch(0.55 0.13 142 / 0.55))) !important;
  #|  background:var(--rui-sonner-success-background,light-dark(oklch(0.97 0.04 142),oklch(0.24 0.05 142))) !important;
  #|  color:var(--rui-sonner-success-foreground,light-dark(oklch(0.38 0.12 142),oklch(0.79 0.17 142))) !important;
  #|}
  #|[data-slot="sonner"] [data-slot="toast"][data-variant="destructive"] {
  #|  border-color:var(--rui-sonner-error-border,color-mix(in oklch,var(--rui-destructive,oklch(0.577 0.245 27.325)) 35%,transparent)) !important;
  #|  background:var(--rui-sonner-error-background,color-mix(in oklch,var(--rui-destructive,oklch(0.577 0.245 27.325)) 12%,var(--rui-background,oklch(1 0 0)))) !important;
  #|  color:var(--rui-sonner-error-foreground,var(--rui-destructive,oklch(0.577 0.245 27.325))) !important;
  #|}
  #|

///|
#warnings("-alert_xss_vulnerable")
fn sonner_rich_color_stylesheet() -> @html.Html {
  // Static selectors bridge Sonner's inline toast recipe to color-scheme-aware
  // rich-color tokens without requiring a consumer stylesheet.
  let attrs = @html.Attrs::build()
    .data_set("rui-style", "sonner-rich-colors")
    .inner_html(SonnerRichColorCss)
  @html.style_tag(attrs~, ([] : Array[@html.Html]))
}

///|
/// Stateful rich-color toast host matching shadcn's Sonner surface while using
/// Rabbita incremental state instead of a global JavaScript singleton.
pub fn sonner(
  max_toasts? : Int = 3,
  position? : String = "bottom-right",
  class? : String,
  attrs? : @html.Attrs,
  style? : Array[String] = [],
  children : (ToastScope) -> @html.Html,
) -> @rabbita.Val[@html.Html] {
  toaster_impl("sonner", true, max_toasts, position, class, attrs, style, scope => {
    @html.fragment([sonner_rich_color_stylesheet(), children(scope)])
  })
}