// templui component toast - version: v0.94.0 installed by templui v0.94.0 package toast import ( "git.hafen.run/lukas/timeshare/components/button" "git.hafen.run/lukas/timeshare/components/icon" "git.hafen.run/lukas/timeshare/utils" "strconv" ) type Variant string type Position string const ( VariantDefault Variant = "default" VariantSuccess Variant = "success" VariantError Variant = "error" VariantWarning Variant = "warning" VariantInfo Variant = "info" ) const ( PositionTopRight Position = "top-right" PositionTopLeft Position = "top-left" PositionTopCenter Position = "top-center" PositionBottomRight Position = "bottom-right" PositionBottomLeft Position = "bottom-left" PositionBottomCenter Position = "bottom-center" ) type Props struct { ID string Class string Attributes templ.Attributes Title string Description string Variant Variant Position Position Duration int Dismissible bool ShowIndicator bool Icon bool } templ Toast(props ...Props) { {{ var p Props }} if len(props) > 0 { {{ p = props[0] }} } if p.ID == "" { {{ p.ID = utils.RandomID() }} } // Set defaults if p.Variant == "" { {{ p.Variant = VariantDefault }} } if p.Position == "" { {{ p.Position = PositionBottomRight }} } if p.Duration == 0 { {{ p.Duration = 3000 }} }
// Progress indicator if p.ShowIndicator && p.Duration > 0 {
} // Icon if p.Icon { switch p.Variant { case VariantSuccess: @icon.CircleCheck(icon.Props{Size: 22, Class: "text-green-500 mr-3 flex-shrink-0"}) case VariantError: @icon.CircleX(icon.Props{Size: 22, Class: "text-red-500 mr-3 flex-shrink-0"}) case VariantWarning: @icon.TriangleAlert(icon.Props{Size: 22, Class: "text-yellow-500 mr-3 flex-shrink-0"}) case VariantInfo: @icon.Info(icon.Props{Size: 22, Class: "text-blue-500 mr-3 flex-shrink-0"}) } } // Content if p.Title != "" {

{ p.Title }

} if p.Description != "" {

@templ.Raw(p.Description)

}
// Dismiss button if p.Dismissible { @button.Button(button.Props{ Size: button.SizeIcon, Variant: button.VariantGhost, Attributes: templ.Attributes{ "aria-label": "Close", "data-tui-toast-dismiss": "", "type": "button", }, }) { @icon.X(icon.Props{ Size: 18, Class: "opacity-75 hover:opacity-100", }) } }
} templ Script() { }