package app

import (
	
)

// Raw creates a UI element from the given raw HTML string. The raw HTML must
// have a single root element. If the root tag cannot be determined, it defaults
// to a div element.
//
// Using Raw can be risky since there's no validation of the provided
// string content. Ensure that the content is safe and sanitized before use.
func ( string) UI {
	 = strings.TrimSpace()

	 := rawRootTagName()
	if  == "" {
		 = "<div></div>"
	}

	return &raw{
		value: ,
		tag:   ,
	}
}

type raw struct {
	jsElement     Value
	parentElement UI
	treeDepth     uint
	tag           string
	value         string
}

func ( *raw) () Value {
	return .jsElement
}

func ( *raw) () bool {
	return .jsElement != nil
}

func ( *raw) () uint {
	return .treeDepth
}

func ( *raw) () UI {
	return .parentElement
}

func ( *raw) ( UI) UI {
	.parentElement = 
	return 
}

func rawRootTagName( string) string {
	 = strings.TrimSpace()

	if strings.HasPrefix(, "</") || !strings.HasPrefix(, "<") {
		return ""
	}

	 := -1
	for  := 1;  < len(); ++ {
		if [] == ' ' ||
			[] == '\t' ||
			[] == '\n' ||
			[] == '>' {
			 = 
			break
		}
	}

	if  <= 0 {
		return ""
	}

	return [1:]
}