Panels/UITests/Elements/TextEntry.cs
using Sandbox.UI.Construct;
using System;
using System.Linq;

namespace Sandbox.UI.Tests.Elements;

[StyleSheet]
public class TextEntryTest : Panel
{
	public TextEntryTest()
	{
		Style.FlexWrap = Wrap.Wrap;
		Style.JustifyContent = Justify.Center;
		Style.AlignItems = Align.Center;
		Style.AlignContent = Align.Center;

		AddTest( "", "Aligned Left" );
		AddTest( " text-align: right;", "Aligned Right" );
		AddTest( " text-align: center;", "Aligned Center" );


		{
			var te = AddTest( "", "With Prefix" );
			te.Prefix = "https://";
		}

		{
			var te = AddTest( "", "With Suffix" );
			te.Suffix = "@gmail.com";
		}

		{
			var te = AddTest( "", "Maxlength 4" );
			te.MaxLength = 4;
		}

		{
			var te = AddTest( "", "Minlength 4" );
			te.MinLength = 4;
		}

		{
			var te = AddTest( "", "Only Vowels" );
			te.CharacterRegex = "[aeiouyw]";
		}

		{
			var te = AddTest( "", "Email Address" );
			te.StringRegex = @"^[^@\s]+@[^@\s]+\.[^@\s]+$";
		}

		{
			var te = AddTest( "", "" );
			te.Placeholder = "History";

			te.AddEventListener( "onsubmit", () =>
			{
				if ( string.IsNullOrEmpty( te.Text ) )
					return;

				te.AddToHistory( te.Text );
				te.Text = "";
				te.Focus();
			} );
		}

		{
			var te = AddTest( "", "" );
			te.Placeholder = "History With Cookie";
			te.HistoryCookie = "ui-test-textentry-history";

			te.AddEventListener( "onsubmit", () =>
			{
				if ( string.IsNullOrEmpty( te.Text ) )
					return;

				te.AddToHistory( te.Text );
				te.Text = "";
				te.Focus();
			} );
		}

		var input = AddTest( "", "" );
		input.Placeholder = "Auto Complete";
		input.AutoComplete = DoAutoComplete;

		{
			var te = AddTest( "", "Multiline" );
			te.Multiline = true;
			te.Style.Height = Length.Pixels( 128 );
		}

		{
			var te = AddTest( "", "" );
			te.Placeholder = "Emoji Replacement ( :rainbow_flag: )";
			te.AllowEmojiReplace = true;
		}
	}

	string[] DoAutoComplete( string partial )
	{
		return new[]
		{
			"dave",
			"sharon",
			"andrew",
			"phillip",
			"peter",
			"lewis",
			"anthony",
			"jamie"
		}
		.Where( x => x.StartsWith( partial ) )
		.ToArray();
	}

	private TextEntry AddTest( string style, string text )
	{
		var p = AddChild<TextEntry>( "" );
		p.Placeholder = text;
		p.Style.Set( style );

		return p;
	}
}