package main
import (
"fmt"
"html"
"strings"
)
// FragmentUserMessage returns an HTML fragment for a user message.
func FragmentUserMessage(text string) string {
escaped := html.EscapeString(text)
return fmt.Sprintf(`
`, escaped)
}
// FragmentAssistantStart returns the opening tag for an assistant message with streaming.
func FragmentAssistantStart(msgID string) string {
return fmt.Sprintf(``, msgID)
}
// FragmentAssistantChunk appends text to an existing assistant message.
func FragmentAssistantChunk(msgID, textChunk string) string {
escaped := html.EscapeString(textChunk)
return fmt.Sprintf(`%s
`, msgID, escaped)
}
// FragmentAssistantComplete replaces the content of an assistant message with final rendered content.
func FragmentAssistantComplete(msgID, htmlContent string) string {
return fmt.Sprintf(`%s
`, msgID, htmlContent)
}
// FragmentToolCall returns an HTML fragment for a tool use notification.
func FragmentToolCall(toolName string, toolInput string) string {
escapedName := html.EscapeString(toolName)
escapedInput := html.EscapeString(toolInput)
if len(escapedInput) > 200 {
escapedInput = escapedInput[:200] + "..."
}
return fmt.Sprintf(``, escapedName, escapedInput)
}
// FragmentSystemMessage returns an HTML fragment for a system message.
func FragmentSystemMessage(text string) string {
escaped := html.EscapeString(text)
return fmt.Sprintf(``, escaped)
}
// FragmentTypingIndicator shows or hides the typing indicator.
func FragmentTypingIndicator(show bool) string {
if show {
return `Claude razmišlja...
`
}
return ``
}
// FragmentStatus updates the connection status indicator.
func FragmentStatus(connected bool) string {
if connected {
return `Povezan`
}
return `Nepovezan`
}
// FragmentClearInput clears the message input field.
func FragmentClearInput() string {
return ``
}
// FragmentCombine joins multiple fragments into a single response.
func FragmentCombine(fragments ...string) string {
return strings.Join(fragments, "\n")
}