Sailwind.Colors.cs
using System.Collections.Generic;
using System.Text;

namespace Sailwind;

partial class SailwindPanelComponent
{
	private readonly Dictionary<string, string> colors = new()
	{
		["slate-50"] = "#f8fafc",
		["slate-100"] = "#f1f5f9",
		["slate-200"] = "#e2e8f0",
		["slate-300"] = "#cbd5e1",
		["slate-400"] = "#94a3b8",
		["slate-500"] = "#64748b",
		["slate-600"] = "#475569",
		["slate-700"] = "#334155",
		["slate-800"] = "#1e293b",
		["slate-900"] = "#0f172a",
		["slate-950"] = "#020617",

		["gray-50"] = "#f9fafb",
		["gray-100"] = "#f3f4f6",
		["gray-200"] = "#e5e7eb",
		["gray-300"] = "#d1d5db",
		["gray-400"] = "#9ca3af",
		["gray-500"] = "#6b7280",
		["gray-600"] = "#4b5563",
		["gray-700"] = "#374151",
		["gray-800"] = "#1f2937",
		["gray-900"] = "#111827",
		["gray-950"] = "#030712",

		["zinc-50"] = "#fafafa",
		["zinc-100"] = "#f4f4f5",
		["zinc-200"] = "#e4e4e7",
		["zinc-300"] = "#d4d4d8",
		["zinc-400"] = "#a1a1aa",
		["zinc-500"] = "#71717a",
		["zinc-600"] = "#52525b",
		["zinc-700"] = "#3f3f46",
		["zinc-800"] = "#27272a",
		["zinc-900"] = "#18181b",
		["zinc-950"] = "#09090b",

		["neutral-50"] = "#fafafa",
		["neutral-100"] = "#f5f5f5",
		["neutral-200"] = "#e5e5e5",
		["neutral-300"] = "#d4d4d4",
		["neutral-400"] = "#a3a3a3",
		["neutral-500"] = "#737373",
		["neutral-600"] = "#525252",
		["neutral-700"] = "#404040",
		["neutral-800"] = "#262626",
		["neutral-900"] = "#171717",
		["neutral-950"] = "#0a0a0a",

		["stone-50"] = "#fafaf9",
		["stone-100"] = "#f5f5f4",
		["stone-200"] = "#e7e5e4",
		["stone-300"] = "#d6d3d1",
		["stone-400"] = "#a8a29e",
		["stone-500"] = "#78716c",
		["stone-600"] = "#57534e",
		["stone-700"] = "#44403c",
		["stone-800"] = "#292524",
		["stone-900"] = "#1c1917",
		["stone-950"] = "#0c0a09",

		["red-50"] = "#fef2f2",
		["red-100"] = "#fee2e2",
		["red-200"] = "#fecaca",
		["red-300"] = "#fca5a5",
		["red-400"] = "#f87171",
		["red-500"] = "#ef4444",
		["red-600"] = "#dc2626",
		["red-700"] = "#b91c1c",
		["red-800"] = "#991b1b",
		["red-900"] = "#7f1d1d",
		["red-950"] = "#450a0a",

		["orange-50"] = "#fff7ed",
		["orange-100"] = "#ffedd5",
		["orange-200"] = "#fed7aa",
		["orange-300"] = "#fdba74",
		["orange-400"] = "#fb923c",
		["orange-500"] = "#f97316",
		["orange-600"] = "#ea580c",
		["orange-700"] = "#c2410c",
		["orange-800"] = "#9a3412",
		["orange-900"] = "#7c2d12",
		["orange-950"] = "#431407",

		["amber-50"] = "#fffbeb",
		["amber-100"] = "#fef3c7",
		["amber-200"] = "#fde68a",
		["amber-300"] = "#fcd34d",
		["amber-400"] = "#fbbf24",
		["amber-500"] = "#f59e0b",
		["amber-600"] = "#d97706",
		["amber-700"] = "#b45309",
		["amber-800"] = "#92400e",
		["amber-900"] = "#78350f",
		["amber-950"] = "#451a03",

		["yellow-50"] = "#fefce8",
		["yellow-100"] = "#fef9c3",
		["yellow-200"] = "#fef08a",
		["yellow-300"] = "#fde047",
		["yellow-400"] = "#facc15",
		["yellow-500"] = "#eab308",
		["yellow-600"] = "#ca8a04",
		["yellow-700"] = "#a16207",
		["yellow-800"] = "#854d0e",
		["yellow-900"] = "#713f12",
		["yellow-950"] = "#422006",

		["lime-50"] = "#f7fee7",
		["lime-100"] = "#ecfccb",
		["lime-200"] = "#d9f99d",
		["lime-300"] = "#bef264",
		["lime-400"] = "#a3e635",
		["lime-500"] = "#84cc16",
		["lime-600"] = "#65a30d",
		["lime-700"] = "#4d7c0f",
		["lime-800"] = "#3f6212",
		["lime-900"] = "#365314",
		["lime-950"] = "#1a2e05",

		["green-50"] = "#f0fdf4",
		["green-100"] = "#dcfce7",
		["green-200"] = "#bbf7d0",
		["green-300"] = "#86efac",
		["green-400"] = "#4ade80",
		["green-500"] = "#22c55e",
		["green-600"] = "#16a34a",
		["green-700"] = "#15803d",
		["green-800"] = "#166534",
		["green-900"] = "#14532d",
		["green-950"] = "#052e16",

		["emerald-50"] = "#ecfdf5",
		["emerald-100"] = "#d1fae5",
		["emerald-200"] = "#a7f3d0",
		["emerald-300"] = "#6ee7b7",
		["emerald-400"] = "#34d399",
		["emerald-500"] = "#10b981",
		["emerald-600"] = "#059669",
		["emerald-700"] = "#047857",
		["emerald-800"] = "#065f46",
		["emerald-900"] = "#064e3b",
		["emerald-950"] = "#022c22",

		["teal-50"] = "#f0fdfa",
		["teal-100"] = "#ccfbf1",
		["teal-200"] = "#99f6e4",
		["teal-300"] = "#5eead4",
		["teal-400"] = "#2dd4bf",
		["teal-500"] = "#14b8a6",
		["teal-600"] = "#0d9488",
		["teal-700"] = "#0f766e",
		["teal-800"] = "#115e59",
		["teal-900"] = "#134e4a",
		["teal-950"] = "#042f2e",

		["cyan-50"] = "#ecfeff",
		["cyan-100"] = "#cffafe",
		["cyan-200"] = "#a5f3fc",
		["cyan-300"] = "#67e8f9",
		["cyan-400"] = "#22d3ee",
		["cyan-500"] = "#06b6d4",
		["cyan-600"] = "#0891b2",
		["cyan-700"] = "#0e7490",
		["cyan-800"] = "#155e75",
		["cyan-900"] = "#164e63",
		["cyan-950"] = "#083344",

		["sky-50"] = "#f0f9ff",
		["sky-100"] = "#e0f2fe",
		["sky-200"] = "#bae6fd",
		["sky-300"] = "#7dd3fc",
		["sky-400"] = "#38bdf8",
		["sky-500"] = "#0ea5e9",
		["sky-600"] = "#0284c7",
		["sky-700"] = "#0369a1",
		["sky-800"] = "#075985",
		["sky-900"] = "#0c4a6e",
		["sky-950"] = "#082f49",

		["blue-50"] = "#eff6ff",
		["blue-100"] = "#dbeafe",
		["blue-200"] = "#bfdbfe",
		["blue-300"] = "#93c5fd",
		["blue-400"] = "#60a5fa",
		["blue-500"] = "#3b82f6",
		["blue-600"] = "#2563eb",
		["blue-700"] = "#1d4ed8",
		["blue-800"] = "#1e40af",
		["blue-900"] = "#1e3a8a",
		["blue-950"] = "#172554",

		["indigo-50"] = "#eef2ff",
		["indigo-100"] = "#e0e7ff",
		["indigo-200"] = "#c7d2fe",
		["indigo-300"] = "#a5b4fc",
		["indigo-400"] = "#818cf8",
		["indigo-500"] = "#6366f1",
		["indigo-600"] = "#4f46e5",
		["indigo-700"] = "#4338ca",
		["indigo-800"] = "#3730a3",
		["indigo-900"] = "#312e81",
		["indigo-950"] = "#1e1b4b",

		["violet-50"] = "#f5f3ff",
		["violet-100"] = "#ede9fe",
		["violet-200"] = "#ddd6fe",
		["violet-300"] = "#c4b5fd",
		["violet-400"] = "#a78bfa",
		["violet-500"] = "#8b5cf6",
		["violet-600"] = "#7c3aed",
		["violet-700"] = "#6d28d9",
		["violet-800"] = "#5b21b6",
		["violet-900"] = "#4c1d95",
		["violet-950"] = "#2e1065",

		["purple-50"] = "#faf5ff",
		["purple-100"] = "#f3e8ff",
		["purple-200"] = "#e9d5ff",
		["purple-300"] = "#d8b4fe",
		["purple-400"] = "#c084fc",
		["purple-500"] = "#a855f7",
		["purple-600"] = "#9333ea",
		["purple-700"] = "#7e22ce",
		["purple-800"] = "#6b21a8",
		["purple-900"] = "#581c87",
		["purple-950"] = "#3b0764",

		["fuchsia-50"] = "#fdf4ff",
		["fuchsia-100"] = "#fae8ff",
		["fuchsia-200"] = "#f5d0fe",
		["fuchsia-300"] = "#f0abfc",
		["fuchsia-400"] = "#e879f9",
		["fuchsia-500"] = "#d946ef",
		["fuchsia-600"] = "#c026d3",
		["fuchsia-700"] = "#a21caf",
		["fuchsia-800"] = "#86198f",
		["fuchsia-900"] = "#701a75",
		["fuchsia-950"] = "#4a044e",

		["pink-50"] = "#fdf2f8",
		["pink-100"] = "#fce7f3",
		["pink-200"] = "#fbcfe8",
		["pink-300"] = "#f9a8d4",
		["pink-400"] = "#f472b6",
		["pink-500"] = "#ec4899",
		["pink-600"] = "#db2777",
		["pink-700"] = "#be185d",
		["pink-800"] = "#9d174d",
		["pink-900"] = "#831843",
		["pink-950"] = "#500724",

		["rose-50"] = "#fff1f2",
		["rose-100"] = "#ffe4e6",
		["rose-200"] = "#fecdd3",
		["rose-300"] = "#fda4af",
		["rose-400"] = "#fb7185",
		["rose-500"] = "#f43f5e",
		["rose-600"] = "#e11d48",
		["rose-700"] = "#be123c",
		["rose-800"] = "#9f1239",
		["rose-900"] = "#881337",
		["rose-950"] = "#4c0519",

		["white"] = "#ffffff",
		["black"] = "#000000"
	};

	private void GenerateColorUtilities( StringBuilder sb )
	{
		foreach ( var (name, value) in colors )
		{
			// All color utilities get hover states
			GenerateUtility( sb, $"text-{name}", $"color: {value}", includePointer: true );
			GenerateUtility( sb, $"bg-{name}", $"background-color: {value}", includePointer: true );
			GenerateUtility( sb, $"border-{name}", $"border-color: {value}", includePointer: true );
		}

		// todo: separate custom classes into a separate non-static stylesheet that gets regenerated
		// whenever the layout tree is changed
		var customClasses = FindCustomClasses( "bg-[" );
		foreach ( var className in customClasses )
		{
			var start = className.IndexOf( '[' ) + 1;
			var end = className.IndexOf( ']' );

			var color = className[start..end];
			Log.Info( $"Found class {className} with color {color}" );
			GenerateUtility( sb, $"bg-[{color}]", $"background-color: {color}", includePointer: true );
		}
	}

	private readonly Dictionary<string, string> opacities = new()
	{
		["5"] = "0.05",
		["10"] = "0.10",
		["15"] = "0.15",
		["20"] = "0.20",
		["25"] = "0.25",
		["30"] = "0.30",
		["35"] = "0.35",
		["40"] = "0.40",
		["45"] = "0.45",
		["50"] = "0.50",
		["55"] = "0.55",
		["60"] = "0.60",
		["65"] = "0.65",
		["70"] = "0.70",
		["75"] = "0.75",
		["80"] = "0.80",
		["85"] = "0.85",
		["90"] = "0.90",
		["95"] = "0.95",
		["100"] = "1",
	};

	private void GenerateOpacityUtilities( StringBuilder sb )
	{
		foreach ( var (name, value) in opacities )
		{
			GenerateUtility( sb, $"opacity-{name}", $"opacity: {value}", includePointer: true );
		}
	}
}