diff --git a/.claude/settings.local.json b/.claude/settings.local.json
index b55a07ed..5aa75a2c 100644
--- a/.claude/settings.local.json
+++ b/.claude/settings.local.json
@@ -6,7 +6,38 @@
"Bash(mkdir:*)",
"Bash(cat:*)",
"Bash(move:*)",
- "Bash(find:*)"
+ "Bash(find:*)",
+ "Bash(claude mcp add:*)",
+ "Bash(claude mcp list:*)",
+ "Bash(del \"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Scripts\\\\UVC\\\\UIToolkit\\\\Input\\\\NumberStepper.cs\")",
+ "Bash(del \"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Scripts\\\\UVC\\\\UIToolkit\\\\Modal\\\\UTKColorPickerHSV.cs\")",
+ "mcp__UnityMCP__read_console",
+ "Bash(git mv:*)",
+ "Bash(del \"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Tab\\\\UTKTab.uss\")",
+ "Bash(cmd //c \"del /f \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Tab\\\\UTKTab.uss\"\"\")",
+ "mcp__UnityMCP__execute_menu_item",
+ "mcp__UnityMCP__manage_editor",
+ "Bash(timeout:*)",
+ "mcp__UnityMCP__manage_asset",
+ "mcp__UnityMCP__manage_scene",
+ "Bash(git checkout:*)",
+ "Bash(git -C \"d:/works/2025/02.Studio/dev/base/XRBase\" checkout HEAD -- \"Assets/Resources/UIToolkit/List/UTKMultiColumnTreeView.uss\" \"Assets/Resources/UIToolkit/List/UTKMultiColumnListView.uss\" \"Assets/Resources/UIToolkit/Style/UTKDefaultStyle.uss\" \"Assets/Resources/UIToolkit/Tab/UTKTabView.uss\" \"Assets/Resources/UIToolkit/List/UTKListView.uss\" \"Assets/Resources/UIToolkit/Style/UTKComponents.uss\")",
+ "Bash(cmd /c \"cd /d d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase && git log --oneline -10 -- Assets/Resources/UIToolkit/Style/UTKDefaultStyle.uss\")",
+ "Bash(New-Item -ItemType Directory -Path \"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Sample\\\\Window\" -Force)",
+ "Bash(cmd /c \"echo ^^^^^^\")",
+ "Bash(del \"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Property\\\\Views\\\\UTKBoolPropertyItemView.uxml\")",
+ "Bash(del:*)",
+ "Bash(cmd /c \"del /q \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Property\\\\Views\\\\UTKIntPropertyItemViewSliderUss.uss\"\" \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\Property\\\\Views\\\\UTKFloatPropertyItemViewSliderUss.uss\"\"\")",
+ "mcp__UnityMCP__refresh_unity",
+ "Bash(powershell \"Get-Process Unity -ErrorAction SilentlyContinue | Select-Object -First 1 | Format-List\")",
+ "Bash(cmd /c \"mkdir \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Scripts\\\\UVC\\\\UIToolkit\\\\ToolBar\\\\Data\"\" && mkdir \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Scripts\\\\UVC\\\\UIToolkit\\\\ToolBar\\\\Items\"\" && mkdir \"\"d:\\\\works\\\\2025\\\\02.Studio\\\\dev\\\\base\\\\XRBase\\\\Assets\\\\Resources\\\\UIToolkit\\\\ToolBar\"\"\")",
+ "Bash(/bin/ls:*)",
+ "Bash(/bin/mkdir -p:*)",
+ "Bash(/bin/rm:*)",
+ "WebFetch(domain:docs.unity3d.com)",
+ "Bash(ls:*)",
+ "WebFetch(domain:discussions.unity.com)",
+ "mcp__ai-game-developer__screenshot-game-view"
],
"deny": [],
"ask": []
diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md
new file mode 100644
index 00000000..bb7409a0
--- /dev/null
+++ b/.github/copilot-instructions.md
@@ -0,0 +1,2 @@
+프로젝트 루트 폴더의 CLAUDE.md를 참조해
+답변은 항상 한국어로 작성해
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index c9c98177..5c83e899 100644
--- a/.gitignore
+++ b/.gitignore
@@ -86,4 +86,5 @@ crashlytics-build.properties
.DS_Store
-.idea/
\ No newline at end of file
+.idea/
+.vscode/
\ No newline at end of file
diff --git a/.mcp.json b/.mcp.json
new file mode 100644
index 00000000..1d44ea42
--- /dev/null
+++ b/.mcp.json
@@ -0,0 +1,8 @@
+{
+ "mcpServers": {
+ "ai-game-developer": {
+ "type": "http",
+ "url": "http://localhost:55726"
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/Scripts/Editor.meta b/Assets/Editor.meta
similarity index 77%
rename from Assets/Scripts/Editor.meta
rename to Assets/Editor.meta
index f1f4ebe9..5b9df306 100644
--- a/Assets/Scripts/Editor.meta
+++ b/Assets/Editor.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: ebf477f3ba4991c439a8729dc21abac7
+guid: 025311df5d1d7e54aa8d7ccaf9367bf3
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/Editor/FixMCPEditorPrefs.cs b/Assets/Editor/FixMCPEditorPrefs.cs
new file mode 100644
index 00000000..5b588a9a
--- /dev/null
+++ b/Assets/Editor/FixMCPEditorPrefs.cs
@@ -0,0 +1,148 @@
+#nullable enable
+using UnityEditor;
+using UnityEngine;
+
+///
+/// MCP for Unity EditorPrefs 설정 확인 및 수정 도구
+///
+public static class FixMCPEditorPrefs
+{
+ private const string GitUrlOverrideKey = "MCPForUnity.GitUrlOverride";
+
+ [MenuItem("Tools/MCP/Fix EditorPrefs Issue")]
+ public static void FixEditorPrefs()
+ {
+ Debug.Log("=== MCP EditorPrefs 확인 시작 ===");
+
+ // 현재 저장된 값 확인
+ string currentValue = EditorPrefs.GetString(GitUrlOverrideKey, "");
+
+ Debug.Log($"현재 GitUrlOverride 값: '{currentValue}'");
+ Debug.Log($"값 길이: {currentValue.Length}");
+
+ if (!string.IsNullOrEmpty(currentValue))
+ {
+ // 잘못된 문자가 있는지 확인
+ char[] invalidChars = System.IO.Path.GetInvalidPathChars();
+ bool hasInvalidChars = currentValue.IndexOfAny(invalidChars) >= 0;
+
+ if (hasInvalidChars)
+ {
+ Debug.LogWarning($"⚠️ 잘못된 경로 문자가 감지되었습니다!");
+ Debug.LogWarning($"문제가 있는 값: '{currentValue}'");
+
+ // 잘못된 값 제거
+ EditorPrefs.DeleteKey(GitUrlOverrideKey);
+ Debug.Log("✅ 잘못된 EditorPrefs 값을 제거했습니다.");
+ }
+ else
+ {
+ Debug.Log("경로 문자 검증: 정상");
+
+ // Path.IsPathRooted() 테스트
+ try
+ {
+ bool isRooted = System.IO.Path.IsPathRooted(currentValue);
+ Debug.Log($"IsPathRooted 테스트: {isRooted} (정상)");
+ }
+ catch (System.Exception ex)
+ {
+ Debug.LogError($"❌ IsPathRooted 호출 실패: {ex.Message}");
+ Debug.LogWarning("잘못된 값을 제거합니다...");
+ EditorPrefs.DeleteKey(GitUrlOverrideKey);
+ Debug.Log("✅ 잘못된 EditorPrefs 값을 제거했습니다.");
+ }
+ }
+ }
+ else
+ {
+ Debug.Log("GitUrlOverride 값이 비어있습니다. (정상)");
+ }
+
+ Debug.Log("=== MCP EditorPrefs 확인 완료 ===");
+ Debug.Log("Unity 에디터를 재시작하거나 MCP 윈도우를 다시 열어주세요.");
+ }
+
+ [MenuItem("Tools/MCP/Show All MCP EditorPrefs")]
+ public static void ShowAllMCPPrefs()
+ {
+ Debug.Log("=== 모든 MCP EditorPrefs 값 ===");
+
+ string[] keys = new[]
+ {
+ "MCPForUnity.GitUrlOverride",
+ "MCPForUnity.UseHttpTransport",
+ "MCPForUnity.HttpTransportScope",
+ "MCPForUnity.UvxPath",
+ "MCPForUnity.ClaudeCliPath",
+ "MCPForUnity.HttpUrl",
+ "MCPForUnity.HttpRemoteUrl",
+ };
+
+ foreach (string key in keys)
+ {
+ if (EditorPrefs.HasKey(key))
+ {
+ string value = EditorPrefs.GetString(key, "");
+ Debug.Log($"{key}: '{value}'");
+ }
+ else
+ {
+ Debug.Log($"{key}: (설정되지 않음)");
+ }
+ }
+ }
+
+ [MenuItem("Tools/MCP/Clear All MCP EditorPrefs")]
+ public static void ClearAllMCPPrefs()
+ {
+ bool confirm = EditorUtility.DisplayDialog(
+ "MCP EditorPrefs 초기화",
+ "모든 MCP for Unity 설정을 초기화하시겠습니까?\n이 작업은 되돌릴 수 없습니다.",
+ "초기화",
+ "취소"
+ );
+
+ if (!confirm)
+ {
+ Debug.Log("취소되었습니다.");
+ return;
+ }
+
+ Debug.Log("=== MCP EditorPrefs 초기화 시작 ===");
+
+ string[] keys = new[]
+ {
+ "MCPForUnity.GitUrlOverride",
+ "MCPForUnity.UseHttpTransport",
+ "MCPForUnity.HttpTransportScope",
+ "MCPForUnity.LastLocalHttpServerPid",
+ "MCPForUnity.LastLocalHttpServerPort",
+ "MCPForUnity.LastLocalHttpServerStartedUtc",
+ "MCPForUnity.LastLocalHttpServerPidArgsHash",
+ "MCPForUnity.LastLocalHttpServerPidFilePath",
+ "MCPForUnity.LastLocalHttpServerInstanceToken",
+ "MCPForUnity.UvxPath",
+ "MCPForUnity.ClaudeCliPath",
+ "MCPForUnity.HttpUrl",
+ "MCPForUnity.HttpRemoteUrl",
+ "MCPForUnity.DebugLogs",
+ "MCPForUnity.ValidationLevel",
+ "MCPForUnity.UnitySocketPort",
+ "MCPForUnity.ResumeHttpAfterReload",
+ "MCPForUnity.ResumeStdioAfterReload",
+ };
+
+ foreach (string key in keys)
+ {
+ if (EditorPrefs.HasKey(key))
+ {
+ EditorPrefs.DeleteKey(key);
+ Debug.Log($"✅ 삭제: {key}");
+ }
+ }
+
+ Debug.Log("=== MCP EditorPrefs 초기화 완료 ===");
+ Debug.Log("Unity 에디터를 재시작해주세요.");
+ }
+}
diff --git a/Assets/Editor/FixMCPEditorPrefs.cs.meta b/Assets/Editor/FixMCPEditorPrefs.cs.meta
new file mode 100644
index 00000000..31053924
--- /dev/null
+++ b/Assets/Editor/FixMCPEditorPrefs.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 955b75403593bb74fbf0ba110a3e1b83
\ No newline at end of file
diff --git a/Assets/QuickOutline.meta b/Assets/Editor/UIToolkit.meta
similarity index 77%
rename from Assets/QuickOutline.meta
rename to Assets/Editor/UIToolkit.meta
index 6a13947d..ea68962a 100644
--- a/Assets/QuickOutline.meta
+++ b/Assets/Editor/UIToolkit.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: 65214e892d855cf4cb0219bebe3ecfbb
+guid: d07e558de63aead44a5de53bc3a61d4d
folderAsset: yes
DefaultImporter:
externalObjects: {}
diff --git a/Assets/Editor/UIToolkit/UTKImageIconsGenerator.cs b/Assets/Editor/UIToolkit/UTKImageIconsGenerator.cs
new file mode 100644
index 00000000..8908cfde
--- /dev/null
+++ b/Assets/Editor/UIToolkit/UTKImageIconsGenerator.cs
@@ -0,0 +1,775 @@
+#nullable enable
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using UnityEditor;
+using UnityEngine;
+
+namespace UVC.UIToolkit.Editor
+{
+ ///
+ /// 이미지 아이콘 폴더를 스캔하여 아이콘 경로 상수 클래스를 자동 생성하는 에디터 도구입니다.
+ ///
+ public class UTKImageIconsGenerator : EditorWindow
+ {
+ #region EditorPrefs Keys
+
+ private const string PrefKeyIconsFolder = "UTK_ImageIcons_IconsFolder";
+ private const string PrefKeyOutputPath = "UTK_ImageIcons_OutputPath";
+ private const string PrefKeyClassName = "UTK_ImageIcons_ClassName";
+ private const string PrefKeyNamespace = "UTK_ImageIcons_Namespace";
+ private const string PrefKeyIncludeSubfolders = "UTK_ImageIcons_IncludeSubfolders";
+ private const string PrefKeyGeneratePreview = "UTK_ImageIcons_GeneratePreview";
+
+ #endregion
+
+ #region Default Values
+
+ private const string DefaultIconsFolder = "Assets/Resources/Icons";
+ private const string DefaultOutputPath = "Assets/Scripts/UVC/UIToolkit/Common/UTKImageIcons.cs";
+ private const string DefaultClassName = "UTKImageIcons";
+ private const string DefaultNamespace = "UVC.UIToolkit";
+
+ #endregion
+
+ #region Supported Extensions
+
+ private static readonly string[] SupportedExtensions = { ".png", ".jpg", ".jpeg", ".tga", ".psd", ".gif", ".bmp" };
+
+ #endregion
+
+ #region Fields
+
+ private string _iconsFolder = DefaultIconsFolder;
+ private string _outputPath = DefaultOutputPath;
+ private string _className = DefaultClassName;
+ private string _namespace = DefaultNamespace;
+ private bool _includeSubfolders = true;
+ private bool _generatePreview = true;
+
+ private Vector2 _scrollPosition;
+ private List? _previewIcons;
+
+ #endregion
+
+ private class IconInfo
+ {
+ public string FilePath { get; set; } = "";
+ public string FileName { get; set; } = "";
+ public string FieldName { get; set; } = "";
+ public string ResourcePath { get; set; } = "";
+ public string RelativePath { get; set; } = "";
+ public Texture2D? Preview { get; set; }
+ }
+
+ [MenuItem("Tools/UTK/Image Icons Generator")]
+ public static void ShowWindow()
+ {
+ var window = GetWindow("Image Icons Generator");
+ window.minSize = new Vector2(500, 400);
+ window.LoadSettings();
+ }
+
+ [MenuItem("Tools/UTK/Generate Image Icons Class (Quick)")]
+ public static void GenerateQuick()
+ {
+ var iconsFolder = EditorPrefs.GetString(PrefKeyIconsFolder, DefaultIconsFolder);
+ var outputPath = EditorPrefs.GetString(PrefKeyOutputPath, DefaultOutputPath);
+ var className = EditorPrefs.GetString(PrefKeyClassName, DefaultClassName);
+ var namespaceName = EditorPrefs.GetString(PrefKeyNamespace, DefaultNamespace);
+ var includeSubfolders = EditorPrefs.GetBool(PrefKeyIncludeSubfolders, true);
+
+ Generate(iconsFolder, outputPath, className, namespaceName, includeSubfolders);
+ }
+
+ private void OnEnable()
+ {
+ LoadSettings();
+ }
+
+ private void OnDisable()
+ {
+ ClearPreviewTextures();
+ }
+
+ private void LoadSettings()
+ {
+ _iconsFolder = EditorPrefs.GetString(PrefKeyIconsFolder, DefaultIconsFolder);
+ _outputPath = EditorPrefs.GetString(PrefKeyOutputPath, DefaultOutputPath);
+ _className = EditorPrefs.GetString(PrefKeyClassName, DefaultClassName);
+ _namespace = EditorPrefs.GetString(PrefKeyNamespace, DefaultNamespace);
+ _includeSubfolders = EditorPrefs.GetBool(PrefKeyIncludeSubfolders, true);
+ _generatePreview = EditorPrefs.GetBool(PrefKeyGeneratePreview, true);
+ }
+
+ private void SaveSettings()
+ {
+ EditorPrefs.SetString(PrefKeyIconsFolder, _iconsFolder);
+ EditorPrefs.SetString(PrefKeyOutputPath, _outputPath);
+ EditorPrefs.SetString(PrefKeyClassName, _className);
+ EditorPrefs.SetString(PrefKeyNamespace, _namespace);
+ EditorPrefs.SetBool(PrefKeyIncludeSubfolders, _includeSubfolders);
+ EditorPrefs.SetBool(PrefKeyGeneratePreview, _generatePreview);
+ }
+
+ private void ClearPreviewTextures()
+ {
+ _previewIcons = null;
+ }
+
+ private void OnGUI()
+ {
+ EditorGUILayout.Space(10);
+ EditorGUILayout.LabelField("Image Icons Class Generator", EditorStyles.boldLabel);
+ EditorGUILayout.Space(5);
+ EditorGUILayout.HelpBox("이미지 아이콘 폴더를 스캔하여 Resources.Load로 사용할 수 있는 C# 정적 클래스를 생성합니다.", UnityEditor.MessageType.Info);
+ EditorGUILayout.Space(10);
+
+ // 아이콘 폴더 경로
+ EditorGUILayout.BeginHorizontal();
+ _iconsFolder = EditorGUILayout.TextField("Icons Folder", _iconsFolder);
+ if (GUILayout.Button("...", GUILayout.Width(30)))
+ {
+ var path = EditorUtility.OpenFolderPanel("Select Icons Folder", "Assets", "");
+ if (!string.IsNullOrEmpty(path))
+ {
+ // 상대 경로로 변환
+ if (path.StartsWith(Application.dataPath))
+ {
+ path = "Assets" + path.Substring(Application.dataPath.Length);
+ }
+ _iconsFolder = path;
+ ClearPreviewTextures();
+ }
+ }
+ EditorGUILayout.EndHorizontal();
+
+ // 출력 파일 경로
+ EditorGUILayout.BeginHorizontal();
+ _outputPath = EditorGUILayout.TextField("Output File", _outputPath);
+ if (GUILayout.Button("...", GUILayout.Width(30)))
+ {
+ var directory = Path.GetDirectoryName(_outputPath) ?? "Assets";
+ var filename = Path.GetFileName(_outputPath);
+ var path = EditorUtility.SaveFilePanel("Save Generated Class", directory, filename, "cs");
+ if (!string.IsNullOrEmpty(path))
+ {
+ // 상대 경로로 변환
+ if (path.StartsWith(Application.dataPath))
+ {
+ path = "Assets" + path.Substring(Application.dataPath.Length);
+ }
+ _outputPath = path;
+ }
+ }
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.Space(5);
+
+ // 클래스명
+ _className = EditorGUILayout.TextField("Class Name", _className);
+
+ // 네임스페이스
+ _namespace = EditorGUILayout.TextField("Namespace", _namespace);
+
+ EditorGUILayout.Space(5);
+
+ // 옵션
+ _includeSubfolders = EditorGUILayout.Toggle("Include Subfolders", _includeSubfolders);
+ _generatePreview = EditorGUILayout.Toggle("Show Preview", _generatePreview);
+
+ EditorGUILayout.Space(10);
+
+ // 폴더 존재 여부 및 아이콘 수 표시
+ var folderExists = Directory.Exists(_iconsFolder);
+ var outputExists = File.Exists(_outputPath);
+
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField("Icons Folder:", GUILayout.Width(100));
+ EditorGUILayout.LabelField(folderExists ? "Found" : "Not Found",
+ folderExists ? EditorStyles.label : EditorStyles.boldLabel);
+ EditorGUILayout.EndHorizontal();
+
+ if (folderExists)
+ {
+ var iconCount = CountIcons(_iconsFolder, _includeSubfolders);
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField("Icons Found:", GUILayout.Width(100));
+ EditorGUILayout.LabelField($"{iconCount} images");
+ EditorGUILayout.EndHorizontal();
+ }
+
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField("Output File:", GUILayout.Width(100));
+ EditorGUILayout.LabelField(outputExists ? "Exists (will overwrite)" : "New file");
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.Space(10);
+
+ // 버튼들
+ EditorGUILayout.BeginHorizontal();
+
+ GUI.enabled = folderExists;
+ if (GUILayout.Button("Scan & Preview", GUILayout.Height(25)))
+ {
+ SaveSettings();
+ ScanIcons();
+ }
+
+ if (GUILayout.Button("Generate", GUILayout.Height(25)))
+ {
+ SaveSettings();
+ Generate(_iconsFolder, _outputPath, _className, _namespace, _includeSubfolders);
+ }
+ GUI.enabled = true;
+
+ if (GUILayout.Button("Reset", GUILayout.Height(25)))
+ {
+ _iconsFolder = DefaultIconsFolder;
+ _outputPath = DefaultOutputPath;
+ _className = DefaultClassName;
+ _namespace = DefaultNamespace;
+ _includeSubfolders = true;
+ _generatePreview = true;
+ SaveSettings();
+ ClearPreviewTextures();
+ }
+
+ EditorGUILayout.EndHorizontal();
+
+ // 미리보기 영역
+ if (_generatePreview && _previewIcons != null && _previewIcons.Count > 0)
+ {
+ EditorGUILayout.Space(10);
+ EditorGUILayout.LabelField($"Preview ({_previewIcons.Count} icons)", EditorStyles.boldLabel);
+
+ _scrollPosition = EditorGUILayout.BeginScrollView(_scrollPosition, GUILayout.ExpandHeight(true));
+
+ var iconSize = 48;
+ var padding = 4;
+ var labelHeight = 16;
+ var itemWidth = iconSize + padding * 2;
+ var itemHeight = iconSize + labelHeight + padding * 2;
+
+ var windowWidth = position.width - 20;
+ var columns = Mathf.Max(1, (int)(windowWidth / itemWidth));
+
+ EditorGUILayout.BeginHorizontal();
+ var currentColumn = 0;
+
+ foreach (var icon in _previewIcons)
+ {
+ if (currentColumn >= columns)
+ {
+ EditorGUILayout.EndHorizontal();
+ EditorGUILayout.BeginHorizontal();
+ currentColumn = 0;
+ }
+
+ EditorGUILayout.BeginVertical(GUILayout.Width(itemWidth), GUILayout.Height(itemHeight));
+
+ // 아이콘 이미지
+ var rect = GUILayoutUtility.GetRect(iconSize, iconSize);
+ if (icon.Preview != null)
+ {
+ GUI.DrawTexture(rect, icon.Preview, ScaleMode.ScaleToFit);
+ }
+ else
+ {
+ EditorGUI.DrawRect(rect, new Color(0.2f, 0.2f, 0.2f));
+ }
+
+ // 필드명
+ var style = new GUIStyle(EditorStyles.miniLabel)
+ {
+ alignment = TextAnchor.MiddleCenter,
+ clipping = TextClipping.Clip
+ };
+ EditorGUILayout.LabelField(icon.FieldName, style, GUILayout.Width(itemWidth), GUILayout.Height(labelHeight));
+
+ EditorGUILayout.EndVertical();
+ currentColumn++;
+ }
+
+ EditorGUILayout.EndHorizontal();
+ EditorGUILayout.EndScrollView();
+ }
+ }
+
+ private void ScanIcons()
+ {
+ ClearPreviewTextures();
+ _previewIcons = GetIconInfos(_iconsFolder, _includeSubfolders);
+
+ // 프리뷰 텍스처 로드
+ foreach (var icon in _previewIcons)
+ {
+ icon.Preview = AssetDatabase.LoadAssetAtPath(icon.FilePath);
+ }
+ }
+
+ private static int CountIcons(string folder, bool includeSubfolders)
+ {
+ var searchOption = includeSubfolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
+ var count = 0;
+
+ foreach (var ext in SupportedExtensions)
+ {
+ count += Directory.GetFiles(folder, $"*{ext}", searchOption).Length;
+ }
+
+ return count;
+ }
+
+ private static List GetIconInfos(string folder, bool includeSubfolders)
+ {
+ var result = new List();
+ var searchOption = includeSubfolders ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly;
+ var usedNames = new HashSet();
+
+ // Resources 폴더 기준 경로 계산
+ var resourcesIndex = folder.IndexOf("Resources/", StringComparison.OrdinalIgnoreCase);
+ var isInResources = resourcesIndex >= 0;
+ var resourcesBasePath = isInResources ? folder.Substring(resourcesIndex + "Resources/".Length) : "";
+
+ foreach (var ext in SupportedExtensions)
+ {
+ var files = Directory.GetFiles(folder, $"*{ext}", searchOption);
+ foreach (var file in files)
+ {
+ var normalizedPath = file.Replace("\\", "/");
+ var fileName = Path.GetFileNameWithoutExtension(normalizedPath);
+ var relativePath = normalizedPath.Substring(folder.Length).TrimStart('/');
+ var relativeDir = Path.GetDirectoryName(relativePath)?.Replace("\\", "/") ?? "";
+
+ // Resources.Load용 경로 (확장자 제외)
+ string resourcePath;
+ if (isInResources)
+ {
+ var fullRelative = string.IsNullOrEmpty(resourcesBasePath)
+ ? relativePath
+ : $"{resourcesBasePath}/{relativePath}";
+ resourcePath = Path.ChangeExtension(fullRelative, null);
+ }
+ else
+ {
+ resourcePath = normalizedPath; // Resources 외부면 전체 경로 사용
+ }
+
+ var fieldName = ConvertToFieldName(fileName, relativeDir, usedNames);
+
+ result.Add(new IconInfo
+ {
+ FilePath = normalizedPath,
+ FileName = fileName,
+ FieldName = fieldName,
+ ResourcePath = resourcePath,
+ RelativePath = relativePath
+ });
+ }
+ }
+
+ return result.OrderBy(i => i.FieldName).ToList();
+ }
+
+ public static void Generate(string iconsFolder, string outputPath, string className, string namespaceName, bool includeSubfolders)
+ {
+ if (!Directory.Exists(iconsFolder))
+ {
+ Debug.LogError($"아이콘 폴더를 찾을 수 없습니다: {iconsFolder}");
+ return;
+ }
+
+ var icons = GetIconInfos(iconsFolder, includeSubfolders);
+ if (icons.Count == 0)
+ {
+ Debug.LogError("아이콘을 찾을 수 없습니다.");
+ return;
+ }
+
+ var code = GenerateCode(icons, className, namespaceName, iconsFolder);
+
+ // 디렉토리 생성
+ var directory = Path.GetDirectoryName(outputPath);
+ if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
+ {
+ Directory.CreateDirectory(directory);
+ }
+
+ File.WriteAllText(outputPath, code, Encoding.UTF8);
+ AssetDatabase.Refresh();
+
+ Debug.Log($"{className}.cs 생성 완료: {icons.Count}개 아이콘 ({outputPath})");
+ }
+
+ private static string GenerateCode(List icons, string className, string namespaceName, string sourceFolder)
+ {
+ var sb = new StringBuilder();
+
+ // Resources 폴더 여부 확인
+ var isInResources = sourceFolder.Contains("Resources");
+
+ sb.AppendLine("// ");
+ sb.AppendLine("// 이 파일은 UTKImageIconsGenerator에 의해 자동 생성되었습니다.");
+ sb.AppendLine("// 직접 수정하지 마세요. Tools > UTK > Image Icons Generator 메뉴로 재생성하세요.");
+ sb.AppendLine($"// Source: {sourceFolder}");
+ sb.AppendLine("// ");
+ sb.AppendLine();
+ sb.AppendLine("#nullable enable");
+ sb.AppendLine("using System.Collections.Generic;");
+ sb.AppendLine("using System.Threading;");
+ sb.AppendLine("using Cysharp.Threading.Tasks;");
+ sb.AppendLine("using UnityEngine;");
+ sb.AppendLine();
+ sb.AppendLine($"namespace {namespaceName}");
+ sb.AppendLine("{");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 이미지 아이콘 리소스 경로 상수 클래스입니다.");
+ sb.AppendLine($" /// 총 {icons.Count}개의 아이콘을 포함합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 상수로 리소스 경로 사용");
+ sb.AppendLine($" /// string path = {className}.Home;");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 동기 Sprite 로드 (캐싱됨)");
+ sb.AppendLine($" /// Sprite sprite = {className}.LoadSprite({className}.Home);");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 비동기 Sprite 로드 (UniTask, 캐싱됨)");
+ sb.AppendLine($" /// Sprite? sprite = await {className}.LoadSpriteAsync({className}.Home, cancellationToken);");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 동기 Texture2D 로드 (캐싱됨)");
+ sb.AppendLine($" /// Texture2D texture = {className}.LoadTexture({className}.Settings);");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 비동기 Texture2D 로드 (UniTask, 캐싱됨)");
+ sb.AppendLine($" /// Texture2D? texture = await {className}.LoadTextureAsync({className}.Settings, cancellationToken);");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 이름으로 Sprite 로드");
+ sb.AppendLine($" /// Sprite icon = {className}.LoadSpriteByName(\"home\");");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 이름으로 비동기 Sprite 로드");
+ sb.AppendLine($" /// Sprite? icon = await {className}.LoadSpriteByNameAsync(\"home\", cancellationToken);");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 이름으로 경로 조회");
+ sb.AppendLine($" /// string iconPath = {className}.GetPath(\"settings\");");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 아이콘 존재 여부 확인");
+ sb.AppendLine($" /// if ({className}.HasIcon(\"search\")) {{ }}");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 전체 아이콘 이름 순회");
+ sb.AppendLine($" /// foreach (var name in {className}.GetAllIconNames()) {{ }}");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 캐시 클리어");
+ sb.AppendLine($" /// {className}.ClearCache();");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// UXML에서 사용하기:");
+ sb.AppendLine(" /// UXML에서 이미지 아이콘을 사용하려면 USS에서 background-image를 설정합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// /* USS 파일 */");
+ sb.AppendLine(" /// .my-icon {");
+ sb.AppendLine(" /// width: 24px;");
+ sb.AppendLine(" /// height: 24px;");
+ sb.AppendLine(" /// background-image: resource('UIToolkit/Images/icon_setting_22');");
+ sb.AppendLine(" /// }");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// C# 코드에서 UXML 요소에 이미지 적용:");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// var iconElement = root.Q(\"my-icon\");");
+ sb.AppendLine($" /// var texture = {className}.LoadTextureByName(\"icon_setting_22\");");
+ sb.AppendLine(" /// iconElement.style.backgroundImage = new StyleBackground(texture);");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// Image 요소에서 사용:");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// var image = root.Q(\"my-image\");");
+ sb.AppendLine($" /// image.sprite = {className}.LoadSpriteByName(\"btn_close_16\");");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" public static class {className}");
+ sb.AppendLine(" {");
+
+ // 아이콘 경로 상수 생성
+ foreach (var icon in icons)
+ {
+ sb.AppendLine($" /// {icon.RelativePath}");
+ sb.AppendLine($" public const string {icon.FieldName} = \"{icon.ResourcePath}\";");
+ }
+
+ sb.AppendLine();
+ sb.AppendLine(" #region Lookup & Load");
+ sb.AppendLine();
+
+ // 이름으로 경로 조회 딕셔너리
+ sb.AppendLine(" private static readonly Dictionary _pathsByName = new()");
+ sb.AppendLine(" {");
+ foreach (var icon in icons)
+ {
+ sb.AppendLine($" [\"{icon.FileName}\"] = \"{icon.ResourcePath}\",");
+ }
+ sb.AppendLine(" };");
+ sb.AppendLine();
+
+ // 캐시 딕셔너리
+ sb.AppendLine(" private static readonly Dictionary _spriteCache = new();");
+ sb.AppendLine(" private static readonly Dictionary _textureCache = new();");
+ sb.AppendLine();
+
+ // 조회 메서드
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 이름으로 리소스 경로를 조회합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 파일명 (확장자 제외)");
+ sb.AppendLine(" /// 리소스 경로, 없으면 빈 문자열");
+ sb.AppendLine(" public static string GetPath(string iconName)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" return _pathsByName.TryGetValue(iconName, out var path) ? path : string.Empty;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘이 존재하는지 확인합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" public static bool HasIcon(string iconName) => _pathsByName.ContainsKey(iconName);");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 모든 아이콘 이름 목록을 반환합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" public static IEnumerable GetAllIconNames() => _pathsByName.Keys;");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 리소스 경로로 아이콘 이름을 조회합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 리소스 경로 (예: Icons/Home)");
+ sb.AppendLine(" /// 아이콘 이름, 없으면 빈 문자열");
+ sb.AppendLine(" public static string GetIconName(string resourcePath)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" foreach (var kvp in _pathsByName)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" if (kvp.Value == resourcePath) return kvp.Key;");
+ sb.AppendLine(" }");
+ sb.AppendLine(" return string.Empty;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 전체 아이콘 수를 반환합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" public static int Count => {icons.Count};");
+ sb.AppendLine();
+
+ // 동기 로드 메서드들
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 리소스 경로로 Sprite를 동기로 로드합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 리소스 경로 (예: Icons/Home)");
+ sb.AppendLine(" public static Sprite? LoadSprite(string resourcePath)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" if (_spriteCache.TryGetValue(resourcePath, out var cached))");
+ sb.AppendLine(" return cached;");
+ sb.AppendLine();
+ sb.AppendLine(" var sprite = Resources.Load(resourcePath);");
+ sb.AppendLine(" _spriteCache[resourcePath] = sprite;");
+ sb.AppendLine(" return sprite;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 리소스 경로로 Sprite를 비동기로 로드합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 리소스 경로 (예: Icons/Home)");
+ sb.AppendLine(" /// 취소 토큰");
+ sb.AppendLine(" public static async UniTask LoadSpriteAsync(string resourcePath, CancellationToken ct = default)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" if (_spriteCache.TryGetValue(resourcePath, out var cached))");
+ sb.AppendLine(" return cached;");
+ sb.AppendLine();
+ sb.AppendLine(" var request = Resources.LoadAsync(resourcePath);");
+ sb.AppendLine(" await request.ToUniTask(cancellationToken: ct);");
+ sb.AppendLine();
+ sb.AppendLine(" var sprite = request.asset as Sprite;");
+ sb.AppendLine(" _spriteCache[resourcePath] = sprite;");
+ sb.AppendLine(" return sprite;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 리소스 경로로 Texture2D를 동기로 로드합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 리소스 경로 (예: Icons/Home)");
+ sb.AppendLine(" public static Texture2D? LoadTexture(string resourcePath)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" if (_textureCache.TryGetValue(resourcePath, out var cached))");
+ sb.AppendLine(" return cached;");
+ sb.AppendLine();
+ sb.AppendLine(" var texture = Resources.Load(resourcePath);");
+ sb.AppendLine(" _textureCache[resourcePath] = texture;");
+ sb.AppendLine(" return texture;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 리소스 경로로 Texture2D를 비동기로 로드합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 리소스 경로 (예: Icons/Home)");
+ sb.AppendLine(" /// 취소 토큰");
+ sb.AppendLine(" public static async UniTask LoadTextureAsync(string resourcePath, CancellationToken ct = default)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" if (_textureCache.TryGetValue(resourcePath, out var cached))");
+ sb.AppendLine(" return cached;");
+ sb.AppendLine();
+ sb.AppendLine(" var request = Resources.LoadAsync(resourcePath);");
+ sb.AppendLine(" await request.ToUniTask(cancellationToken: ct);");
+ sb.AppendLine();
+ sb.AppendLine(" var texture = request.asset as Texture2D;");
+ sb.AppendLine(" _textureCache[resourcePath] = texture;");
+ sb.AppendLine(" return texture;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 이름으로 Sprite를 동기로 로드합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 파일명 (확장자 제외)");
+ sb.AppendLine(" public static Sprite? LoadSpriteByName(string iconName)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" var path = GetPath(iconName);");
+ sb.AppendLine(" return string.IsNullOrEmpty(path) ? null : LoadSprite(path);");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 이름으로 Sprite를 비동기로 로드합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 파일명 (확장자 제외)");
+ sb.AppendLine(" /// 취소 토큰");
+ sb.AppendLine(" public static async UniTask LoadSpriteByNameAsync(string iconName, CancellationToken ct = default)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" var path = GetPath(iconName);");
+ sb.AppendLine(" return string.IsNullOrEmpty(path) ? null : await LoadSpriteAsync(path, ct);");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 이름으로 Texture2D를 동기로 로드합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 파일명 (확장자 제외)");
+ sb.AppendLine(" public static Texture2D? LoadTextureByName(string iconName)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" var path = GetPath(iconName);");
+ sb.AppendLine(" return string.IsNullOrEmpty(path) ? null : LoadTexture(path);");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 이름으로 Texture2D를 비동기로 로드합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 파일명 (확장자 제외)");
+ sb.AppendLine(" /// 취소 토큰");
+ sb.AppendLine(" public static async UniTask LoadTextureByNameAsync(string iconName, CancellationToken ct = default)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" var path = GetPath(iconName);");
+ sb.AppendLine(" return string.IsNullOrEmpty(path) ? null : await LoadTextureAsync(path, ct);");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 캐시를 클리어합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" public static void ClearCache()");
+ sb.AppendLine(" {");
+ sb.AppendLine(" _spriteCache.Clear();");
+ sb.AppendLine(" _textureCache.Clear();");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+ sb.AppendLine(" #endregion");
+
+ sb.AppendLine(" }");
+ sb.AppendLine("}");
+
+ return sb.ToString();
+ }
+
+ private static string ConvertToFieldName(string fileName, string relativeDir, HashSet usedNames)
+ {
+ var sb = new StringBuilder();
+
+ // 서브폴더가 있으면 접두사로 추가
+ if (!string.IsNullOrEmpty(relativeDir))
+ {
+ var dirParts = relativeDir.Split('/');
+ foreach (var part in dirParts)
+ {
+ AppendPascalCase(sb, part);
+ }
+ sb.Append('_');
+ }
+
+ // 파일명 변환
+ AppendPascalCase(sb, fileName);
+
+ var result = sb.ToString();
+
+ // 숫자로 시작하면 앞에 _ 추가
+ if (result.Length > 0 && char.IsDigit(result[0]))
+ {
+ result = "_" + result;
+ }
+
+ // 빈 문자열이면 기본값
+ if (string.IsNullOrEmpty(result))
+ {
+ result = "_Icon";
+ }
+
+ // 중복 처리
+ var originalResult = result;
+ var counter = 2;
+ while (usedNames.Contains(result))
+ {
+ result = $"{originalResult}_{counter}";
+ counter++;
+ }
+
+ usedNames.Add(result);
+ return result;
+ }
+
+ private static void AppendPascalCase(StringBuilder sb, string input)
+ {
+ // 특수문자를 구분자로 사용
+ var words = input.Split(new[] { '_', '-', ' ', '.' }, StringSplitOptions.RemoveEmptyEntries);
+
+ foreach (var word in words)
+ {
+ if (word.Length == 0) continue;
+
+ // 첫 글자 대문자
+ sb.Append(char.ToUpper(word[0]));
+ if (word.Length > 1)
+ {
+ // 나머지는 소문자로 (단, 연속 대문자면 유지)
+ for (int i = 1; i < word.Length; i++)
+ {
+ if (char.IsUpper(word[i]) && i + 1 < word.Length && char.IsUpper(word[i + 1]))
+ {
+ sb.Append(word[i]);
+ }
+ else
+ {
+ sb.Append(char.ToLower(word[i]));
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/Assets/Editor/UIToolkit/UTKImageIconsGenerator.cs.meta b/Assets/Editor/UIToolkit/UTKImageIconsGenerator.cs.meta
new file mode 100644
index 00000000..95c03c20
--- /dev/null
+++ b/Assets/Editor/UIToolkit/UTKImageIconsGenerator.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 3d7dbdad9e333f4478d838c2d78bb2be
\ No newline at end of file
diff --git a/Assets/Editor/UIToolkit/UTKMaterialIconsGenerator.cs b/Assets/Editor/UIToolkit/UTKMaterialIconsGenerator.cs
new file mode 100644
index 00000000..5b67636f
--- /dev/null
+++ b/Assets/Editor/UIToolkit/UTKMaterialIconsGenerator.cs
@@ -0,0 +1,615 @@
+#nullable enable
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Text;
+using UnityEditor;
+using UnityEngine;
+
+namespace UVC.UIToolkit.Editor
+{
+ ///
+ /// MaterialSymbolsOutlinedCodepoints.txt 파일을 파싱하여
+ /// UTKMaterialIcons.cs 정적 클래스를 자동 생성하는 에디터 도구입니다.
+ ///
+ public class UTKMaterialIconsGenerator : EditorWindow
+ {
+ #region EditorPrefs Keys
+
+ private const string PrefKeyCodepointsPath = "UTK_MaterialIcons_CodepointsPath";
+ private const string PrefKeyOutputPath = "UTK_MaterialIcons_OutputPath";
+ private const string PrefKeyClassName = "UTK_MaterialIcons_ClassName";
+ private const string PrefKeyNamespace = "UTK_MaterialIcons_Namespace";
+ private const string PrefKeyFontPath = "UTK_MaterialIcons_FontPath";
+
+ #endregion
+
+ #region Default Values
+
+ private const string DefaultCodepointsPath = "Assets/Resources/Fonts/Icons/MaterialSymbolsOutlinedCodepoints.txt";
+ private const string DefaultOutputPath = "Assets/Scripts/UVC/UIToolkit/Common/UTKMaterialIcons.cs";
+ private const string DefaultClassName = "UTKMaterialIcons";
+ private const string DefaultNamespace = "UVC.UIToolkit";
+ private const string DefaultFontPath = "Fonts/Icons/MaterialSymbolsOutlined";
+
+ #endregion
+
+ #region Fields
+
+ private string _codepointsPath = DefaultCodepointsPath;
+ private string _outputPath = DefaultOutputPath;
+ private string _className = DefaultClassName;
+ private string _namespace = DefaultNamespace;
+ private string _fontPath = DefaultFontPath;
+
+ #endregion
+
+ [MenuItem("Tools/UTK/Material Icons Generator")]
+ public static void ShowWindow()
+ {
+ var window = GetWindow("Material Icons Generator");
+ window.minSize = new Vector2(450, 250);
+ window.LoadSettings();
+ }
+
+ [MenuItem("Tools/UTK/Generate Material Icons Class (Quick)")]
+ public static void GenerateQuick()
+ {
+ var codepointsPath = EditorPrefs.GetString(PrefKeyCodepointsPath, DefaultCodepointsPath);
+ var outputPath = EditorPrefs.GetString(PrefKeyOutputPath, DefaultOutputPath);
+ var className = EditorPrefs.GetString(PrefKeyClassName, DefaultClassName);
+ var namespaceName = EditorPrefs.GetString(PrefKeyNamespace, DefaultNamespace);
+ var fontPath = EditorPrefs.GetString(PrefKeyFontPath, DefaultFontPath);
+
+ Generate(codepointsPath, outputPath, className, namespaceName, fontPath);
+ }
+
+ private void OnEnable()
+ {
+ LoadSettings();
+ }
+
+ private void LoadSettings()
+ {
+ _codepointsPath = EditorPrefs.GetString(PrefKeyCodepointsPath, DefaultCodepointsPath);
+ _outputPath = EditorPrefs.GetString(PrefKeyOutputPath, DefaultOutputPath);
+ _className = EditorPrefs.GetString(PrefKeyClassName, DefaultClassName);
+ _namespace = EditorPrefs.GetString(PrefKeyNamespace, DefaultNamespace);
+ _fontPath = EditorPrefs.GetString(PrefKeyFontPath, DefaultFontPath);
+ }
+
+ private void SaveSettings()
+ {
+ EditorPrefs.SetString(PrefKeyCodepointsPath, _codepointsPath);
+ EditorPrefs.SetString(PrefKeyOutputPath, _outputPath);
+ EditorPrefs.SetString(PrefKeyClassName, _className);
+ EditorPrefs.SetString(PrefKeyNamespace, _namespace);
+ EditorPrefs.SetString(PrefKeyFontPath, _fontPath);
+ }
+
+ private void OnGUI()
+ {
+ EditorGUILayout.Space(10);
+ EditorGUILayout.LabelField("Material Icons Class Generator", EditorStyles.boldLabel);
+ EditorGUILayout.Space(5);
+ EditorGUILayout.HelpBox("Codepoints 파일을 파싱하여 C# 정적 클래스를 생성합니다.", UnityEditor.MessageType.Info);
+ EditorGUILayout.Space(10);
+
+ // Codepoints 파일 경로
+ EditorGUILayout.BeginHorizontal();
+ _codepointsPath = EditorGUILayout.TextField("Codepoints File", _codepointsPath);
+ if (GUILayout.Button("...", GUILayout.Width(30)))
+ {
+ var path = EditorUtility.OpenFilePanel("Select Codepoints File", "Assets", "txt");
+ if (!string.IsNullOrEmpty(path))
+ {
+ // 상대 경로로 변환
+ if (path.StartsWith(Application.dataPath))
+ {
+ path = "Assets" + path.Substring(Application.dataPath.Length);
+ }
+ _codepointsPath = path;
+ }
+ }
+ EditorGUILayout.EndHorizontal();
+
+ // 출력 파일 경로
+ EditorGUILayout.BeginHorizontal();
+ _outputPath = EditorGUILayout.TextField("Output File", _outputPath);
+ if (GUILayout.Button("...", GUILayout.Width(30)))
+ {
+ var directory = Path.GetDirectoryName(_outputPath) ?? "Assets";
+ var filename = Path.GetFileName(_outputPath);
+ var path = EditorUtility.SaveFilePanel("Save Generated Class", directory, filename, "cs");
+ if (!string.IsNullOrEmpty(path))
+ {
+ // 상대 경로로 변환
+ if (path.StartsWith(Application.dataPath))
+ {
+ path = "Assets" + path.Substring(Application.dataPath.Length);
+ }
+ _outputPath = path;
+ }
+ }
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.Space(5);
+
+ // 클래스명
+ _className = EditorGUILayout.TextField("Class Name", _className);
+
+ // 네임스페이스
+ _namespace = EditorGUILayout.TextField("Namespace", _namespace);
+
+ // 폰트 경로 (Resources 기준)
+ _fontPath = EditorGUILayout.TextField("Font Path (Resources)", _fontPath);
+ EditorGUILayout.HelpBox("Resources.Load에 사용할 폰트 경로 (확장자 제외)", UnityEditor.MessageType.None);
+
+ EditorGUILayout.Space(15);
+
+ // 파일 존재 여부 표시
+ var codepointsExists = File.Exists(_codepointsPath);
+ var outputExists = File.Exists(_outputPath);
+
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField("Codepoints File:", GUILayout.Width(100));
+ EditorGUILayout.LabelField(codepointsExists ? "Found" : "Not Found",
+ codepointsExists ? EditorStyles.label : EditorStyles.boldLabel);
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.BeginHorizontal();
+ EditorGUILayout.LabelField("Output File:", GUILayout.Width(100));
+ EditorGUILayout.LabelField(outputExists ? "Exists (will overwrite)" : "New file",
+ EditorStyles.label);
+ EditorGUILayout.EndHorizontal();
+
+ EditorGUILayout.Space(15);
+
+ // 버튼들
+ EditorGUILayout.BeginHorizontal();
+
+ GUI.enabled = codepointsExists;
+ if (GUILayout.Button("Generate", GUILayout.Height(30)))
+ {
+ SaveSettings();
+ Generate(_codepointsPath, _outputPath, _className, _namespace, _fontPath);
+ }
+ GUI.enabled = true;
+
+ if (GUILayout.Button("Reset to Defaults", GUILayout.Height(30)))
+ {
+ _codepointsPath = DefaultCodepointsPath;
+ _outputPath = DefaultOutputPath;
+ _className = DefaultClassName;
+ _namespace = DefaultNamespace;
+ _fontPath = DefaultFontPath;
+ SaveSettings();
+ }
+
+ EditorGUILayout.EndHorizontal();
+ }
+
+ public static void Generate(string codepointsPath, string outputPath, string className, string namespaceName, string fontPath = DefaultFontPath)
+ {
+ if (!File.Exists(codepointsPath))
+ {
+ Debug.LogError($"Codepoints 파일을 찾을 수 없습니다: {codepointsPath}");
+ return;
+ }
+
+ var icons = ParseCodepoints(codepointsPath);
+ if (icons.Count == 0)
+ {
+ Debug.LogError("파싱된 아이콘이 없습니다.");
+ return;
+ }
+
+ var code = GenerateCode(icons, className, namespaceName, fontPath);
+
+ // 디렉토리 생성
+ var directory = Path.GetDirectoryName(outputPath);
+ if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
+ {
+ Directory.CreateDirectory(directory);
+ }
+
+ File.WriteAllText(outputPath, code, Encoding.UTF8);
+ AssetDatabase.Refresh();
+
+ Debug.Log($"{className}.cs 생성 완료: {icons.Count}개 아이콘 ({outputPath})");
+ }
+
+ private static List<(string name, string unicode)> ParseCodepoints(string path)
+ {
+ var result = new List<(string, string)>();
+ var lines = File.ReadAllLines(path);
+
+ foreach (var line in lines)
+ {
+ if (string.IsNullOrWhiteSpace(line)) continue;
+
+ var parts = line.Split(' ', StringSplitOptions.RemoveEmptyEntries);
+ if (parts.Length >= 2)
+ {
+ result.Add((parts[0], parts[1]));
+ }
+ }
+
+ return result;
+ }
+
+ private static string GenerateCode(List<(string name, string unicode)> icons, string className, string namespaceName, string fontPath)
+ {
+ var sb = new StringBuilder();
+ var usedNames = new HashSet();
+
+ sb.AppendLine("// ");
+ sb.AppendLine("// 이 파일은 UTKMaterialIconsGenerator에 의해 자동 생성되었습니다.");
+ sb.AppendLine("// 직접 수정하지 마세요. Tools > UTK > Material Icons Generator 메뉴로 재생성하세요.");
+ sb.AppendLine("// ");
+ sb.AppendLine();
+ sb.AppendLine("#nullable enable");
+ sb.AppendLine("using System;");
+ sb.AppendLine("using System.Collections.Generic;");
+ sb.AppendLine("using System.Threading;");
+ sb.AppendLine("using Cysharp.Threading.Tasks;");
+ sb.AppendLine("using UnityEngine;");
+ sb.AppendLine("using UnityEngine.UIElements;");
+ sb.AppendLine();
+ sb.AppendLine($"namespace {namespaceName}");
+ sb.AppendLine("{");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// Material Symbols Outlined 아이콘 유니코드 문자 상수 클래스입니다.");
+ sb.AppendLine($" /// 총 {icons.Count}개의 아이콘을 포함합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 동기 폰트 로드 (캐싱됨)");
+ sb.AppendLine($" /// Font font = {className}.LoadFont();");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 비동기 폰트 로드 (UniTask)");
+ sb.AppendLine($" /// Font? font = await {className}.LoadFontAsync(cancellationToken);");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // Label에 아이콘 적용");
+ sb.AppendLine($" /// var label = new Label({className}.Home);");
+ sb.AppendLine($" /// {className}.ApplyIconStyle(label);");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 비동기로 아이콘 스타일 적용");
+ sb.AppendLine($" /// await {className}.ApplyIconStyleAsync(label, cancellationToken);");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 또는 StyleFontDefinition 직접 사용");
+ sb.AppendLine($" /// label.style.unityFontDefinition = {className}.GetFontDefinition();");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 이름으로 아이콘 조회");
+ sb.AppendLine($" /// string icon = {className}.GetIcon(\"settings\");");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 아이콘 존재 여부 확인");
+ sb.AppendLine($" /// if ({className}.HasIcon(\"search\")) {{ }}");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 존재하는 유니코드 문자인지 확인");
+ sb.AppendLine($" /// if ({className}.IsIconChar(\"□\")) {{ }}");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 전체 아이콘 이름 순회");
+ sb.AppendLine($" /// foreach (var name in {className}.GetAllIconNames()) {{ }}");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// // 아이콘 총 개수");
+ sb.AppendLine($" /// int count = {className}.Count;");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// UXML에서 사용하기:");
+ sb.AppendLine(" /// UXML에서 Material Icons를 사용하려면 USS에서 폰트를 설정하고, Label의 text에 유니코드 문자를 직접 입력합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// /* USS 파일 */");
+ sb.AppendLine(" /// .material-icon {");
+ sb.AppendLine(" /// -unity-font: resource('Fonts/Icons/MaterialSymbolsOutlined');");
+ sb.AppendLine(" /// font-size: 24px;");
+ sb.AppendLine(" /// }");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// C# 코드에서 UXML Label에 아이콘 적용:");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" /// var iconLabel = root.Q");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" public static class {className}");
+ sb.AppendLine(" {");
+ sb.AppendLine();
+ sb.AppendLine(" #region Font");
+ sb.AppendLine();
+ sb.AppendLine($" private const string FontResourcePath = \"{fontPath}\";");
+ sb.AppendLine(" private static Font? _cachedFont;");
+ sb.AppendLine(" private static StyleFontDefinition? _cachedFontDefinition;");
+ sb.AppendLine();
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 폰트를 동기로 로드합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 로드된 Font, 실패 시 null");
+ sb.AppendLine(" public static Font? LoadFont()");
+ sb.AppendLine(" {");
+ sb.AppendLine(" if (_cachedFont == null)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" _cachedFont = Resources.Load(FontResourcePath);");
+ sb.AppendLine(" }");
+ sb.AppendLine(" return _cachedFont;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 폰트를 비동기로 로드합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 취소 토큰");
+ sb.AppendLine(" /// 로드된 Font, 실패 시 null");
+ sb.AppendLine(" public static async UniTask LoadFontAsync(CancellationToken ct = default)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" if (_cachedFont != null)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" return _cachedFont;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+ sb.AppendLine(" var request = Resources.LoadAsync(FontResourcePath);");
+ sb.AppendLine(" await request.ToUniTask(cancellationToken: ct);");
+ sb.AppendLine();
+ sb.AppendLine(" _cachedFont = request.asset as Font;");
+ sb.AppendLine(" return _cachedFont;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// UI Toolkit용 StyleFontDefinition을 동기로 반환합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// StyleFontDefinition, 폰트 로드 실패 시 기본값");
+ sb.AppendLine(" public static StyleFontDefinition GetFontDefinition()");
+ sb.AppendLine(" {");
+ sb.AppendLine(" if (_cachedFontDefinition == null)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" var font = LoadFont();");
+ sb.AppendLine(" if (font != null)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" _cachedFontDefinition = new StyleFontDefinition(font);");
+ sb.AppendLine(" }");
+ sb.AppendLine(" }");
+ sb.AppendLine(" return _cachedFontDefinition ?? default;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// UI Toolkit용 StyleFontDefinition을 비동기로 반환합니다. (캐싱됨)");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 취소 토큰");
+ sb.AppendLine(" /// StyleFontDefinition, 폰트 로드 실패 시 기본값");
+ sb.AppendLine(" public static async UniTask GetFontDefinitionAsync(CancellationToken ct = default)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" if (_cachedFontDefinition == null)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" var font = await LoadFontAsync(ct);");
+ sb.AppendLine(" if (font != null)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" _cachedFontDefinition = new StyleFontDefinition(font);");
+ sb.AppendLine(" }");
+ sb.AppendLine(" }");
+ sb.AppendLine(" return _cachedFontDefinition ?? default;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// VisualElement에 아이콘 폰트 스타일을 동기로 적용합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 스타일을 적용할 요소");
+ sb.AppendLine(" /// 폰트 크기 (기본값: 24)");
+ sb.AppendLine(" public static void ApplyIconStyle(VisualElement element, int? fontSize = 24)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" element.style.unityFontDefinition = GetFontDefinition();");
+ sb.AppendLine(" if(fontSize != null) element.style.fontSize = fontSize.Value;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// VisualElement에 아이콘 폰트 스타일을 비동기로 적용합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 스타일을 적용할 요소");
+ sb.AppendLine(" /// 취소 토큰");
+ sb.AppendLine(" /// 폰트 크기 (기본값: 24)");
+ sb.AppendLine(" public static async UniTask ApplyIconStyleAsync(VisualElement element, CancellationToken ct = default, int fontSize = 24)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" element.style.unityFontDefinition = await GetFontDefinitionAsync(ct);");
+ sb.AppendLine(" element.style.fontSize = fontSize;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 폰트 캐시를 클리어합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" public static void ClearFontCache()");
+ sb.AppendLine(" {");
+ sb.AppendLine(" _cachedFont = null;");
+ sb.AppendLine(" _cachedFontDefinition = null;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+ sb.AppendLine(" #endregion");
+ sb.AppendLine();
+
+ // 아이콘 상수 생성
+ foreach (var (name, unicode) in icons)
+ {
+ var fieldName = ConvertToFieldName(name, usedNames);
+ var character = GetCharacterFromUnicode(unicode);
+ var escapedChar = EscapeForCSharp(character);
+
+ sb.AppendLine($" /// {name} (U+{unicode.ToUpper()})");
+ sb.AppendLine($" public const string {fieldName} = \"{escapedChar}\";");
+ }
+
+ sb.AppendLine();
+ sb.AppendLine(" #region Lookup");
+ sb.AppendLine();
+
+ // 이름으로 아이콘 조회 딕셔너리
+ sb.AppendLine(" private static readonly Dictionary _iconsByName = new()");
+ sb.AppendLine(" {");
+ foreach (var (name, unicode) in icons)
+ {
+ var character = GetCharacterFromUnicode(unicode);
+ var escapedChar = EscapeForCSharp(character);
+ sb.AppendLine($" [\"{name}\"] = \"{escapedChar}\",");
+ }
+ sb.AppendLine(" };");
+ sb.AppendLine();
+
+ // 조회 메서드
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 이름으로 유니코드 문자를 조회합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘 이름 (예: \"home\", \"settings\")");
+ sb.AppendLine(" /// 아이콘 문자, 없으면 빈 문자열");
+ sb.AppendLine(" public static string GetIcon(string iconName)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" // 실제 유니코드 문자가 아니라 이스케이프 문자열인 경우 변환");
+ sb.AppendLine(" if (iconName.StartsWith(\"\\u\") && iconName.Length == 6)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" try");
+ sb.AppendLine(" {");
+ sb.AppendLine(" var code = Convert.ToInt32(iconName.Substring(2), 16);");
+ sb.AppendLine(" iconName = char.ConvertFromUtf32(code);");
+ sb.AppendLine(" }");
+ sb.AppendLine(" catch");
+ sb.AppendLine(" {");
+ sb.AppendLine(" Debug.LogWarning($\"Failed to convert escape sequence: {iconName}\");");
+ sb.AppendLine(" }");
+ sb.AppendLine(" }");
+ sb.AppendLine(" ");
+ sb.AppendLine(" if(IsIconChar(iconName)) return iconName;");
+ sb.AppendLine(" return _iconsByName.TryGetValue(iconName.ToLower(), out var icon) ? icon : string.Empty;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 아이콘이 존재하는지 확인합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" public static bool HasIcon(string iconName) => _iconsByName.ContainsKey(iconName);");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 유니코드 문자로 아이콘이 존재하는지 확인합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" public static bool IsIconChar(string iconChar) => _iconsByName.Values.Contains(iconChar);");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 유니코드 문자로 아이콘 이름을 조회합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" public static string GetIconNameByChar(string iconChar)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" foreach (var kvp in _iconsByName)");
+ sb.AppendLine(" {");
+ sb.AppendLine(" if (string.Equals(kvp.Value, iconChar, StringComparison.OrdinalIgnoreCase)) return kvp.Key;");
+ sb.AppendLine(" }");
+ sb.AppendLine(" return string.Empty;");
+ sb.AppendLine(" }");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 모든 아이콘 이름 목록을 반환합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" public static IEnumerable GetAllIconNames() => _iconsByName.Keys;");
+ sb.AppendLine();
+
+ sb.AppendLine(" /// ");
+ sb.AppendLine(" /// 전체 아이콘 수를 반환합니다.");
+ sb.AppendLine(" /// ");
+ sb.AppendLine($" public static int Count => {icons.Count};");
+ sb.AppendLine();
+ sb.AppendLine(" #endregion");
+
+ sb.AppendLine(" }");
+ sb.AppendLine("}");
+
+ return sb.ToString();
+ }
+
+ private static string ConvertToFieldName(string iconName, HashSet usedNames)
+ {
+ var sb = new StringBuilder();
+ var words = iconName.Split('_', StringSplitOptions.RemoveEmptyEntries);
+
+ foreach (var word in words)
+ {
+ if (word.Length == 0) continue;
+
+ // 첫 글자 대문자, 나머지 소문자 (PascalCase)
+ sb.Append(char.ToUpper(word[0]));
+ if (word.Length > 1)
+ {
+ sb.Append(word.Substring(1).ToLower());
+ }
+ }
+
+ var result = sb.ToString();
+
+ // 숫자로 시작하면 앞에 _ 추가
+ if (result.Length > 0 && char.IsDigit(result[0]))
+ {
+ result = "_" + result;
+ }
+
+ // 빈 문자열이면 기본값
+ if (string.IsNullOrEmpty(result))
+ {
+ result = "_Icon";
+ }
+
+ // 중복 처리
+ var originalResult = result;
+ var counter = 2;
+ while (usedNames.Contains(result))
+ {
+ result = $"{originalResult}_{counter}";
+ counter++;
+ }
+
+ usedNames.Add(result);
+ return result;
+ }
+
+ private static string GetCharacterFromUnicode(string hexCode)
+ {
+ try
+ {
+ var codepoint = int.Parse(hexCode, NumberStyles.HexNumber);
+ return char.ConvertFromUtf32(codepoint);
+ }
+ catch
+ {
+ return "?";
+ }
+ }
+
+ private static string EscapeForCSharp(string str)
+ {
+ var sb = new StringBuilder();
+ foreach (var c in str)
+ {
+ // 유니코드 이스케이프 시퀀스로 변환
+ if (c > 127 || c < 32)
+ {
+ // Surrogate pair 처리
+ sb.Append($"\\u{(int)c:X4}");
+ }
+ else if (c == '"')
+ {
+ sb.Append("\\\"");
+ }
+ else if (c == '\\')
+ {
+ sb.Append("\\\\");
+ }
+ else
+ {
+ sb.Append(c);
+ }
+ }
+ return sb.ToString();
+ }
+ }
+}
diff --git a/Assets/Editor/UIToolkit/UTKMaterialIconsGenerator.cs.meta b/Assets/Editor/UIToolkit/UTKMaterialIconsGenerator.cs.meta
new file mode 100644
index 00000000..b0053c79
--- /dev/null
+++ b/Assets/Editor/UIToolkit/UTKMaterialIconsGenerator.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: a4f9ee471e14d684aa1d05c88ee24116
\ No newline at end of file
diff --git a/Assets/QuickOutline/Readme.txt b/Assets/QuickOutline/Readme.txt
deleted file mode 100644
index 183ae241..00000000
--- a/Assets/QuickOutline/Readme.txt
+++ /dev/null
@@ -1,37 +0,0 @@
-Quick Outline
-=============
-
-Developed by Chris Nolet (c) 2018
-
-
-Instructions
-------------
-
-To add an outline to an object, drag-and-drop the Outline.cs
-script onto the object. The outline materials will be loaded
-at runtime.
-
-You can also add outlines programmatically with:
-
- var outline = gameObject.AddComponent();
-
- outline.OutlineMode = Outline.Mode.OutlineAll;
- outline.OutlineColor = Color.yellow;
- outline.OutlineWidth = 5f;
-
-The outline script does a small amount of work in Awake().
-For best results, use outline.enabled to toggle the outline.
-Avoid removing and re-adding the component if possible.
-
-For large meshes, you may also like to enable 'Precompute
-Outline' in the editor. This will reduce the amount of work
-performed in Awake().
-
-
-Troubleshooting
----------------
-
-If the outline appears off-center, please try the following:
-
-1. Set 'Read/Write Enabled' on each model's import settings.
-2. Disable 'Optimize Mesh Data' in the player settings.
diff --git a/Assets/QuickOutline/Readme.txt.meta b/Assets/QuickOutline/Readme.txt.meta
deleted file mode 100644
index c3f61b93..00000000
--- a/Assets/QuickOutline/Readme.txt.meta
+++ /dev/null
@@ -1,16 +0,0 @@
-fileFormatVersion: 2
-guid: 5933bfd39d7a5b843a0ed821f85bca19
-timeCreated: 1522619008
-licenseType: Store
-TextScriptImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
-AssetOrigin:
- serializedVersion: 1
- productId: 115488
- packageName: Quick Outline
- packageVersion: 1.1
- assetPath: Assets/QuickOutline/Readme.txt
- uploadId: 485303
diff --git a/Assets/QuickOutline/Resources/Materials/OutlineFill.mat b/Assets/QuickOutline/Resources/Materials/OutlineFill.mat
deleted file mode 100644
index cb021646..00000000
--- a/Assets/QuickOutline/Resources/Materials/OutlineFill.mat
+++ /dev/null
@@ -1,25 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!21 &2100000
-Material:
- serializedVersion: 6
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_Name: OutlineFill
- m_Shader: {fileID: 4800000, guid: 4e76d4023d7e0411297c670f878973e2, type: 3}
- m_ShaderKeywords:
- m_LightmapFlags: 4
- m_EnableInstancingVariants: 0
- m_DoubleSidedGI: 0
- m_CustomRenderQueue: -1
- stringTagMap: {}
- disabledShaderPasses: []
- m_SavedProperties:
- serializedVersion: 3
- m_TexEnvs: []
- m_Floats:
- - _OutlineWidth: 2
- - _ZTest: 8
- m_Colors:
- - _OutlineColor: {r: 1, g: 1, b: 1, a: 1}
diff --git a/Assets/QuickOutline/Resources/Materials/OutlineFill.mat.meta b/Assets/QuickOutline/Resources/Materials/OutlineFill.mat.meta
deleted file mode 100644
index 5576b451..00000000
--- a/Assets/QuickOutline/Resources/Materials/OutlineFill.mat.meta
+++ /dev/null
@@ -1,17 +0,0 @@
-fileFormatVersion: 2
-guid: 311313efa011949e98b6761d652ad13c
-timeCreated: 1520576285
-licenseType: Store
-NativeFormatImporter:
- externalObjects: {}
- mainObjectFileID: 2100000
- userData:
- assetBundleName:
- assetBundleVariant:
-AssetOrigin:
- serializedVersion: 1
- productId: 115488
- packageName: Quick Outline
- packageVersion: 1.1
- assetPath: Assets/QuickOutline/Resources/Materials/OutlineFill.mat
- uploadId: 485303
diff --git a/Assets/QuickOutline/Resources/Materials/OutlineMask.mat b/Assets/QuickOutline/Resources/Materials/OutlineMask.mat
deleted file mode 100644
index 80d49faa..00000000
--- a/Assets/QuickOutline/Resources/Materials/OutlineMask.mat
+++ /dev/null
@@ -1,23 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!21 &2100000
-Material:
- serializedVersion: 6
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_Name: OutlineMask
- m_Shader: {fileID: 4800000, guid: 341b058cd7dee4f5cba5cc59a513619e, type: 3}
- m_ShaderKeywords:
- m_LightmapFlags: 4
- m_EnableInstancingVariants: 0
- m_DoubleSidedGI: 0
- m_CustomRenderQueue: -1
- stringTagMap: {}
- disabledShaderPasses: []
- m_SavedProperties:
- serializedVersion: 3
- m_TexEnvs: []
- m_Floats:
- - _ZTest: 8
- m_Colors: []
diff --git a/Assets/QuickOutline/Resources/Materials/OutlineMask.mat.meta b/Assets/QuickOutline/Resources/Materials/OutlineMask.mat.meta
deleted file mode 100644
index 8ad0794d..00000000
--- a/Assets/QuickOutline/Resources/Materials/OutlineMask.mat.meta
+++ /dev/null
@@ -1,17 +0,0 @@
-fileFormatVersion: 2
-guid: 106f3ff43a17d4967a2b64c7a92e49ec
-timeCreated: 1520576276
-licenseType: Store
-NativeFormatImporter:
- externalObjects: {}
- mainObjectFileID: 2100000
- userData:
- assetBundleName:
- assetBundleVariant:
-AssetOrigin:
- serializedVersion: 1
- productId: 115488
- packageName: Quick Outline
- packageVersion: 1.1
- assetPath: Assets/QuickOutline/Resources/Materials/OutlineMask.mat
- uploadId: 485303
diff --git a/Assets/QuickOutline/Resources/Shaders/OutlineFill.shader b/Assets/QuickOutline/Resources/Shaders/OutlineFill.shader
deleted file mode 100644
index f546473e..00000000
--- a/Assets/QuickOutline/Resources/Shaders/OutlineFill.shader
+++ /dev/null
@@ -1,81 +0,0 @@
-//
-// OutlineFill.shader
-// QuickOutline
-//
-// Created by Chris Nolet on 2/21/18.
-// Copyright © 2018 Chris Nolet. All rights reserved.
-//
-
-Shader "Custom/Outline Fill" {
- Properties {
- [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
-
- _OutlineColor("Outline Color", Color) = (1, 1, 1, 1)
- _OutlineWidth("Outline Width", Range(0, 10)) = 2
- }
-
- SubShader {
- Tags {
- "Queue" = "Transparent+110"
- "RenderType" = "Transparent"
- "DisableBatching" = "True"
- }
-
- Pass {
- Name "Fill"
- Cull Off
- ZTest [_ZTest]
- ZWrite Off
- Blend SrcAlpha OneMinusSrcAlpha
- ColorMask RGB
-
- Stencil {
- Ref 1
- Comp NotEqual
- }
-
- CGPROGRAM
- #include "UnityCG.cginc"
-
- #pragma vertex vert
- #pragma fragment frag
-
- struct appdata {
- float4 vertex : POSITION;
- float3 normal : NORMAL;
- float3 smoothNormal : TEXCOORD3;
- UNITY_VERTEX_INPUT_INSTANCE_ID
- };
-
- struct v2f {
- float4 position : SV_POSITION;
- fixed4 color : COLOR;
- UNITY_VERTEX_OUTPUT_STEREO
- };
-
- uniform fixed4 _OutlineColor;
- uniform float _OutlineWidth;
-
- v2f vert(appdata input) {
- v2f output;
-
- UNITY_SETUP_INSTANCE_ID(input);
- UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
-
- float3 normal = any(input.smoothNormal) ? input.smoothNormal : input.normal;
- float3 viewPosition = UnityObjectToViewPos(input.vertex);
- float3 viewNormal = normalize(mul((float3x3)UNITY_MATRIX_IT_MV, normal));
-
- output.position = UnityViewToClipPos(viewPosition + viewNormal * -viewPosition.z * _OutlineWidth / 1000.0);
- output.color = _OutlineColor;
-
- return output;
- }
-
- fixed4 frag(v2f input) : SV_Target {
- return input.color;
- }
- ENDCG
- }
- }
-}
diff --git a/Assets/QuickOutline/Resources/Shaders/OutlineFill.shader.meta b/Assets/QuickOutline/Resources/Shaders/OutlineFill.shader.meta
deleted file mode 100644
index b982c4e8..00000000
--- a/Assets/QuickOutline/Resources/Shaders/OutlineFill.shader.meta
+++ /dev/null
@@ -1,17 +0,0 @@
-fileFormatVersion: 2
-guid: 4e76d4023d7e0411297c670f878973e2
-timeCreated: 1520575782
-licenseType: Store
-ShaderImporter:
- externalObjects: {}
- defaultTextures: []
- userData:
- assetBundleName:
- assetBundleVariant:
-AssetOrigin:
- serializedVersion: 1
- productId: 115488
- packageName: Quick Outline
- packageVersion: 1.1
- assetPath: Assets/QuickOutline/Resources/Shaders/OutlineFill.shader
- uploadId: 485303
diff --git a/Assets/QuickOutline/Resources/Shaders/OutlineMask.shader b/Assets/QuickOutline/Resources/Shaders/OutlineMask.shader
deleted file mode 100644
index 530d8c05..00000000
--- a/Assets/QuickOutline/Resources/Shaders/OutlineMask.shader
+++ /dev/null
@@ -1,33 +0,0 @@
-//
-// OutlineMask.shader
-// QuickOutline
-//
-// Created by Chris Nolet on 2/21/18.
-// Copyright © 2018 Chris Nolet. All rights reserved.
-//
-
-Shader "Custom/Outline Mask" {
- Properties {
- [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("ZTest", Float) = 0
- }
-
- SubShader {
- Tags {
- "Queue" = "Transparent+100"
- "RenderType" = "Transparent"
- }
-
- Pass {
- Name "Mask"
- Cull Off
- ZTest [_ZTest]
- ZWrite Off
- ColorMask 0
-
- Stencil {
- Ref 1
- Pass Replace
- }
- }
- }
-}
diff --git a/Assets/QuickOutline/Resources/Shaders/OutlineMask.shader.meta b/Assets/QuickOutline/Resources/Shaders/OutlineMask.shader.meta
deleted file mode 100644
index a20bfde5..00000000
--- a/Assets/QuickOutline/Resources/Shaders/OutlineMask.shader.meta
+++ /dev/null
@@ -1,17 +0,0 @@
-fileFormatVersion: 2
-guid: 341b058cd7dee4f5cba5cc59a513619e
-timeCreated: 1520575773
-licenseType: Store
-ShaderImporter:
- externalObjects: {}
- defaultTextures: []
- userData:
- assetBundleName:
- assetBundleVariant:
-AssetOrigin:
- serializedVersion: 1
- productId: 115488
- packageName: Quick Outline
- packageVersion: 1.1
- assetPath: Assets/QuickOutline/Resources/Shaders/OutlineMask.shader
- uploadId: 485303
diff --git a/Assets/QuickOutline/Samples.meta b/Assets/QuickOutline/Samples.meta
deleted file mode 100644
index 7d6c23d0..00000000
--- a/Assets/QuickOutline/Samples.meta
+++ /dev/null
@@ -1,10 +0,0 @@
-fileFormatVersion: 2
-guid: 932f8193e5396db4babac4756c406dee
-folderAsset: yes
-timeCreated: 1522559213
-licenseType: Store
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/QuickOutline/Samples/Materials.meta b/Assets/QuickOutline/Samples/Materials.meta
deleted file mode 100644
index cb148197..00000000
--- a/Assets/QuickOutline/Samples/Materials.meta
+++ /dev/null
@@ -1,10 +0,0 @@
-fileFormatVersion: 2
-guid: 2b0040b0ed7fbd64693e9195d13d25f9
-folderAsset: yes
-timeCreated: 1522615600
-licenseType: Store
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/QuickOutline/Samples/Materials/Plane.mat b/Assets/QuickOutline/Samples/Materials/Plane.mat
deleted file mode 100644
index 06fa1aa0..00000000
--- a/Assets/QuickOutline/Samples/Materials/Plane.mat
+++ /dev/null
@@ -1,76 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!21 &2100000
-Material:
- serializedVersion: 6
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_Name: Plane
- m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
- m_ShaderKeywords:
- m_LightmapFlags: 4
- m_EnableInstancingVariants: 0
- m_DoubleSidedGI: 0
- m_CustomRenderQueue: -1
- stringTagMap: {}
- disabledShaderPasses: []
- m_SavedProperties:
- serializedVersion: 3
- m_TexEnvs:
- - _BumpMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _DetailAlbedoMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _DetailMask:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _DetailNormalMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _EmissionMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _MainTex:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _MetallicGlossMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _OcclusionMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _ParallaxMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- m_Floats:
- - _BumpScale: 1
- - _Cutoff: 0.5
- - _DetailNormalMapScale: 1
- - _DstBlend: 0
- - _GlossMapScale: 1
- - _Glossiness: 0.5
- - _GlossyReflections: 1
- - _Metallic: 1
- - _Mode: 0
- - _OcclusionStrength: 1
- - _Parallax: 0.02
- - _SmoothnessTextureChannel: 0
- - _SpecularHighlights: 1
- - _SrcBlend: 1
- - _UVSec: 0
- - _ZWrite: 1
- m_Colors:
- - _Color: {r: 0.2509804, g: 0.2509804, b: 0.5019608, a: 1}
- - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
diff --git a/Assets/QuickOutline/Samples/Materials/Plane.mat.meta b/Assets/QuickOutline/Samples/Materials/Plane.mat.meta
deleted file mode 100644
index 64e3c3ca..00000000
--- a/Assets/QuickOutline/Samples/Materials/Plane.mat.meta
+++ /dev/null
@@ -1,17 +0,0 @@
-fileFormatVersion: 2
-guid: f58cf65ea995c4b45be95713bdea8134
-timeCreated: 1522540975
-licenseType: Store
-NativeFormatImporter:
- externalObjects: {}
- mainObjectFileID: 2100000
- userData:
- assetBundleName:
- assetBundleVariant:
-AssetOrigin:
- serializedVersion: 1
- productId: 115488
- packageName: Quick Outline
- packageVersion: 1.1
- assetPath: Assets/QuickOutline/Samples/Materials/Plane.mat
- uploadId: 485303
diff --git a/Assets/QuickOutline/Samples/Scenes.meta b/Assets/QuickOutline/Samples/Scenes.meta
deleted file mode 100644
index 7f5c774b..00000000
--- a/Assets/QuickOutline/Samples/Scenes.meta
+++ /dev/null
@@ -1,10 +0,0 @@
-fileFormatVersion: 2
-guid: 3916faa55c6a94248959031ee0ad499f
-folderAsset: yes
-timeCreated: 1522615614
-licenseType: Store
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/QuickOutline/Samples/Scenes/QuickOutline.unity b/Assets/QuickOutline/Samples/Scenes/QuickOutline.unity
deleted file mode 100644
index 33911b7f..00000000
--- a/Assets/QuickOutline/Samples/Scenes/QuickOutline.unity
+++ /dev/null
@@ -1,778 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!29 &1
-OcclusionCullingSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 2
- m_OcclusionBakeSettings:
- smallestOccluder: 5
- smallestHole: 0.25
- backfaceThreshold: 100
- m_SceneGUID: 00000000000000000000000000000000
- m_OcclusionCullingData: {fileID: 0}
---- !u!104 &2
-RenderSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 8
- m_Fog: 0
- m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- m_FogMode: 3
- m_FogDensity: 0.01
- m_LinearFogStart: 0
- m_LinearFogEnd: 300
- m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
- m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
- m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
- m_AmbientIntensity: 1
- m_AmbientMode: 0
- m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
- m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
- m_HaloStrength: 0.5
- m_FlareStrength: 1
- m_FlareFadeSpeed: 3
- m_HaloTexture: {fileID: 0}
- m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
- m_DefaultReflectionMode: 0
- m_DefaultReflectionResolution: 128
- m_ReflectionBounces: 1
- m_ReflectionIntensity: 1
- m_CustomReflection: {fileID: 0}
- m_Sun: {fileID: 820273532}
- m_IndirectSpecularColor: {r: 0.18028383, g: 0.22571409, b: 0.30692282, a: 1}
---- !u!157 &3
-LightmapSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 9
- m_GIWorkflowMode: 0
- m_GISettings:
- serializedVersion: 2
- m_BounceScale: 1
- m_IndirectOutputScale: 1
- m_AlbedoBoost: 1
- m_TemporalCoherenceThreshold: 1
- m_EnvironmentLightingMode: 0
- m_EnableBakedLightmaps: 1
- m_EnableRealtimeLightmaps: 1
- m_LightmapEditorSettings:
- serializedVersion: 8
- m_Resolution: 2
- m_BakeResolution: 40
- m_TextureWidth: 1024
- m_TextureHeight: 1024
- m_AO: 0
- m_AOMaxDistance: 1
- m_CompAOExponent: 1
- m_CompAOExponentDirect: 0
- m_Padding: 2
- m_LightmapParameters: {fileID: 0}
- m_LightmapsBakeMode: 1
- m_TextureCompression: 1
- m_FinalGather: 0
- m_FinalGatherFiltering: 1
- m_FinalGatherRayCount: 256
- m_ReflectionCompression: 2
- m_MixedBakeMode: 3
- m_BakeBackend: 0
- m_PVRSampling: 1
- m_PVRDirectSampleCount: 32
- m_PVRSampleCount: 500
- m_PVRBounces: 2
- m_PVRFiltering: 0
- m_PVRFilteringMode: 1
- m_PVRCulling: 1
- m_PVRFilteringGaussRadiusDirect: 1
- m_PVRFilteringGaussRadiusIndirect: 5
- m_PVRFilteringGaussRadiusAO: 2
- m_PVRFilteringAtrousColorSigma: 1
- m_PVRFilteringAtrousNormalSigma: 1
- m_PVRFilteringAtrousPositionSigma: 1
- m_LightingDataAsset: {fileID: 0}
- m_ShadowMaskMode: 2
---- !u!196 &4
-NavMeshSettings:
- serializedVersion: 2
- m_ObjectHideFlags: 0
- m_BuildSettings:
- serializedVersion: 2
- agentTypeID: 0
- agentRadius: 0.5
- agentHeight: 2
- agentSlope: 45
- agentClimb: 0.4
- ledgeDropHeight: 0
- maxJumpAcrossDistance: 0
- minRegionArea: 2
- manualCellSize: 0
- cellSize: 0.16666667
- manualTileSize: 0
- tileSize: 256
- accuratePlacement: 0
- m_NavMeshData: {fileID: 0}
---- !u!1 &122269556
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 122269561}
- - component: {fileID: 122269560}
- - component: {fileID: 122269558}
- - component: {fileID: 122269557}
- m_Layer: 0
- m_Name: Main Camera
- m_TagString: MainCamera
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!81 &122269557
-AudioListener:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 122269556}
- m_Enabled: 1
---- !u!124 &122269558
-Behaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 122269556}
- m_Enabled: 1
---- !u!20 &122269560
-Camera:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 122269556}
- m_Enabled: 1
- serializedVersion: 2
- m_ClearFlags: 1
- m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
- m_NormalizedViewPortRect:
- serializedVersion: 2
- x: 0
- y: 0
- width: 1
- height: 1
- near clip plane: 0.3
- far clip plane: 1000
- field of view: 60
- orthographic: 0
- orthographic size: 5
- m_Depth: -1
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_RenderingPath: -1
- m_TargetTexture: {fileID: 0}
- m_TargetDisplay: 0
- m_TargetEye: 3
- m_HDR: 1
- m_AllowMSAA: 1
- m_ForceIntoRT: 0
- m_OcclusionCulling: 1
- m_StereoConvergence: 10
- m_StereoSeparation: 0.022
- m_StereoMirrorMode: 0
---- !u!4 &122269561
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 122269556}
- m_LocalRotation: {x: 0.3420201, y: 0, z: 0, w: 0.9396927}
- m_LocalPosition: {x: 0, y: 3, z: -4}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 40, y: 0, z: 0}
---- !u!1 &124162633
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 124162634}
- - component: {fileID: 124162638}
- - component: {fileID: 124162636}
- - component: {fileID: 124162635}
- m_Layer: 0
- m_Name: Outline Hidden
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &124162634
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 124162633}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: -2, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 0.5, z: 1}
- m_Children: []
- m_Father: {fileID: 935070115}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &124162635
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 124162633}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- outlineMode: 2
- outlineColor: {r: 1, g: 0.2509804, b: 0.2509804, a: 1}
- outlineWidth: 6
---- !u!23 &124162636
-MeshRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 124162633}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_Materials:
- - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_PreserveUVs: 1
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
---- !u!33 &124162638
-MeshFilter:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 124162633}
- m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
---- !u!1 &796971894
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 796971895}
- - component: {fileID: 796971899}
- - component: {fileID: 796971897}
- - component: {fileID: 796971896}
- m_Layer: 0
- m_Name: Outline And Silhouette
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &796971895
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 796971894}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 2, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 0.5, z: 1}
- m_Children: []
- m_Father: {fileID: 935070115}
- m_RootOrder: 3
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &796971896
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 796971894}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- outlineMode: 3
- outlineColor: {r: 0.2509804, g: 1, b: 1, a: 1}
- outlineWidth: 6
---- !u!23 &796971897
-MeshRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 796971894}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_Materials:
- - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_PreserveUVs: 1
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
---- !u!33 &796971899
-MeshFilter:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 796971894}
- m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}
---- !u!1 &820273531
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 820273533}
- - component: {fileID: 820273532}
- m_Layer: 0
- m_Name: Directional Light
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!108 &820273532
-Light:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 820273531}
- m_Enabled: 1
- serializedVersion: 8
- m_Type: 1
- m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
- m_Intensity: 1
- m_Range: 10
- m_SpotAngle: 30
- m_CookieSize: 10
- m_Shadows:
- m_Type: 2
- m_Resolution: -1
- m_CustomResolution: -1
- m_Strength: 1
- m_Bias: 0.05
- m_NormalBias: 0.4
- m_NearPlane: 0.2
- m_Cookie: {fileID: 0}
- m_DrawHalo: 0
- m_Flare: {fileID: 0}
- m_RenderMode: 0
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_Lightmapping: 4
- m_AreaSize: {x: 1, y: 1}
- m_BounceIntensity: 1
- m_ColorTemperature: 6570
- m_UseColorTemperature: 0
- m_ShadowRadius: 0
- m_ShadowAngle: 0
---- !u!4 &820273533
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 820273531}
- m_LocalRotation: {x: 0.40821788, y: 0.23456976, z: -0.10938167, w: 0.8754261}
- m_LocalPosition: {x: 0, y: 3, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 50, y: 30, z: 0}
---- !u!1 &935070114
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 935070115}
- m_Layer: 0
- m_Name: Outlined Objects
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &935070115
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 935070114}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 1781008194}
- - {fileID: 124162634}
- - {fileID: 1346396411}
- - {fileID: 796971895}
- - {fileID: 1083549395}
- m_Father: {fileID: 0}
- m_RootOrder: 2
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1083549394
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1083549395}
- - component: {fileID: 1083549399}
- - component: {fileID: 1083549397}
- - component: {fileID: 1083549396}
- m_Layer: 0
- m_Name: Outline Visible
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &1083549395
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1083549394}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 4, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 935070115}
- m_RootOrder: 4
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &1083549396
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1083549394}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- outlineMode: 1
- outlineColor: {r: 0.2509804, g: 1, b: 0.2509804, a: 1}
- outlineWidth: 6
---- !u!23 &1083549397
-MeshRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1083549394}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_Materials:
- - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_PreserveUVs: 1
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
---- !u!33 &1083549399
-MeshFilter:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1083549394}
- m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
---- !u!1 &1346396410
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1346396411}
- - component: {fileID: 1346396415}
- - component: {fileID: 1346396413}
- - component: {fileID: 1346396412}
- m_Layer: 0
- m_Name: Outline All
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &1346396411
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1346396410}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 935070115}
- m_RootOrder: 2
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &1346396412
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1346396410}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- outlineMode: 0
- outlineColor: {r: 1, g: 1, b: 0.2509804, a: 1}
- outlineWidth: 6
---- !u!23 &1346396413
-MeshRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1346396410}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_Materials:
- - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_PreserveUVs: 1
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
---- !u!33 &1346396415
-MeshFilter:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1346396410}
- m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
---- !u!1 &1580478821
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1580478825}
- - component: {fileID: 1580478824}
- - component: {fileID: 1580478822}
- m_Layer: 0
- m_Name: Plane
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!23 &1580478822
-MeshRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1580478821}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_Materials:
- - {fileID: 2100000, guid: f58cf65ea995c4b45be95713bdea8134, type: 2}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_PreserveUVs: 1
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
---- !u!33 &1580478824
-MeshFilter:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1580478821}
- m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
---- !u!4 &1580478825
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1580478821}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 10, y: 1, z: 10}
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 3
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1781008193
-GameObject:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- serializedVersion: 5
- m_Component:
- - component: {fileID: 1781008194}
- - component: {fileID: 1781008198}
- - component: {fileID: 1781008196}
- - component: {fileID: 1781008195}
- m_Layer: 0
- m_Name: Silhouette Only
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!4 &1781008194
-Transform:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1781008193}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: -4, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 935070115}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!114 &1781008195
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1781008193}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 5fea29bb7c508c244a1f805a5fd3fc4d, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- outlineMode: 4
- outlineColor: {r: 1, g: 1, b: 1, a: 1}
- outlineWidth: 6
---- !u!23 &1781008196
-MeshRenderer:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1781008193}
- m_Enabled: 1
- m_CastShadows: 1
- m_ReceiveShadows: 1
- m_MotionVectors: 1
- m_LightProbeUsage: 1
- m_ReflectionProbeUsage: 1
- m_Materials:
- - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_PreserveUVs: 1
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_SelectedEditorRenderState: 3
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
---- !u!33 &1781008198
-MeshFilter:
- m_ObjectHideFlags: 0
- m_PrefabParentObject: {fileID: 0}
- m_PrefabInternal: {fileID: 0}
- m_GameObject: {fileID: 1781008193}
- m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/QuickOutline/Samples/Scenes/QuickOutline.unity.meta b/Assets/QuickOutline/Samples/Scenes/QuickOutline.unity.meta
deleted file mode 100644
index f1107a5c..00000000
--- a/Assets/QuickOutline/Samples/Scenes/QuickOutline.unity.meta
+++ /dev/null
@@ -1,16 +0,0 @@
-fileFormatVersion: 2
-guid: f23712c79adc910408e872b127e825cf
-timeCreated: 1522615825
-licenseType: Store
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
-AssetOrigin:
- serializedVersion: 1
- productId: 115488
- packageName: Quick Outline
- packageVersion: 1.1
- assetPath: Assets/QuickOutline/Samples/Scenes/QuickOutline.unity
- uploadId: 485303
diff --git a/Assets/QuickOutline/Scripts.meta b/Assets/QuickOutline/Scripts.meta
deleted file mode 100644
index 2f7793d8..00000000
--- a/Assets/QuickOutline/Scripts.meta
+++ /dev/null
@@ -1,10 +0,0 @@
-fileFormatVersion: 2
-guid: 3ddbd65d69a9f0b48bab4fe96a1fe099
-folderAsset: yes
-timeCreated: 1522559122
-licenseType: Store
-DefaultImporter:
- externalObjects: {}
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/QuickOutline/Scripts/Outline.cs b/Assets/QuickOutline/Scripts/Outline.cs
deleted file mode 100644
index 26d87882..00000000
--- a/Assets/QuickOutline/Scripts/Outline.cs
+++ /dev/null
@@ -1,309 +0,0 @@
-//
-// Outline.cs
-// QuickOutline
-//
-// Created by Chris Nolet on 3/30/18.
-// Copyright © 2018 Chris Nolet. All rights reserved.
-//
-
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using UnityEngine;
-
-[DisallowMultipleComponent]
-
-public class Outline : MonoBehaviour {
- private static HashSet registeredMeshes = new HashSet();
-
- public enum Mode {
- OutlineAll,
- OutlineVisible,
- OutlineHidden,
- OutlineAndSilhouette,
- SilhouetteOnly
- }
-
- public Mode OutlineMode {
- get { return outlineMode; }
- set {
- outlineMode = value;
- needsUpdate = true;
- }
- }
-
- public Color OutlineColor {
- get { return outlineColor; }
- set {
- outlineColor = value;
- needsUpdate = true;
- }
- }
-
- public float OutlineWidth {
- get { return outlineWidth; }
- set {
- outlineWidth = value;
- needsUpdate = true;
- }
- }
-
- [Serializable]
- private class ListVector3 {
- public List data;
- }
-
- [SerializeField]
- private Mode outlineMode;
-
- [SerializeField]
- private Color outlineColor = Color.white;
-
- [SerializeField, Range(0f, 10f)]
- private float outlineWidth = 2f;
-
- [Header("Optional")]
-
- [SerializeField, Tooltip("Precompute enabled: Per-vertex calculations are performed in the editor and serialized with the object. "
- + "Precompute disabled: Per-vertex calculations are performed at runtime in Awake(). This may cause a pause for large meshes.")]
- private bool precomputeOutline;
-
- [SerializeField, HideInInspector]
- private List bakeKeys = new List();
-
- [SerializeField, HideInInspector]
- private List bakeValues = new List();
-
- private Renderer[] renderers;
- private Material outlineMaskMaterial;
- private Material outlineFillMaterial;
-
- private bool needsUpdate;
-
- void Awake() {
-
- // Cache renderers
- renderers = GetComponentsInChildren();
-
- // Instantiate outline materials
- outlineMaskMaterial = Instantiate(Resources.Load(@"Materials/OutlineMask"));
- outlineFillMaterial = Instantiate(Resources.Load(@"Materials/OutlineFill"));
-
- outlineMaskMaterial.name = "OutlineMask (Instance)";
- outlineFillMaterial.name = "OutlineFill (Instance)";
-
- // Retrieve or generate smooth normals
- LoadSmoothNormals();
-
- // Apply material properties immediately
- needsUpdate = true;
- }
-
- void OnEnable() {
- foreach (var renderer in renderers) {
-
- // Append outline shaders
- var materials = renderer.sharedMaterials.ToList();
-
- materials.Add(outlineMaskMaterial);
- materials.Add(outlineFillMaterial);
-
- renderer.materials = materials.ToArray();
- }
- }
-
- void OnValidate() {
-
- // Update material properties
- needsUpdate = true;
-
- // Clear cache when baking is disabled or corrupted
- if (!precomputeOutline && bakeKeys.Count != 0 || bakeKeys.Count != bakeValues.Count) {
- bakeKeys.Clear();
- bakeValues.Clear();
- }
-
- // Generate smooth normals when baking is enabled
- if (precomputeOutline && bakeKeys.Count == 0) {
- Bake();
- }
- }
-
- void Update() {
- if (needsUpdate) {
- needsUpdate = false;
-
- UpdateMaterialProperties();
- }
- }
-
- void OnDisable() {
- foreach (var renderer in renderers) {
-
- // Remove outline shaders
- var materials = renderer.sharedMaterials.ToList();
-
- materials.Remove(outlineMaskMaterial);
- materials.Remove(outlineFillMaterial);
-
- renderer.materials = materials.ToArray();
- }
- }
-
- void OnDestroy() {
-
- // Destroy material instances
- Destroy(outlineMaskMaterial);
- Destroy(outlineFillMaterial);
- }
-
- void Bake() {
-
- // Generate smooth normals for each mesh
- var bakedMeshes = new HashSet();
-
- foreach (var meshFilter in GetComponentsInChildren()) {
-
- // Skip duplicates
- if (!bakedMeshes.Add(meshFilter.sharedMesh)) {
- continue;
- }
-
- // Serialize smooth normals
- var smoothNormals = SmoothNormals(meshFilter.sharedMesh);
-
- bakeKeys.Add(meshFilter.sharedMesh);
- bakeValues.Add(new ListVector3() { data = smoothNormals });
- }
- }
-
- void LoadSmoothNormals() {
-
- // Retrieve or generate smooth normals
- foreach (var meshFilter in GetComponentsInChildren()) {
-
- // Skip if smooth normals have already been adopted
- if (!registeredMeshes.Add(meshFilter.sharedMesh)) {
- continue;
- }
-
- // Retrieve or generate smooth normals
- var index = bakeKeys.IndexOf(meshFilter.sharedMesh);
- var smoothNormals = (index >= 0) ? bakeValues[index].data : SmoothNormals(meshFilter.sharedMesh);
-
- // Store smooth normals in UV3
- meshFilter.sharedMesh.SetUVs(3, smoothNormals);
-
- // Combine submeshes
- var renderer = meshFilter.GetComponent();
-
- if (renderer != null) {
- CombineSubmeshes(meshFilter.sharedMesh, renderer.sharedMaterials);
- }
- }
-
- // Clear UV3 on skinned mesh renderers
- foreach (var skinnedMeshRenderer in GetComponentsInChildren()) {
-
- // Skip if UV3 has already been reset
- if (!registeredMeshes.Add(skinnedMeshRenderer.sharedMesh)) {
- continue;
- }
-
- // Clear UV3
- skinnedMeshRenderer.sharedMesh.uv4 = new Vector2[skinnedMeshRenderer.sharedMesh.vertexCount];
-
- // Combine submeshes
- CombineSubmeshes(skinnedMeshRenderer.sharedMesh, skinnedMeshRenderer.sharedMaterials);
- }
- }
-
- List SmoothNormals(Mesh mesh) {
-
- // Group vertices by location
- var groups = mesh.vertices.Select((vertex, index) => new KeyValuePair(vertex, index)).GroupBy(pair => pair.Key);
-
- // Copy normals to a new list
- var smoothNormals = new List(mesh.normals);
-
- // Average normals for grouped vertices
- foreach (var group in groups) {
-
- // Skip single vertices
- if (group.Count() == 1) {
- continue;
- }
-
- // Calculate the average normal
- var smoothNormal = Vector3.zero;
-
- foreach (var pair in group) {
- smoothNormal += smoothNormals[pair.Value];
- }
-
- smoothNormal.Normalize();
-
- // Assign smooth normal to each vertex
- foreach (var pair in group) {
- smoothNormals[pair.Value] = smoothNormal;
- }
- }
-
- return smoothNormals;
- }
-
- void CombineSubmeshes(Mesh mesh, Material[] materials) {
-
- // Skip meshes with a single submesh
- if (mesh.subMeshCount == 1) {
- return;
- }
-
- // Skip if submesh count exceeds material count
- if (mesh.subMeshCount > materials.Length) {
- return;
- }
-
- // Append combined submesh
- mesh.subMeshCount++;
- mesh.SetTriangles(mesh.triangles, mesh.subMeshCount - 1);
- }
-
- void UpdateMaterialProperties() {
-
- // Apply properties according to mode
- outlineFillMaterial.SetColor("_OutlineColor", outlineColor);
-
- switch (outlineMode) {
- case Mode.OutlineAll:
- outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
- outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
- outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
- break;
-
- case Mode.OutlineVisible:
- outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
- outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
- outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
- break;
-
- case Mode.OutlineHidden:
- outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
- outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Greater);
- outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
- break;
-
- case Mode.OutlineAndSilhouette:
- outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
- outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Always);
- outlineFillMaterial.SetFloat("_OutlineWidth", outlineWidth);
- break;
-
- case Mode.SilhouetteOnly:
- outlineMaskMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.LessEqual);
- outlineFillMaterial.SetFloat("_ZTest", (float)UnityEngine.Rendering.CompareFunction.Greater);
- outlineFillMaterial.SetFloat("_OutlineWidth", 0f);
- break;
- }
- }
-}
diff --git a/Assets/QuickOutline/Scripts/Outline.cs.meta b/Assets/QuickOutline/Scripts/Outline.cs.meta
deleted file mode 100644
index 3c3932c8..00000000
--- a/Assets/QuickOutline/Scripts/Outline.cs.meta
+++ /dev/null
@@ -1,20 +0,0 @@
-fileFormatVersion: 2
-guid: 5fea29bb7c508c244a1f805a5fd3fc4d
-timeCreated: 1522369084
-licenseType: Store
-MonoImporter:
- externalObjects: {}
- serializedVersion: 2
- defaultReferences: []
- executionOrder: 0
- icon: {instanceID: 0}
- userData:
- assetBundleName:
- assetBundleVariant:
-AssetOrigin:
- serializedVersion: 1
- productId: 115488
- packageName: Quick Outline
- packageVersion: 1.1
- assetPath: Assets/QuickOutline/Scripts/Outline.cs
- uploadId: 485303
diff --git a/Assets/Resources/AI-Game-Developer-Config.json b/Assets/Resources/AI-Game-Developer-Config.json
new file mode 100644
index 00000000..2b3cf054
--- /dev/null
+++ b/Assets/Resources/AI-Game-Developer-Config.json
@@ -0,0 +1,423 @@
+{
+ "logLevel": 3,
+ "keepServerRunning": true,
+ "transportMethod": 2,
+ "tools": [
+ {
+ "name": "assets-copy",
+ "enabled": true
+ },
+ {
+ "name": "assets-create-folder",
+ "enabled": true
+ },
+ {
+ "name": "assets-delete",
+ "enabled": true
+ },
+ {
+ "name": "assets-find",
+ "enabled": true
+ },
+ {
+ "name": "assets-find-built-in",
+ "enabled": true
+ },
+ {
+ "name": "assets-get-data",
+ "enabled": true
+ },
+ {
+ "name": "assets-material-create",
+ "enabled": true
+ },
+ {
+ "name": "assets-modify",
+ "enabled": true
+ },
+ {
+ "name": "assets-move",
+ "enabled": true
+ },
+ {
+ "name": "assets-refresh",
+ "enabled": true
+ },
+ {
+ "name": "assets-prefab-close",
+ "enabled": true
+ },
+ {
+ "name": "assets-prefab-create",
+ "enabled": true
+ },
+ {
+ "name": "assets-prefab-instantiate",
+ "enabled": true
+ },
+ {
+ "name": "assets-prefab-open",
+ "enabled": true
+ },
+ {
+ "name": "assets-prefab-save",
+ "enabled": true
+ },
+ {
+ "name": "assets-shader-list-all",
+ "enabled": true
+ },
+ {
+ "name": "console-get-logs",
+ "enabled": true
+ },
+ {
+ "name": "editor-application-get-state",
+ "enabled": true
+ },
+ {
+ "name": "editor-application-set-state",
+ "enabled": true
+ },
+ {
+ "name": "editor-selection-get",
+ "enabled": true
+ },
+ {
+ "name": "editor-selection-set",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-component-add",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-component-destroy",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-component-get",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-component-list-all",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-component-modify",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-create",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-destroy",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-duplicate",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-find",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-modify",
+ "enabled": true
+ },
+ {
+ "name": "gameobject-set-parent",
+ "enabled": true
+ },
+ {
+ "name": "object-get-data",
+ "enabled": true
+ },
+ {
+ "name": "object-modify",
+ "enabled": true
+ },
+ {
+ "name": "package-add",
+ "enabled": true
+ },
+ {
+ "name": "package-list",
+ "enabled": true
+ },
+ {
+ "name": "package-remove",
+ "enabled": true
+ },
+ {
+ "name": "package-search",
+ "enabled": true
+ },
+ {
+ "name": "reflection-method-call",
+ "enabled": true
+ },
+ {
+ "name": "reflection-method-find",
+ "enabled": true
+ },
+ {
+ "name": "scene-create",
+ "enabled": true
+ },
+ {
+ "name": "scene-get-data",
+ "enabled": true
+ },
+ {
+ "name": "scene-list-opened",
+ "enabled": true
+ },
+ {
+ "name": "scene-open",
+ "enabled": true
+ },
+ {
+ "name": "scene-save",
+ "enabled": true
+ },
+ {
+ "name": "scene-set-active",
+ "enabled": true
+ },
+ {
+ "name": "scene-unload",
+ "enabled": true
+ },
+ {
+ "name": "screenshot-camera",
+ "enabled": true
+ },
+ {
+ "name": "screenshot-game-view",
+ "enabled": true
+ },
+ {
+ "name": "screenshot-scene-view",
+ "enabled": true
+ },
+ {
+ "name": "script-delete",
+ "enabled": true
+ },
+ {
+ "name": "script-execute",
+ "enabled": true
+ },
+ {
+ "name": "script-read",
+ "enabled": true
+ },
+ {
+ "name": "script-update-or-create",
+ "enabled": true
+ },
+ {
+ "name": "tests-run",
+ "enabled": true
+ }
+ ],
+ "prompts": [
+ {
+ "name": "setup-animator-controller",
+ "enabled": true
+ },
+ {
+ "name": "create-simple-tweening",
+ "enabled": true
+ },
+ {
+ "name": "setup-timeline-sequence",
+ "enabled": true
+ },
+ {
+ "name": "add-animation-events",
+ "enabled": true
+ },
+ {
+ "name": "create-procedural-animation",
+ "enabled": true
+ },
+ {
+ "name": "setup-sprite-animation",
+ "enabled": true
+ },
+ {
+ "name": "add-ik-system",
+ "enabled": true
+ },
+ {
+ "name": "create-animation-blending",
+ "enabled": true
+ },
+ {
+ "name": "organize-project-structure",
+ "enabled": true
+ },
+ {
+ "name": "import-setup-sprites",
+ "enabled": true
+ },
+ {
+ "name": "setup-audio-manager",
+ "enabled": true
+ },
+ {
+ "name": "configure-build-settings",
+ "enabled": true
+ },
+ {
+ "name": "create-material-library",
+ "enabled": true
+ },
+ {
+ "name": "setup-asset-bundles",
+ "enabled": true
+ },
+ {
+ "name": "optimize-texture-settings",
+ "enabled": true
+ },
+ {
+ "name": "setup-addressables",
+ "enabled": true
+ },
+ {
+ "name": "add-debug-visualization",
+ "enabled": true
+ },
+ {
+ "name": "setup-performance-profiling",
+ "enabled": true
+ },
+ {
+ "name": "create-test-scene",
+ "enabled": true
+ },
+ {
+ "name": "add-logging-system",
+ "enabled": true
+ },
+ {
+ "name": "create-unit-tests",
+ "enabled": true
+ },
+ {
+ "name": "setup-debug-ui",
+ "enabled": true
+ },
+ {
+ "name": "add-assertion-checks",
+ "enabled": true
+ },
+ {
+ "name": "create-automated-tests",
+ "enabled": true
+ },
+ {
+ "name": "add-standard-components",
+ "enabled": true
+ },
+ {
+ "name": "setup-player-controller",
+ "enabled": true
+ },
+ {
+ "name": "create-ui-canvas",
+ "enabled": true
+ },
+ {
+ "name": "add-physics-interactions",
+ "enabled": true
+ },
+ {
+ "name": "create-interactive-object",
+ "enabled": true
+ },
+ {
+ "name": "setup-audio-source",
+ "enabled": true
+ },
+ {
+ "name": "create-particle-effects",
+ "enabled": true
+ },
+ {
+ "name": "setup-animator-component",
+ "enabled": true
+ },
+ {
+ "name": "setup-basic-scene",
+ "enabled": true
+ },
+ {
+ "name": "organize-scene-hierarchy",
+ "enabled": true
+ },
+ {
+ "name": "add-lighting-setup",
+ "enabled": true
+ },
+ {
+ "name": "create-prefab-from-selection",
+ "enabled": true
+ },
+ {
+ "name": "setup-scene-camera",
+ "enabled": true
+ },
+ {
+ "name": "create-environment-template",
+ "enabled": true
+ },
+ {
+ "name": "generate-monobehaviour-template",
+ "enabled": true
+ },
+ {
+ "name": "add-event-system",
+ "enabled": true
+ },
+ {
+ "name": "create-singleton-manager",
+ "enabled": true
+ },
+ {
+ "name": "setup-coroutine-framework",
+ "enabled": true
+ },
+ {
+ "name": "create-scriptableobject-data",
+ "enabled": true
+ },
+ {
+ "name": "implement-object-pooling",
+ "enabled": true
+ },
+ {
+ "name": "add-state-machine",
+ "enabled": true
+ },
+ {
+ "name": "setup-dependency-injection",
+ "enabled": true
+ }
+ ],
+ "resources": [
+ {
+ "name": "GameObject from Current Scene by Path",
+ "enabled": true
+ }
+ ],
+ "host": "http://localhost:55726",
+ "timeoutMs": 10000,
+ "keepConnected": true,
+ "token": null
+}
\ No newline at end of file
diff --git a/Assets/Resources/PerformanceTestRunInfo.json.meta b/Assets/Resources/AI-Game-Developer-Config.json.meta
similarity index 75%
rename from Assets/Resources/PerformanceTestRunInfo.json.meta
rename to Assets/Resources/AI-Game-Developer-Config.json.meta
index 15e99379..ad966754 100644
--- a/Assets/Resources/PerformanceTestRunInfo.json.meta
+++ b/Assets/Resources/AI-Game-Developer-Config.json.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: a8692d97c02ffec48bc8f9f568e868a5
+guid: 5ecf6949f73508f49ba3a0633329a219
TextScriptImporter:
externalObjects: {}
userData:
diff --git a/Assets/Resources/Factory/Prefabs/Tab/TabContentComponentList.prefab b/Assets/Resources/Factory/Prefabs/Tab/TabContentComponentList.prefab
index d39d7b5c..e411e08a 100644
--- a/Assets/Resources/Factory/Prefabs/Tab/TabContentComponentList.prefab
+++ b/Assets/Resources/Factory/Prefabs/Tab/TabContentComponentList.prefab
@@ -139,7 +139,7 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 1, y: 1}
m_AnchorMax: {x: 1, y: 1}
- m_AnchoredPosition: {x: -12, y: -1}
+ m_AnchoredPosition: {x: -20, y: -1}
m_SizeDelta: {x: 22, y: 22}
m_Pivot: {x: 1, y: 1}
--- !u!222 &5485997075992529675
@@ -246,7 +246,7 @@ PrefabInstance:
m_Modifications:
- target: {fileID: 1375483911066562825, guid: 963f47de712c3844183989c7fc7fbd8a, type: 3}
propertyPath: m_SizeDelta.x
- value: 238
+ value: -65
objectReference: {fileID: 0}
- target: {fileID: 5097404189591199700, guid: 963f47de712c3844183989c7fc7fbd8a, type: 3}
propertyPath: m_AnchorMax.x
diff --git a/Assets/QuickOutline/Resources/Materials.meta b/Assets/Resources/Factory/UIToolkit.meta
similarity index 61%
rename from Assets/QuickOutline/Resources/Materials.meta
rename to Assets/Resources/Factory/UIToolkit.meta
index 2508b0f5..dd3dc108 100644
--- a/Assets/QuickOutline/Resources/Materials.meta
+++ b/Assets/Resources/Factory/UIToolkit.meta
@@ -1,8 +1,6 @@
fileFormatVersion: 2
-guid: 80ac8e52d3c31a94babd161e86bc6b97
+guid: 35623d99e7e18de4c9218b9878efaac6
folderAsset: yes
-timeCreated: 1522559139
-licenseType: Store
DefaultImporter:
externalObjects: {}
userData:
diff --git a/Assets/QuickOutline/Resources/Shaders.meta b/Assets/Resources/Factory/UIToolkit/Modal.meta
similarity index 61%
rename from Assets/QuickOutline/Resources/Shaders.meta
rename to Assets/Resources/Factory/UIToolkit/Modal.meta
index 91118d56..634e2b5a 100644
--- a/Assets/QuickOutline/Resources/Shaders.meta
+++ b/Assets/Resources/Factory/UIToolkit/Modal.meta
@@ -1,8 +1,6 @@
fileFormatVersion: 2
-guid: 6a63caa2b0e993043a42c11f35ff2d1a
+guid: 9ffd6459fed612148ac685b6329657a1
folderAsset: yes
-timeCreated: 1522559134
-licenseType: Store
DefaultImporter:
externalObjects: {}
userData:
diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml
new file mode 100644
index 00000000..b4408e3d
--- /dev/null
+++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml.meta b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml.meta
new file mode 100644
index 00000000..5cffaf0d
--- /dev/null
+++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentAlarmUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 92f820b7de9d43c428503b7c574c9e69
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml
new file mode 100644
index 00000000..110b5ce5
--- /dev/null
+++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml.meta b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml.meta
new file mode 100644
index 00000000..da394c8a
--- /dev/null
+++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentDisplayUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: db6157353e844a84fabf731aed504f56
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml
new file mode 100644
index 00000000..64bd8d64
--- /dev/null
+++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml.meta b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml.meta
new file mode 100644
index 00000000..037ca074
--- /dev/null
+++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentGeneralUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 7b805d40178aceb48b21275834afbb24
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml
new file mode 100644
index 00000000..075dbfb3
--- /dev/null
+++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml.meta b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml.meta
new file mode 100644
index 00000000..f4f82a65
--- /dev/null
+++ b/Assets/Resources/Factory/UIToolkit/Modal/UTKFactorySettingModalContentInputUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 5224fd32ba226a340aaac4e6dc070861
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/QuickOutline/Resources.meta b/Assets/Resources/Fonts/Icons.meta
similarity index 61%
rename from Assets/QuickOutline/Resources.meta
rename to Assets/Resources/Fonts/Icons.meta
index 6135a952..f04f140e 100644
--- a/Assets/QuickOutline/Resources.meta
+++ b/Assets/Resources/Fonts/Icons.meta
@@ -1,8 +1,6 @@
fileFormatVersion: 2
-guid: 70fd40674751a8042a8b9b2e8d9f915f
+guid: 1f3edc5b32ba94941ac6f2897a9cbf45
folderAsset: yes
-timeCreated: 1522559128
-licenseType: Store
DefaultImporter:
externalObjects: {}
userData:
diff --git a/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlined.ttf b/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlined.ttf
new file mode 100644
index 00000000..9006c26f
Binary files /dev/null and b/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlined.ttf differ
diff --git a/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlined.ttf.meta b/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlined.ttf.meta
new file mode 100644
index 00000000..e43902de
--- /dev/null
+++ b/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlined.ttf.meta
@@ -0,0 +1,21 @@
+fileFormatVersion: 2
+guid: fa552b28df3e88d44b6fa1a31d87dbf0
+TrueTypeFontImporter:
+ externalObjects: {}
+ serializedVersion: 4
+ fontSize: 16
+ forceTextureCase: -2
+ characterSpacing: 0
+ characterPadding: 1
+ includeFontData: 1
+ fontNames:
+ - Material Symbols Outlined
+ fallbackFontReferences: []
+ customCharacters:
+ fontRenderingMode: 0
+ ascentCalculationMode: 1
+ useLegacyBoundsCalculation: 0
+ shouldRoundAdvanceValue: 1
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlinedCodepoints.txt b/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlinedCodepoints.txt
new file mode 100644
index 00000000..ec2d8547
--- /dev/null
+++ b/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlinedCodepoints.txt
@@ -0,0 +1,4102 @@
+10k e951
+10mp e952
+11mp e953
+123 eb8d
+12mp e954
+13mp e955
+14mp e956
+15mp e957
+16mp e958
+17mp e959
+18_up_rating f8fd
+18mp e95a
+19mp e95b
+1k e95c
+1k_plus e95d
+1x_mobiledata efcd
+1x_mobiledata_badge f7f1
+20mp e95e
+21mp e95f
+22mp e960
+23mp e961
+24fps_select f3f2
+24mp e962
+2d ef37
+2k e963
+2k_plus e964
+2mp e965
+30fps efce
+30fps_select efcf
+360 e577
+3d ed38
+3d_rotation e84d
+3g_mobiledata efd0
+3g_mobiledata_badge f7f0
+3k e966
+3k_plus e967
+3mp e968
+3p efd1
+4g_mobiledata efd2
+4g_mobiledata_badge f7ef
+4g_plus_mobiledata efd3
+4k e072
+4k_plus e969
+4mp e96a
+50mp f6f3
+5g ef38
+5g_mobiledata_badge f7ee
+5k e96b
+5k_plus e96c
+5mp e96d
+60fps efd4
+60fps_select efd5
+6_ft_apart f21e
+6k e96e
+6k_plus e96f
+6mp e970
+7k e971
+7k_plus e972
+7mp e973
+8k e974
+8k_plus e975
+8mp e976
+9k e977
+9k_plus e978
+9mp e979
+abc eb94
+ac_unit eb3b
+access_alarm e855
+access_alarms e855
+access_time efd6
+access_time_filled efd6
+accessibility e84e
+accessibility_new e92c
+accessible e914
+accessible_forward e934
+accessible_menu f34e
+account_balance e84f
+account_balance_wallet e850
+account_box e851
+account_child e852
+account_child_invert e659
+account_circle f20b
+account_circle_filled f20b
+account_circle_off f7b3
+account_tree e97a
+action_key f502
+activity_zone e1e6
+acupuncture f2c4
+acute e4cb
+ad e65a
+ad_group e65b
+ad_group_off eae5
+ad_off f7b2
+ad_units f2eb
+adaptive_audio_mic f4cc
+adaptive_audio_mic_off f4cb
+adb e60e
+add e145
+add_2 f3dd
+add_a_photo e439
+add_ad e72a
+add_alarm e856
+add_alert e003
+add_box e146
+add_business e729
+add_call f0b7
+add_card eb86
+add_chart ef3c
+add_circle e3ba
+add_circle_outline e3ba
+add_column_left f425
+add_column_right f424
+add_comment e266
+add_diamond f49c
+add_home f8eb
+add_home_work f8ed
+add_ic_call f0b7
+add_link e178
+add_location e567
+add_location_alt ef3a
+add_moderator e97d
+add_notes e091
+add_photo_alternate e43e
+add_reaction e1d3
+add_road ef3b
+add_row_above f423
+add_row_below f422
+add_shopping_cart e854
+add_task f23a
+add_to_drive e65c
+add_to_home_screen f2b9
+add_to_photos e39d
+add_to_queue e05c
+add_triangle f48e
+addchart ef3c
+adf_scanner eada
+adjust e39e
+admin_meds e48d
+admin_panel_settings ef3d
+ads_click e762
+agender f888
+agriculture ea79
+air efd8
+air_freshener e2ca
+air_purifier e97e
+air_purifier_gen e829
+airline_seat_flat e630
+airline_seat_flat_angled e631
+airline_seat_individual_suite e632
+airline_seat_legroom_extra e633
+airline_seat_legroom_normal e634
+airline_seat_legroom_reduced e635
+airline_seat_recline_extra e636
+airline_seat_recline_normal e637
+airline_stops e7d0
+airlines e7ca
+airplane_ticket efd9
+airplanemode_active e53d
+airplanemode_inactive e194
+airplay e055
+airport_shuttle eb3c
+airware f154
+airwave f154
+alarm e855
+alarm_add e856
+alarm_off e857
+alarm_on e858
+alarm_pause f35b
+alarm_smart_wake f6b0
+album e019
+align_center e356
+align_end f797
+align_flex_center f796
+align_flex_end f795
+align_flex_start f794
+align_horizontal_center e00f
+align_horizontal_left e00d
+align_horizontal_right e010
+align_items_stretch f793
+align_justify_center f792
+align_justify_flex_end f791
+align_justify_flex_start f790
+align_justify_space_around f78f
+align_justify_space_between f78e
+align_justify_space_even f78d
+align_justify_stretch f78c
+align_self_stretch f78b
+align_space_around f78a
+align_space_between f789
+align_space_even f788
+align_start f787
+align_stretch f786
+align_vertical_bottom e015
+align_vertical_center e011
+align_vertical_top e00c
+all_inbox e97f
+all_inclusive eb3d
+all_match e093
+all_out e90b
+allergies e094
+allergy e64e
+alt_route f184
+alternate_email e0e6
+altitude f873
+ambient_screen f6c4
+ambulance f803
+amend f802
+amp_stories ea13
+analytics ef3e
+anchor f1cd
+android e859
+android_cell_4_bar ef06
+android_cell_4_bar_alert ef09
+android_cell_4_bar_off ef08
+android_cell_4_bar_plus ef07
+android_cell_5_bar ef02
+android_cell_5_bar_alert ef05
+android_cell_5_bar_off ef04
+android_cell_5_bar_plus ef03
+android_cell_dual_4_bar ef0d
+android_cell_dual_4_bar_alert ef0f
+android_cell_dual_4_bar_plus ef0e
+android_cell_dual_5_bar ef0a
+android_cell_dual_5_bar_alert ef0c
+android_cell_dual_5_bar_plus ef0b
+android_wifi_3_bar ef16
+android_wifi_3_bar_alert ef1b
+android_wifi_3_bar_lock ef1a
+android_wifi_3_bar_off ef19
+android_wifi_3_bar_plus ef18
+android_wifi_3_bar_question ef17
+android_wifi_4_bar ef10
+android_wifi_4_bar_alert ef15
+android_wifi_4_bar_lock ef14
+android_wifi_4_bar_off ef13
+android_wifi_4_bar_plus ef12
+android_wifi_4_bar_question ef11
+animated_images f49a
+animation e71c
+announcement e87f
+aod f2e6
+aod_tablet f89f
+aod_watch f6ac
+apartment ea40
+api f1b7
+apk_document f88e
+apk_install f88f
+app_badging f72f
+app_blocking f2e5
+app_promo f2cd
+app_registration ef40
+app_settings_alt f2d9
+app_shortcut f2df
+apparel ef7b
+approval e982
+approval_delegation f84a
+approval_delegation_off f2c5
+apps e5c3
+apps_outage e7cc
+aq f55a
+aq_indoor f55b
+ar_on_you ef7c
+ar_stickers e983
+architecture ea3b
+archive e149
+area_chart e770
+arming_countdown e78a
+arrow_and_edge f5d7
+arrow_back e5c4
+arrow_back_2 f43a
+arrow_back_ios e5e0
+arrow_back_ios_new e2ea
+arrow_circle_down f181
+arrow_circle_left eaa7
+arrow_circle_right eaaa
+arrow_circle_up f182
+arrow_cool_down f4b6
+arrow_downward e5db
+arrow_downward_alt e984
+arrow_drop_down e5c5
+arrow_drop_down_circle e5c6
+arrow_drop_up e5c7
+arrow_forward e5c8
+arrow_forward_ios e5e1
+arrow_insert f837
+arrow_left e5de
+arrow_left_alt ef7d
+arrow_menu_close f3d3
+arrow_menu_open f3d2
+arrow_or_edge f5d6
+arrow_outward f8ce
+arrow_range f69b
+arrow_right e5df
+arrow_right_alt e941
+arrow_selector_tool f82f
+arrow_shape_up eef6
+arrow_shape_up_stack eef7
+arrow_shape_up_stack_2 eef8
+arrow_split ea04
+arrow_top_left f72e
+arrow_top_right f72d
+arrow_upload_progress f3f4
+arrow_upload_ready f3f5
+arrow_upward e5d8
+arrow_upward_alt e986
+arrow_warm_up f4b5
+arrows_input f394
+arrows_more_down f8ab
+arrows_more_up f8ac
+arrows_output f393
+arrows_outward f72c
+art_track e060
+article ef42
+article_person f368
+article_shortcut f587
+artist e01a
+aspect_ratio e85b
+assessment f0cc
+assignment e85d
+assignment_add f848
+assignment_globe eeec
+assignment_ind e85e
+assignment_late e85f
+assignment_return e860
+assignment_returned e861
+assignment_turned_in e862
+assist_walker f8d5
+assistant e39f
+assistant_device e987
+assistant_direction e988
+assistant_navigation e989
+assistant_on_hub f6c1
+assistant_photo f0c6
+assured_workload eb6f
+asterisk f525
+astrophotography_auto f1d9
+astrophotography_off f1da
+atm e573
+atr ebc7
+attach_email ea5e
+attach_file e226
+attach_file_add f841
+attach_file_off f4d9
+attach_money e227
+attachment e2bc
+attractions ea52
+attribution efdb
+audio_description f58c
+audio_file eb82
+audio_video_receiver f5d3
+audiotrack e405
+auto_activity_zone f8ad
+auto_awesome e65f
+auto_awesome_mosaic e660
+auto_awesome_motion e661
+auto_delete ea4c
+auto_detect_voice f83e
+auto_draw_solid e98a
+auto_fix e663
+auto_fix_high e663
+auto_fix_normal e664
+auto_fix_off e665
+auto_graph e4fb
+auto_label f6be
+auto_meeting_room f6bf
+auto_mode ec20
+auto_read_pause f219
+auto_read_play f216
+auto_schedule e214
+auto_stories e666
+auto_stories_off f267
+auto_timer ef7f
+auto_towing e71e
+auto_transmission f53f
+auto_videocam f6c0
+autofps_select efdc
+automation f421
+autopause f6b6
+autopay f84b
+autoplay f6b5
+autorenew e863
+autostop f682
+av1 f4b0
+av_timer e01b
+avc f4af
+avg_pace f6bb
+avg_time f813
+award_meal f241
+award_star f612
+azm f6ec
+baby_changing_station f19b
+back_hand e764
+back_to_tab f72b
+background_dot_large f79e
+background_dot_small f514
+background_grid_small f79d
+background_replace f20a
+backlight_high f7ed
+backlight_high_off f4ef
+backlight_low f7ec
+backpack f19c
+backspace e14a
+backup e864
+backup_table ef43
+badge ea67
+badge_critical_battery f156
+badminton f2a8
+bakery_dining ea53
+balance eaf6
+balcony e58f
+ballot e172
+bar_chart e26b
+bar_chart_4_bars f681
+bar_chart_off f411
+barcode e70b
+barcode_reader f85c
+barcode_scanner e70c
+barefoot f871
+batch_prediction f0f5
+bath_bedrock f286
+bath_outdoor f6fb
+bath_private f6fa
+bath_public_large f6f9
+bath_soak f2a0
+bathroom efdd
+bathtub ea41
+battery_0_bar ebdc
+battery_1_bar f09c
+battery_20 f09c
+battery_2_bar f09d
+battery_30 f09d
+battery_3_bar f09e
+battery_4_bar f09f
+battery_50 f09e
+battery_5_bar f0a0
+battery_60 f09f
+battery_6_bar f0a1
+battery_80 f0a0
+battery_90 f0a1
+battery_alert e19c
+battery_android_0 f30d
+battery_android_1 f30c
+battery_android_2 f30b
+battery_android_3 f30a
+battery_android_4 f309
+battery_android_5 f308
+battery_android_6 f307
+battery_android_alert f306
+battery_android_bolt f305
+battery_android_frame_1 f257
+battery_android_frame_2 f256
+battery_android_frame_3 f255
+battery_android_frame_4 f254
+battery_android_frame_5 f253
+battery_android_frame_6 f252
+battery_android_frame_alert f251
+battery_android_frame_bolt f250
+battery_android_frame_full f24f
+battery_android_frame_plus f24e
+battery_android_frame_question f24d
+battery_android_frame_share f24c
+battery_android_frame_shield f24b
+battery_android_full f304
+battery_android_plus f303
+battery_android_question f302
+battery_android_share f301
+battery_android_shield f300
+battery_change f7eb
+battery_charging_20 f0a2
+battery_charging_30 f0a3
+battery_charging_50 f0a4
+battery_charging_60 f0a5
+battery_charging_80 f0a6
+battery_charging_90 f0a7
+battery_charging_full e1a3
+battery_error f7ea
+battery_full e1a5
+battery_full_alt f13b
+battery_horiz_000 f8ae
+battery_horiz_050 f8af
+battery_horiz_075 f8b0
+battery_low f155
+battery_plus f7e9
+battery_profile e206
+battery_saver efde
+battery_share f67e
+battery_status_good f67d
+battery_std e1a5
+battery_unknown e1a6
+battery_vert_005 f8b1
+battery_vert_020 f8b2
+battery_vert_050 f8b3
+battery_very_low f156
+beach_access eb3e
+bed efdf
+bedroom_baby efe0
+bedroom_child efe1
+bedroom_parent efe2
+bedtime f159
+bedtime_off eb76
+beenhere e52d
+beer_meal f285
+bento f1f4
+bia f6eb
+bid_landscape e678
+bid_landscape_disabled ef81
+bigtop_updates e669
+bike_dock f47b
+bike_lane f47a
+bike_scooter ef45
+biotech ea3a
+blanket e828
+blender efe3
+blind f8d6
+blinds e286
+blinds_closed ec1f
+block f08c
+blood_pressure e097
+bloodtype efe4
+bluetooth e1a7
+bluetooth_audio e60f
+bluetooth_connected e1a8
+bluetooth_disabled e1a9
+bluetooth_drive efe5
+bluetooth_searching e60f
+blur_circular e3a2
+blur_linear e3a3
+blur_medium e84c
+blur_off e3a4
+blur_on e3a5
+blur_short e8cf
+boat_bus f36d
+boat_railway f36c
+body_fat e098
+body_system e099
+bolt ea0b
+bomb f568
+book e86e
+book_2 f53e
+book_3 f53d
+book_4 f53c
+book_5 f53b
+book_6 f3df
+book_online f2e4
+book_ribbon f3e7
+bookmark e8e7
+bookmark_add e598
+bookmark_added e599
+bookmark_bag f410
+bookmark_border e8e7
+bookmark_check f457
+bookmark_flag f456
+bookmark_heart f455
+bookmark_manager f7b1
+bookmark_remove e59a
+bookmark_star f454
+bookmarks e98b
+books_movies_and_music ef82
+border_all e228
+border_bottom e229
+border_clear e22a
+border_color e22b
+border_horizontal e22c
+border_inner e22d
+border_left e22e
+border_outer e22f
+border_right e230
+border_style e231
+border_top e232
+border_vertical e233
+borg f40d
+bottom_app_bar e730
+bottom_drawer e72d
+bottom_navigation e98c
+bottom_panel_close f72a
+bottom_panel_open f729
+bottom_right_click f684
+bottom_sheets e98d
+box f5a4
+box_add f5a5
+box_edit f5a6
+boy eb67
+brand_awareness e98e
+brand_family f4f1
+branding_watermark e06b
+breakfast_dining ea54
+breaking_news ea08
+breaking_news_alt_1 f0ba
+breastfeeding f856
+brick f388
+briefcase_meal f246
+brightness_1 e3fa
+brightness_2 f036
+brightness_3 e3a8
+brightness_4 e3a9
+brightness_5 e3aa
+brightness_6 e3ab
+brightness_7 e3ac
+brightness_alert f5cf
+brightness_auto e1ab
+brightness_empty f7e8
+brightness_high e1ac
+brightness_low e1ad
+brightness_medium e1ae
+bring_your_own_ip e016
+broadcast_on_home f8f8
+broadcast_on_personal f8f9
+broken_image e3ad
+browse eb13
+browse_activity f8a5
+browse_gallery ebd1
+browser_not_supported ef47
+browser_updated e7cf
+brunch_dining ea73
+brush e3ae
+bubble ef83
+bubble_chart e6dd
+bubbles f64e
+bucket_check ef2a
+bug_report e868
+build f8cd
+build_circle ef48
+bungalow e591
+burst_mode e43c
+bus_alert e98f
+bus_railway f36b
+business e7ee
+business_center eb3f
+business_chip f84c
+business_messages ef84
+buttons_alt e72f
+cabin e589
+cable efe6
+cable_car f479
+cached e86a
+cadence f4b4
+cake e7e9
+cake_add f85b
+calculate ea5f
+calendar_add_on ef85
+calendar_apps_script f0bb
+calendar_check f243
+calendar_clock f540
+calendar_lock f242
+calendar_meal f296
+calendar_meal_2 f240
+calendar_month ebcc
+calendar_today e935
+calendar_view_day e936
+calendar_view_month efe7
+calendar_view_week efe8
+call f0d4
+call_end f0bc
+call_end_alt f0bc
+call_log e08e
+call_made e0b2
+call_merge e0b3
+call_missed e0b4
+call_missed_outgoing e0e4
+call_quality f652
+call_received e0b5
+call_split e0b6
+call_to_action e06c
+camera e3af
+camera_alt e412
+camera_enhance e8fc
+camera_front f2c9
+camera_indoor efe9
+camera_outdoor efea
+camera_rear f2c8
+camera_roll e3b3
+camera_video f7a6
+cameraswitch efeb
+campaign ef49
+camping f8a2
+cancel e888
+cancel_presentation e0e9
+cancel_schedule_send ea39
+candle f588
+candlestick_chart ead4
+cannabis f2f3
+captive_portal f728
+capture f727
+car_crash ebf2
+car_defrost_left f344
+car_defrost_low_left f343
+car_defrost_low_right f342
+car_defrost_mid_left f278
+car_defrost_mid_low_left f341
+car_defrost_mid_low_right f277
+car_defrost_mid_right f340
+car_defrost_right f33f
+car_fan_low_left f33e
+car_fan_low_mid_left f33d
+car_fan_low_right f33c
+car_fan_mid_left f33b
+car_fan_mid_low_right f33a
+car_fan_mid_right f339
+car_fan_recirculate f338
+car_gear f337
+car_lock f336
+car_mirror_heat f335
+car_rental ea55
+car_repair ea56
+car_tag f4e3
+card_giftcard e8f6
+card_membership e8f7
+card_travel e8f8
+cardio_load f4b9
+cardiology e09c
+cards e991
+cards_star f375
+carpenter f1f8
+carry_on_bag eb08
+carry_on_bag_checked eb0b
+carry_on_bag_inactive eb0a
+carry_on_bag_question eb09
+cases e992
+casino eb40
+cast e307
+cast_connected e308
+cast_for_education efec
+cast_pause f5f0
+cast_warning f5ef
+castle eab1
+category e574
+category_search f437
+celebration ea65
+cell_merge f82e
+cell_tower ebba
+cell_wifi e0ec
+center_focus_strong e3b4
+center_focus_weak e3b5
+chair efed
+chair_alt efee
+chair_counter f29f
+chair_fireplace f29e
+chair_umbrella f29d
+chalet e585
+change_circle e2e7
+change_history e86b
+charger e2ae
+charging_station f2e3
+chart_data e473
+chat e0c9
+chat_add_on f0f3
+chat_apps_script f0bd
+chat_bubble e0cb
+chat_bubble_outline e0cb
+chat_dashed eeed
+chat_error f7ac
+chat_info f52b
+chat_paste_go f6bd
+chat_paste_go_2 f3cb
+check e5ca
+check_box e834
+check_box_outline_blank e835
+check_circle f0be
+check_circle_filled f0be
+check_circle_outline f0be
+check_circle_unread f27e
+check_in_out f6f6
+check_indeterminate_small f88a
+check_small f88b
+checkbook e70d
+checked_bag eb0c
+checked_bag_question eb0d
+checklist e6b1
+checklist_rtl e6b3
+checkroom f19e
+cheer f6a8
+chef_hat f357
+chess f5e7
+chess_bishop f261
+chess_bishop_2 f262
+chess_king f25f
+chess_king_2 f260
+chess_knight f25e
+chess_pawn f3b6
+chess_pawn_2 f25d
+chess_queen f25c
+chess_rook f25b
+chevron_backward f46b
+chevron_forward f46a
+chevron_left e5cb
+chevron_right e5cc
+child_care eb41
+child_friendly eb42
+child_hat ef30
+chip_extraction f821
+chips e993
+chrome_reader_mode e86d
+chromecast_2 f17b
+chromecast_device e83c
+chronic ebb2
+church eaae
+cinematic_blur f853
+circle ef4a
+circle_notifications e994
+circles e7ea
+circles_ext e7ec
+clarify f0bf
+class e86e
+clean_hands f21f
+cleaning e995
+cleaning_bucket f8b4
+cleaning_services f0ff
+clear e5cd
+clear_all e0b8
+clear_day f157
+clear_night f159
+climate_mini_split f8b5
+clinical_notes e09e
+clock_arrow_down f382
+clock_arrow_up f381
+clock_loader_10 f726
+clock_loader_20 f725
+clock_loader_40 f724
+clock_loader_60 f723
+clock_loader_80 f722
+clock_loader_90 f721
+close e5cd
+close_fullscreen f1cf
+close_small f508
+closed_caption e996
+closed_caption_add f4ae
+closed_caption_disabled f1dc
+closed_caption_off e996
+cloud f15c
+cloud_alert f3cc
+cloud_circle e2be
+cloud_done e2bf
+cloud_download e2c0
+cloud_lock f386
+cloud_off e2c1
+cloud_queue f15c
+cloud_sync eb5a
+cloud_upload e2c3
+cloudy f15c
+cloudy_filled f15c
+cloudy_snowing e810
+co2 e7b0
+co_present eaf0
+code e86f
+code_blocks f84d
+code_off e4f3
+coffee efef
+coffee_maker eff0
+cognition e09f
+cognition_2 f3b5
+collapse_all e944
+collapse_content f507
+collections e3d3
+collections_bookmark e431
+color_lens e40a
+colorize e3b8
+colors e997
+combine_columns f420
+comedy_mask f4d6
+comic_bubble f5dd
+comment e24c
+comment_bank ea4e
+comments_disabled e7a2
+commit eaf5
+communication e27c
+communities eb16
+communities_filled eb16
+commute e940
+compare e3b9
+compare_arrows e915
+compass_calibration e57c
+component_exchange f1e7
+compost e761
+compress e94d
+computer e31e
+computer_arrow_up f2f7
+computer_cancel f2f6
+concierge f561
+conditions e0a0
+confirmation_number e638
+congenital e0a1
+connect_without_contact f223
+connected_tv e998
+connecting_airports e7c9
+construction ea3c
+contact_emergency f8d1
+contact_mail e0d0
+contact_page f22e
+contact_phone f0c0
+contact_phone_filled f0c0
+contact_support e94c
+contactless ea71
+contactless_off f858
+contacts e0ba
+contacts_product e999
+content_copy e14d
+content_cut e14e
+content_paste e14f
+content_paste_go ea8e
+content_paste_off e4f8
+content_paste_search ea9b
+contextual_token f486
+contextual_token_add f485
+contract f5a0
+contract_delete f5a2
+contract_edit f5a1
+contrast eb37
+contrast_circle f49f
+contrast_rtl_off ec72
+contrast_square f4a0
+control_camera e074
+control_point e3ba
+control_point_duplicate e3bb
+controller_gen e83d
+conversation ef2f
+conversion_path f0c1
+conversion_path_off f7b4
+convert_to_text f41f
+conveyor_belt f867
+cookie eaac
+cookie_off f79a
+cooking e2b6
+cool_to_dry e276
+copy_all e2ec
+copyright e90c
+coronavirus f221
+corporate_fare f1d0
+cottage e587
+counter_0 f785
+counter_1 f784
+counter_2 f783
+counter_3 f782
+counter_4 f781
+counter_5 f780
+counter_6 f77f
+counter_7 f77e
+counter_8 f77d
+counter_9 f77c
+countertops f1f7
+create f097
+create_new_folder e2cc
+credit_card e8a1
+credit_card_clock f438
+credit_card_gear f52d
+credit_card_heart f52c
+credit_card_off e4f4
+credit_score eff1
+crib e588
+crisis_alert ebe9
+crop e3be
+crop_16_9 e3bc
+crop_3_2 e3bd
+crop_5_4 e3bf
+crop_7_5 e3c0
+crop_9_16 f549
+crop_din e3c6
+crop_free e3c2
+crop_landscape e3c3
+crop_original e3f4
+crop_portrait e3c5
+crop_rotate e437
+crop_square e3c6
+crossword f5e5
+crowdsource eb18
+crown ecb3
+cruelty_free e799
+css eb93
+csv e6cf
+currency_bitcoin ebc5
+currency_exchange eb70
+currency_franc eafa
+currency_lira eaef
+currency_pound eaf1
+currency_ruble eaec
+currency_rupee eaf7
+currency_rupee_circle f460
+currency_yen eafb
+currency_yuan eaf9
+curtains ec1e
+curtains_closed ec1d
+custom_typography e732
+cut f08b
+cycle f854
+cyclone ebd5
+dangerous e99a
+dark_mode e51c
+dashboard e871
+dashboard_2 f3ea
+dashboard_customize e99b
+data_alert f7f6
+data_array ead1
+data_check f7f2
+data_exploration e76f
+data_info_alert f7f5
+data_loss_prevention e2dc
+data_object ead3
+data_saver_off eff2
+data_saver_on eff3
+data_table e99c
+data_thresholding eb9f
+data_usage eff2
+database f20e
+database_off f414
+database_search f38e
+database_upload f3dc
+dataset f8ee
+dataset_linked f8ef
+date_range e916
+deblur eb77
+deceased e0a5
+decimal_decrease f82d
+decimal_increase f82c
+deck ea42
+dehaze e3c7
+delete e92e
+delete_forever e92b
+delete_history f518
+delete_outline e92e
+delete_sweep e16c
+delivery_dining eb28
+delivery_truck_bolt f3a2
+delivery_truck_speed f3a1
+demography e489
+density_large eba9
+density_medium eb9e
+density_small eba8
+dentistry e0a6
+departure_board e576
+deployed_code f720
+deployed_code_account f51b
+deployed_code_alert f5f2
+deployed_code_history f5f3
+deployed_code_update f5f4
+dermatology e0a7
+description e873
+deselect ebb6
+design_services f10a
+desk f8f4
+deskphone f7fa
+desktop_access_disabled e99d
+desktop_cloud f3db
+desktop_cloud_stack f3be
+desktop_landscape f45e
+desktop_landscape_add f439
+desktop_mac e30b
+desktop_portrait f45d
+desktop_windows e30c
+destruction f585
+details e3c8
+detection_and_zone e29f
+detector e282
+detector_alarm e1f7
+detector_battery e204
+detector_co e2af
+detector_offline e223
+detector_smoke e285
+detector_status e1e8
+developer_board e30d
+developer_board_off e4ff
+developer_guide e99e
+developer_mode f2e2
+developer_mode_tv e874
+device_band f2f5
+device_hub e335
+device_reset e8b3
+device_thermostat e1ff
+device_unknown f2e1
+devices e326
+devices_fold ebde
+devices_fold_2 f406
+devices_off f7a5
+devices_other e337
+devices_wearables f6ab
+dew_point f879
+diagnosis e0a8
+diagonal_line f41e
+dialer_sip e0bb
+dialogs e99f
+dialpad e0bc
+diamond ead5
+diamond_shine f2b2
+dictionary f539
+difference eb7d
+digital_out_of_home f1de
+digital_wellbeing ef86
+dine_heart f29c
+dine_in f295
+dine_lamp f29b
+dining eff4
+dinner_dining ea57
+directions e52e
+directions_alt f880
+directions_alt_off f881
+directions_bike e52f
+directions_boat eff5
+directions_boat_filled eff5
+directions_bus eff6
+directions_bus_filled eff6
+directions_car eff7
+directions_car_filled eff7
+directions_off f10f
+directions_railway eff8
+directions_railway_2 f462
+directions_railway_filled eff8
+directions_run e566
+directions_subway effa
+directions_subway_filled effa
+directions_transit effa
+directions_transit_filled effa
+directions_walk e536
+directory_sync e394
+dirty_lens ef4b
+disabled_by_default f230
+disabled_visible e76e
+disc_full e610
+discover_tune e018
+dishwasher e9a0
+dishwasher_gen e832
+display_external_input f7e7
+display_settings eb97
+distance f6ea
+diversity_1 f8d7
+diversity_2 f8d8
+diversity_3 f8d9
+diversity_4 f857
+dns e875
+do_disturb f08c
+do_disturb_alt f08d
+do_disturb_off f08e
+do_disturb_on f08f
+do_not_disturb f08d
+do_not_disturb_alt f08c
+do_not_disturb_off f08e
+do_not_disturb_on f08f
+do_not_disturb_on_total_silence effb
+do_not_step f19f
+do_not_touch f1b0
+dock f2e0
+dock_to_bottom f7e6
+dock_to_left f7e5
+dock_to_right f7e4
+docs ea7d
+docs_add_on f0c2
+docs_apps_script f0c3
+document_scanner e5fa
+document_search f385
+domain e7ee
+domain_add eb62
+domain_disabled e0ef
+domain_verification ef4c
+domain_verification_off f7b0
+domino_mask f5e4
+done e876
+done_all e877
+done_outline e92f
+donut_large e917
+donut_small e918
+door_back effc
+door_front effd
+door_open e77c
+door_sensor e28a
+door_sliding effe
+doorbell efff
+doorbell_3p e1e7
+doorbell_chime e1f3
+double_arrow ea50
+downhill_skiing e509
+download f090
+download_2 f523
+download_done f091
+download_for_offline f000
+downloading f001
+draft e66d
+draft_orders e7b3
+drafts e151
+drag_click f71f
+drag_handle e25d
+drag_indicator e945
+drag_pan f71e
+draw e746
+draw_abstract f7f8
+draw_collage f7f7
+drawing_recognition eb00
+dresser e210
+drive_eta eff7
+drive_export f41d
+drive_file_move e9a1
+drive_file_move_outline e9a1
+drive_file_move_rtl e9a1
+drive_file_rename_outline e9a2
+drive_folder_upload e9a3
+drive_fusiontable e678
+drone f25a
+drone_2 f259
+dropdown e9a4
+dropper_eye f351
+dry f1b3
+dry_cleaning ea58
+dual_screen f6cf
+duo e9a5
+dvr e1b2
+dynamic_feed ea14
+dynamic_form f1bf
+e911_avatar f11a
+e911_emergency f119
+e_mobiledata f002
+e_mobiledata_badge f7e3
+ear_sound f356
+earbud_case f327
+earbud_left f326
+earbud_right f325
+earbuds f003
+earbuds_2 f324
+earbuds_battery f004
+early_on e2ba
+earthquake f64f
+east f1df
+ecg f80f
+ecg_heart f6e9
+eco ea35
+eda f6e8
+edgesensor_high f2ef
+edgesensor_low f2ee
+edit f097
+edit_arrow_down f380
+edit_arrow_up f37f
+edit_attributes e578
+edit_audio f42d
+edit_calendar e742
+edit_document f88c
+edit_location e568
+edit_location_alt e1c5
+edit_note e745
+edit_notifications e525
+edit_off e950
+edit_road ef4d
+edit_square f88d
+editor_choice f528
+egg eacc
+egg_alt eac8
+eject e8fb
+elderly f21a
+elderly_woman eb69
+electric_bike eb1b
+electric_bolt ec1c
+electric_car eb1c
+electric_meter ec1b
+electric_moped eb1d
+electric_rickshaw eb1e
+electric_scooter eb1f
+electrical_services f102
+elevation f6e7
+elevator f1a0
+email e159
+emergency e1eb
+emergency_heat f15d
+emergency_heat_2 f4e5
+emergency_home e82a
+emergency_recording ebf4
+emergency_share ebf6
+emergency_share_off f59e
+emoji_emotions ea22
+emoji_events ea23
+emoji_flags f0c6
+emoji_food_beverage ea1b
+emoji_language f4cd
+emoji_nature ea1c
+emoji_objects ea24
+emoji_people ea1d
+emoji_symbols ea1e
+emoji_transportation ea1f
+emoticon e5f3
+empty_dashboard f844
+enable f188
+encrypted e593
+encrypted_add f429
+encrypted_add_circle f42a
+encrypted_minus_circle f428
+encrypted_off f427
+endocrinology e0a9
+energy e9a6
+energy_program_saving f15f
+energy_program_time_used f161
+energy_savings_leaf ec1a
+engineering ea3d
+enhanced_encryption e63f
+ent e0aa
+enterprise e70e
+enterprise_off eb4d
+equal f77b
+equalizer e01d
+eraser_size_1 f3fc
+eraser_size_2 f3fb
+eraser_size_3 f3fa
+eraser_size_4 f3f9
+eraser_size_5 f3f8
+error f8b6
+error_circle_rounded f8b6
+error_med e49b
+error_outline f8b6
+escalator f1a1
+escalator_warning f1ac
+euro ea15
+euro_symbol e926
+ev_charger e56d
+ev_mobiledata_badge f7e2
+ev_shadow ef8f
+ev_shadow_add f580
+ev_shadow_minus f57f
+ev_station e56d
+event e878
+event_available e614
+event_busy e615
+event_list f683
+event_note e616
+event_repeat eb7b
+event_seat e903
+event_upcoming f238
+exclamation f22f
+exercise f6e6
+exit_to_app e879
+expand e94f
+expand_all e946
+expand_circle_down e7cd
+expand_circle_right f591
+expand_circle_up f5d2
+expand_content f830
+expand_less e5ce
+expand_more e5cf
+expansion_panels ef90
+expension_panels ef90
+experiment e686
+explicit e01e
+explore e87a
+explore_nearby e538
+explore_off e9a8
+explosion f685
+export_notes e0ac
+exposure e3f6
+exposure_neg_1 e3cb
+exposure_neg_2 e3cc
+exposure_plus_1 e800
+exposure_plus_2 e3ce
+exposure_zero e3cf
+extension e87b
+extension_off e4f5
+eye_tracking f4c9
+eyeglasses f6ee
+eyeglasses_2 f2c7
+eyeglasses_2_sound f265
+face f008
+face_2 f8da
+face_3 f8db
+face_4 f8dc
+face_5 f8dd
+face_6 f8de
+face_down f402
+face_left f401
+face_nod f400
+face_retouching_natural ef4e
+face_retouching_off f007
+face_right f3ff
+face_shake f3fe
+face_unlock f008
+face_up f3fd
+fact_check f0c5
+factory ebbc
+falling f60d
+familiar_face_and_zone e21c
+family_group eef2
+family_history e0ad
+family_home eb26
+family_link eb19
+family_restroom f1a2
+family_star f527
+fan_focus f334
+fan_indirect f333
+farsight_digital f559
+fast_forward e01f
+fast_rewind e020
+fastfood e57a
+faucet e278
+favorite e87e
+favorite_border e87e
+fax ead8
+feature_search e9a9
+featured_play_list e06d
+featured_seasonal_and_gifts ef91
+featured_video e06e
+feed f009
+feedback e87f
+female e590
+femur f891
+femur_alt f892
+fence f1f6
+fertile f6e5
+festival ea68
+fiber_dvr e05d
+fiber_manual_record e061
+fiber_new e05e
+fiber_pin e06a
+fiber_smart_record e062
+file_copy e173
+file_copy_off f4d8
+file_download f090
+file_download_done f091
+file_download_off e4fe
+file_export f3b2
+file_json f3bb
+file_map e2c5
+file_map_stack f3e2
+file_open eaf3
+file_png f3bc
+file_present ea0e
+file_save f17f
+file_save_off e505
+file_upload f09b
+file_upload_off f886
+files ea85
+filter e3d3
+filter_1 e3d0
+filter_2 e3d1
+filter_3 e3d2
+filter_4 e3d4
+filter_5 e3d5
+filter_6 e3d6
+filter_7 e3d7
+filter_8 e3d8
+filter_9 e3d9
+filter_9_plus e3da
+filter_alt ef4f
+filter_alt_off eb32
+filter_arrow_right f3d1
+filter_b_and_w e3db
+filter_center_focus e3dc
+filter_drama e3dd
+filter_frames e3de
+filter_hdr e3df
+filter_list e152
+filter_list_alt e94e
+filter_list_off eb57
+filter_none e3e0
+filter_retrolux e3e1
+filter_tilt_shift e3e2
+filter_vintage e3e3
+finance e6bf
+finance_chip f84e
+finance_mode ef92
+find_in_page e880
+find_replace e881
+fingerprint e90d
+fingerprint_off f49d
+fire_extinguisher f1d8
+fire_hydrant f1a3
+fire_truck f8f2
+fireplace ea43
+first_page e5dc
+fit_page f77a
+fit_page_height f397
+fit_page_width f396
+fit_screen ea10
+fit_width f779
+fitness_center eb43
+fitness_tracker f463
+fitness_trackers eef1
+flag f0c6
+flag_2 f40f
+flag_check f3d8
+flag_circle eaf8
+flag_filled f0c6
+flaky ef50
+flare e3e4
+flash_auto e3e5
+flash_off e3e6
+flash_on e3e7
+flashlight_off f00a
+flashlight_on f00b
+flatware f00c
+flex_direction f778
+flex_no_wrap f777
+flex_wrap f776
+flight e539
+flight_class e7cb
+flight_land e904
+flight_takeoff e905
+flights_and_hotels e9ab
+flightsmode ef93
+flip e3e8
+flip_camera_android ea37
+flip_camera_ios ea38
+flip_to_back e882
+flip_to_front e883
+float_landscape_2 f45c
+float_portrait_2 f45b
+flood ebe6
+floor f6e4
+floor_lamp e21e
+flourescent f07d
+flowchart f38d
+flowsheet e0ae
+fluid e483
+fluid_balance f80d
+fluid_med f80c
+fluorescent f07d
+flutter f1dd
+flutter_dash e00b
+flyover f478
+fmd_bad f00e
+fmd_good f1db
+foggy e818
+folded_hands f5ed
+folder e2c7
+folder_check f3d7
+folder_check_2 f3d6
+folder_code f3c8
+folder_copy ebbd
+folder_data f586
+folder_delete eb34
+folder_eye f3d5
+folder_info f395
+folder_limited f4e4
+folder_managed f775
+folder_match f3d4
+folder_off eb83
+folder_open e2c8
+folder_shared e2c9
+folder_special e617
+folder_supervised f774
+folder_zip eb2c
+follow_the_signs f222
+font_download e167
+font_download_off e4f9
+food_bank f1f2
+foot_bones f893
+footprint f87d
+for_you e9ac
+forest ea99
+fork_left eba0
+fork_right ebac
+fork_spoon f3e4
+forklift f868
+format_align_center e234
+format_align_justify e235
+format_align_left e236
+format_align_right e237
+format_bold e238
+format_clear e239
+format_color_fill e23a
+format_color_reset e23b
+format_color_text e23c
+format_h1 f85d
+format_h2 f85e
+format_h3 f85f
+format_h4 f860
+format_h5 f861
+format_h6 f862
+format_image_left f863
+format_image_right f864
+format_indent_decrease e23d
+format_indent_increase e23e
+format_ink_highlighter f82b
+format_italic e23f
+format_letter_spacing f773
+format_letter_spacing_2 f618
+format_letter_spacing_standard f617
+format_letter_spacing_wide f616
+format_letter_spacing_wider f615
+format_line_spacing e240
+format_list_bulleted e241
+format_list_bulleted_add f849
+format_list_numbered e242
+format_list_numbered_rtl e267
+format_overline eb65
+format_paint e243
+format_paragraph f865
+format_quote e244
+format_quote_off f413
+format_shapes e25e
+format_size e245
+format_strikethrough e246
+format_text_clip f82a
+format_text_overflow f829
+format_text_wrap f828
+format_textdirection_l_to_r e247
+format_textdirection_r_to_l e248
+format_textdirection_vertical f4b8
+format_underlined e249
+format_underlined_squiggle f885
+forms_add_on f0c7
+forms_apps_script f0c8
+fort eaad
+forum e8af
+forward f57a
+forward_10 e056
+forward_30 e057
+forward_5 e058
+forward_circle f6f5
+forward_media f6f4
+forward_to_inbox f187
+foundation f200
+fragrance f345
+frame_bug eeef
+frame_exclamation eeee
+frame_inspect f772
+frame_person f8a6
+frame_person_mic f4d5
+frame_person_off f7d1
+frame_reload f771
+frame_source f770
+free_breakfast eb44
+free_cancellation e748
+front_hand e769
+front_loader f869
+full_coverage eb12
+full_hd f58b
+full_stacked_bar_chart f212
+fullscreen e5d0
+fullscreen_exit e5d1
+fullscreen_portrait f45a
+function f866
+functions e24a
+funicular f477
+g_mobiledata f010
+g_mobiledata_badge f7e1
+g_translate e927
+gallery_thumbnail f86f
+gamepad e30f
+games e30f
+garage f011
+garage_check f28d
+garage_door e714
+garage_home e82d
+garage_money f28c
+garden_cart f8a9
+gas_meter ec19
+gastroenterology e0f1
+gate e277
+gavel e90e
+general_device e6de
+generating_tokens e749
+genetics e0f3
+genres e6ee
+gesture e155
+gesture_select f657
+get_app f090
+gif e908
+gif_2 f40e
+gif_box e7a3
+girl eb68
+gite e58b
+glass_cup f6e3
+globe e64c
+globe_asia f799
+globe_book f3c9
+globe_location_pin f35d
+globe_uk f798
+glucose e4a0
+glyphs f8a3
+go_to_line f71d
+golf_course eb45
+gondola_lift f476
+google_home_devices e715
+google_plus_reshare f57a
+google_tv_remote f5db
+google_wifi f579
+gpp_bad f012
+gpp_good f013
+gpp_maybe f014
+gps_fixed e55c
+gps_not_fixed e1b7
+gps_off e1b6
+grade f09a
+gradient e3e9
+grading ea4f
+grain e3ea
+graph_1 f3a0
+graph_2 f39f
+graph_3 f39e
+graph_4 f39d
+graph_5 f39c
+graph_6 f39b
+graph_7 f346
+graphic_eq e1b8
+grass f205
+grid_3x3 f015
+grid_3x3_off f67c
+grid_4x4 f016
+grid_goldenratio f017
+grid_guides f76f
+grid_off e3eb
+grid_on e3ec
+grid_view e9b0
+grocery ef97
+group ea21
+group_add e7f0
+group_off e747
+group_remove e7ad
+group_search f3ce
+group_work e886
+grouped_bar_chart f211
+groups f233
+groups_2 f8df
+groups_3 f8e0
+guardian f4c1
+gynecology e0f4
+h_mobiledata f018
+h_mobiledata_badge f7e0
+h_plus_mobiledata f019
+h_plus_mobiledata_badge f7df
+hail e9b1
+hallway e6f8
+hanami_dango f23f
+hand_bones f894
+hand_gesture ef9c
+hand_gesture_off f3f3
+hand_meal f294
+hand_package f293
+handheld_controller f4c6
+handshake ebcb
+handwriting_recognition eb02
+handyman f10b
+hangout_video e0c1
+hangout_video_off e0c2
+hard_disk f3da
+hard_drive f80e
+hard_drive_2 f7a4
+hardware ea59
+hd e052
+hdr_auto f01a
+hdr_auto_select f01b
+hdr_enhanced_select ef51
+hdr_off e3ed
+hdr_off_select f01c
+hdr_on e3ee
+hdr_on_select f01d
+hdr_plus f01e
+hdr_plus_off e3ef
+hdr_strong e3f1
+hdr_weak e3f2
+head_mounted_device f4c5
+headphones f01f
+headphones_battery f020
+headset f01f
+headset_mic e311
+headset_off e33a
+healing e3f3
+health_and_beauty ef9d
+health_and_safety e1d5
+health_cross f2c3
+health_metrics f6e2
+heap_snapshot_large f76e
+heap_snapshot_multiple f76d
+heap_snapshot_thumbnail f76c
+hearing e023
+hearing_aid f464
+hearing_aid_disabled f3b0
+hearing_aid_disabled_left f2ec
+hearing_aid_left f2ed
+hearing_disabled f104
+heart_broken eac2
+heart_check f60a
+heart_minus f883
+heart_plus f884
+heart_smile f292
+heat f537
+heat_pump ec18
+heat_pump_balance e27e
+height ea16
+helicopter f60c
+help e8fd
+help_center f1c0
+help_clinic f810
+help_outline e8fd
+hematology e0f6
+hevc f021
+hexagon eb39
+hide ef9e
+hide_image f022
+hide_source f023
+high_chair f29a
+high_density f79c
+high_quality e024
+high_res f54b
+highlight e25f
+highlight_alt ef52
+highlight_keyboard_focus f510
+highlight_mouse_cursor f511
+highlight_off e888
+highlight_text_cursor f512
+highlighter_size_1 f76b
+highlighter_size_2 f76a
+highlighter_size_3 f769
+highlighter_size_4 f768
+highlighter_size_5 f767
+hiking e50a
+history e8b3
+history_2 f3e6
+history_edu ea3e
+history_off f4da
+history_toggle_off f17d
+hive eaa6
+hls eb8a
+hls_off eb8c
+holiday_village e58a
+home e9b2
+home_and_garden ef9f
+home_app_logo e295
+home_filled e9b2
+home_health e4b9
+home_improvement_and_tools efa0
+home_iot_device e283
+home_max f024
+home_max_dots e849
+home_mini f025
+home_pin f14d
+home_repair_service f100
+home_speaker f11c
+home_storage f86c
+home_work f030
+horizontal_distribute e014
+horizontal_rule f108
+horizontal_split e947
+host f3d9
+hot_tub eb46
+hotel e549
+hotel_class e743
+hourglass ebff
+hourglass_arrow_down f37e
+hourglass_arrow_up f37d
+hourglass_bottom ea5c
+hourglass_disabled ef53
+hourglass_empty e88b
+hourglass_full e88c
+hourglass_pause f38c
+hourglass_top ea5b
+house ea44
+house_siding f202
+house_with_shield e786
+houseboat e584
+household_supplies efa1
+hov f475
+how_to_reg e174
+how_to_vote e175
+hr_resting f6ba
+html eb7e
+http e902
+https e899
+hub e9f4
+humerus f895
+humerus_alt f896
+humidity_high f163
+humidity_indoor f558
+humidity_low f164
+humidity_mid f165
+humidity_percentage f87e
+hvac f10e
+hvac_max_defrost f332
+ice_skating e50b
+icecream ea69
+id_card f4ca
+identity_aware_proxy e2dd
+identity_platform ebb7
+ifl e025
+iframe f71b
+iframe_off f71c
+image e3f4
+image_arrow_up f317
+image_aspect_ratio e3f5
+image_inset f247
+image_not_supported f116
+image_search e43f
+imagesearch_roller e9b4
+imagesmode efa2
+immunology e0fb
+import_contacts e0e0
+import_export e8d5
+important_devices e912
+in_home_mode e833
+inactive_order e0fc
+inbox e156
+inbox_customize f859
+inbox_text f399
+inbox_text_asterisk f360
+inbox_text_person f35e
+inbox_text_share f35c
+incomplete_circle e79b
+indeterminate_check_box e909
+indeterminate_question_box f56d
+info e88e
+info_i f59b
+infrared f87c
+ink_eraser e6d0
+ink_eraser_off e7e3
+ink_highlighter e6d1
+ink_highlighter_move f524
+ink_marker e6d2
+ink_pen e6d3
+ink_selection ef52
+inpatient e0fe
+input e890
+input_circle f71a
+insert_chart f0cc
+insert_chart_filled f0cc
+insert_chart_outlined f0cc
+insert_comment e24c
+insert_drive_file e66d
+insert_emoticon ea22
+insert_invitation e878
+insert_link e250
+insert_page_break eaca
+insert_photo e3f4
+insert_text f827
+insights f092
+install_desktop eb71
+install_mobile f2cd
+instant_mix e026
+integration_instructions ef54
+interactive_space f7ff
+interests e7c8
+interpreter_mode e83b
+inventory e179
+inventory_2 e1a1
+invert_colors e891
+invert_colors_off e0c4
+ios e027
+ios_share e6b8
+iron e583
+iso e3f6
+jamboard_kiosk e9b5
+japanese_curry f284
+japanese_flag f283
+javascript eb7c
+join f84f
+join_full f84f
+join_inner eaf4
+join_left eaf2
+join_right eaea
+joystick f5ee
+jump_to_element f719
+kanji_alcohol f23e
+kayaking e50c
+kebab_dining e842
+keep f026
+keep_off e6f9
+keep_pin f026
+keep_public f56f
+kettle e2b9
+key e73c
+key_off eb84
+key_vertical f51a
+key_visualizer f199
+keyboard e312
+keyboard_alt f028
+keyboard_arrow_down e313
+keyboard_arrow_left e314
+keyboard_arrow_right e315
+keyboard_arrow_up e316
+keyboard_backspace e317
+keyboard_capslock e318
+keyboard_capslock_badge f7de
+keyboard_command_key eae7
+keyboard_control_key eae6
+keyboard_double_arrow_down ead0
+keyboard_double_arrow_left eac3
+keyboard_double_arrow_right eac9
+keyboard_double_arrow_up eacf
+keyboard_external_input f7dd
+keyboard_full f7dc
+keyboard_hide e31a
+keyboard_keys f67b
+keyboard_lock f492
+keyboard_lock_off f491
+keyboard_off f67a
+keyboard_onscreen f7db
+keyboard_option_key eae8
+keyboard_previous_language f7da
+keyboard_return e31b
+keyboard_tab e31c
+keyboard_tab_rtl ec73
+keyboard_voice e31d
+kid_star f526
+king_bed ea45
+kitchen eb47
+kitesurfing e50d
+lab_panel e103
+lab_profile e104
+lab_research f80b
+label e893
+label_important e948
+label_important_outline e948
+label_off e9b6
+label_outline e893
+labs e105
+lan eb2f
+landscape e564
+landscape_2 f4c4
+landscape_2_edit f310
+landscape_2_off f4c3
+landslide ebd7
+language e894
+language_chinese_array f766
+language_chinese_cangjie f765
+language_chinese_dayi f764
+language_chinese_pinyin f763
+language_chinese_quick f762
+language_chinese_wubi f761
+language_french f760
+language_gb_english f75f
+language_international f75e
+language_japanese_kana f513
+language_korean_latin f75d
+language_pinyin f75c
+language_spanish f5e9
+language_us f759
+language_us_colemak f75b
+language_us_dvorak f75a
+laps f6b9
+laptop e31e
+laptop_car f3cd
+laptop_chromebook e31f
+laptop_mac e320
+laptop_windows e321
+lasso_select eb03
+last_page e5dd
+launch e89e
+laundry e2a8
+layers e53b
+layers_clear e53c
+lda e106
+leaderboard f20c
+leak_add e3f8
+leak_remove e3f9
+left_click f718
+left_panel_close f717
+left_panel_open f716
+legend_toggle f11b
+lens e3fa
+lens_blur f029
+letter_switch f758
+library_add e03c
+library_add_check e9b7
+library_books e02f
+library_music e030
+license eb04
+lift_to_talk efa3
+light f02a
+light_group e28b
+light_mode e518
+light_off e9b8
+lightbulb e90f
+lightbulb_2 f3e3
+lightbulb_circle ebfe
+lightbulb_outline e90f
+lightning_stand efa4
+line_axis ea9a
+line_curve f757
+line_end f826
+line_end_arrow f81d
+line_end_arrow_notch f81c
+line_end_circle f81b
+line_end_diamond f81a
+line_end_square f819
+line_start f825
+line_start_arrow f818
+line_start_arrow_notch f817
+line_start_circle f816
+line_start_diamond f815
+line_start_square f814
+line_style e919
+line_weight e91a
+linear_scale e260
+link e250
+link_off e16f
+linked_camera e438
+linked_services f535
+liquor ea60
+list e896
+list_alt e0ee
+list_alt_add f756
+list_alt_check f3de
+lists e9b9
+live_help e0c6
+live_tv e63a
+living f02b
+local_activity e553
+local_airport e53d
+local_atm e53e
+local_bar e540
+local_cafe eb44
+local_car_wash e542
+local_convenience_store e543
+local_dining e561
+local_drink e544
+local_fire_department ef55
+local_florist e545
+local_gas_station e546
+local_grocery_store e8cc
+local_hospital e548
+local_hotel e549
+local_laundry_service e54a
+local_library e54b
+local_mall e54c
+local_movies e8da
+local_offer f05b
+local_parking e54f
+local_pharmacy e550
+local_phone f0d4
+local_pizza e552
+local_play e553
+local_police ef56
+local_post_office e554
+local_printshop e8ad
+local_see e557
+local_shipping e558
+local_taxi e559
+location_automation f14f
+location_away f150
+location_chip f850
+location_city e7f1
+location_disabled e1b6
+location_home f152
+location_off e0c7
+location_on f1db
+location_pin f1db
+location_searching e1b7
+locator_tag f8c1
+lock e899
+lock_clock ef57
+lock_open e898
+lock_open_circle f361
+lock_open_right f656
+lock_outline e899
+lock_person f8f3
+lock_reset eade
+login ea77
+logo_dev ead6
+logout e9ba
+looks e3fc
+looks_3 e3fb
+looks_4 e3fd
+looks_5 e3fe
+looks_6 e3ff
+looks_one e400
+looks_two e401
+loop e863
+loupe e402
+low_density f79b
+low_priority e16d
+lowercase f48a
+loyalty e89a
+lte_mobiledata f02c
+lte_mobiledata_badge f7d9
+lte_plus_mobiledata f02d
+lte_plus_mobiledata_badge f7d8
+luggage f235
+lunch_dining ea61
+lyrics ec0b
+macro_auto f6f2
+macro_off f8d2
+magic_button f136
+magic_exchange f7f4
+magic_tether f7d7
+magnification_large f83d
+magnification_small f83c
+magnify_docked f7d6
+magnify_fullscreen f7d5
+mail e159
+mail_asterisk eef4
+mail_lock ec0a
+mail_off f48b
+mail_outline e159
+mail_shield f249
+male e58e
+man e4eb
+man_2 f8e1
+man_3 f8e2
+man_4 f8e3
+manage_accounts f02e
+manage_history ebe7
+manage_search f02f
+manga f5e3
+manufacturing e726
+map e55b
+map_pin_heart f298
+map_pin_review f297
+map_search f3ca
+maps_home_work f030
+maps_ugc ef58
+margin e9bb
+mark_as_unread e9bc
+mark_chat_read f18b
+mark_chat_unread f189
+mark_email_read f18c
+mark_email_unread f18a
+mark_unread_chat_alt eb9d
+markdown f552
+markdown_copy f553
+markdown_paste f554
+markunread e159
+markunread_mailbox e89b
+masked_transitions e72e
+masked_transitions_add f42b
+masks f218
+massage f2c2
+match_case f6f1
+match_case_off f36f
+match_word f6f0
+matter e907
+maximize e930
+meal_dinner f23d
+meal_lunch f23c
+measuring_tape f6af
+media_bluetooth_off f031
+media_bluetooth_on f032
+media_link f83f
+media_output f4f2
+media_output_off f4f3
+mediation efa7
+medical_information ebed
+medical_mask f80a
+medical_services f109
+medication f033
+medication_liquid ea87
+meeting_room eb4f
+memory e322
+memory_alt f7a3
+menstrual_health f6e1
+menu e5d2
+menu_book ea19
+menu_book_2 f291
+menu_open e9bd
+merge eb98
+merge_type e252
+message e0c9
+metabolism e10b
+metro f474
+mfg_nest_yale_lock f11d
+mic e31d
+mic_alert f392
+mic_double f5d1
+mic_external_off ef59
+mic_external_on ef5a
+mic_none e31d
+mic_off e02b
+microbiology e10c
+microwave f204
+microwave_gen e847
+military_tech ea3f
+mimo e9be
+mimo_disconnect e9bf
+mindfulness f6e0
+minimize e931
+minor_crash ebf1
+mintmark efa9
+missed_video_call f0ce
+missed_video_call_filled f0ce
+missing_controller e701
+mist e188
+mitre f547
+mixture_med e4c8
+mms e618
+mobile e7ba
+mobile_2 f2db
+mobile_3 f2da
+mobile_alert f2d3
+mobile_arrow_down f2cd
+mobile_arrow_right f2d2
+mobile_arrow_up_right f2b9
+mobile_block f2e5
+mobile_camera f44e
+mobile_camera_front f2c9
+mobile_camera_rear f2c8
+mobile_cancel f2ea
+mobile_cast f2cc
+mobile_charge f2e3
+mobile_chat f79f
+mobile_check f073
+mobile_code f2e2
+mobile_dots f2d0
+mobile_friendly f073
+mobile_gear f2d9
+mobile_hand f323
+mobile_hand_left f313
+mobile_hand_left_off f312
+mobile_hand_off f314
+mobile_info f2dc
+mobile_landscape ed3e
+mobile_layout f2bf
+mobile_lock_landscape f2d8
+mobile_lock_portrait f2be
+mobile_loupe f322
+mobile_menu f2d1
+mobile_off e201
+mobile_question f2e1
+mobile_rotate f2d5
+mobile_rotate_lock f2d6
+mobile_screen_share f2df
+mobile_screensaver f321
+mobile_sensor_hi f2ef
+mobile_sensor_lo f2ee
+mobile_share f2df
+mobile_share_stack f2de
+mobile_sound f2e8
+mobile_sound_2 f318
+mobile_sound_off f7aa
+mobile_speaker f320
+mobile_text f2eb
+mobile_text_2 f2e6
+mobile_theft f2a9
+mobile_ticket f2e4
+mobile_vibrate f2cb
+mobile_wrench f2b0
+mobiledata_off f034
+mode f097
+mode_comment e253
+mode_cool f166
+mode_cool_off f167
+mode_dual f557
+mode_edit f097
+mode_edit_outline f097
+mode_fan f168
+mode_fan_off ec17
+mode_heat f16a
+mode_heat_cool f16b
+mode_heat_off f16d
+mode_night f036
+mode_of_travel e7ce
+mode_off_on f16f
+mode_standby f037
+model_training f0cf
+modeling f3aa
+monetization_on e263
+money e57d
+money_bag f3ee
+money_off f038
+money_off_csred f038
+money_range f245
+monitor ef5b
+monitor_heart eaa2
+monitor_weight f039
+monitor_weight_gain f6df
+monitor_weight_loss f6de
+monitoring f190
+monochrome_photos e403
+monorail f473
+mood ea22
+mood_bad e7f3
+moon_stars f34f
+mop e28d
+moped eb28
+moped_package f28b
+more e619
+more_down f196
+more_horiz e5d3
+more_time ea5d
+more_up f197
+more_vert e5d4
+mosque eab2
+motion_blur f0d0
+motion_mode f842
+motion_photos_auto f03a
+motion_photos_off e9c0
+motion_photos_on e9c1
+motion_photos_pause f227
+motion_photos_paused f227
+motion_play f40b
+motion_sensor_active e792
+motion_sensor_alert e784
+motion_sensor_idle e783
+motion_sensor_urgent e78e
+motorcycle e91b
+mountain_flag f5e2
+mountain_steam f282
+mouse e323
+mouse_lock f490
+mouse_lock_off f48f
+move e740
+move_down eb61
+move_group f715
+move_item f1ff
+move_location e741
+move_selection_down f714
+move_selection_left f713
+move_selection_right f712
+move_selection_up f711
+move_to_inbox e168
+move_up eb64
+moved_location e594
+movie e404
+movie_creation e404
+movie_edit f840
+movie_filter e43a
+movie_info e02d
+movie_off f499
+movie_speaker f2a3
+moving e501
+moving_beds e73d
+moving_ministry e73e
+mp e9c3
+multicooker e293
+multiline_chart e6df
+multimodal_hand_eye f41b
+multiple_airports efab
+multiple_stop f1b9
+museum ea36
+music_cast eb1a
+music_history f2c1
+music_note e405
+music_note_add f391
+music_off e440
+music_video e063
+my_location e55c
+mystery f5e1
+nat ef5c
+nature e406
+nature_people e407
+navigate_before e5cb
+navigate_next e5cc
+navigation e55d
+near_me e569
+near_me_disabled f1ef
+nearby e6b7
+nearby_error f03b
+nearby_off f03c
+nephrology e10d
+nest_audio ebbf
+nest_cam_floodlight f8b7
+nest_cam_indoor f11e
+nest_cam_iq f11f
+nest_cam_iq_outdoor f120
+nest_cam_magnet_mount f8b8
+nest_cam_outdoor f121
+nest_cam_stand f8b9
+nest_cam_wall_mount f8ba
+nest_cam_wired_stand ec16
+nest_clock_farsight_analog f8bb
+nest_clock_farsight_digital f8bc
+nest_connect f122
+nest_detect f123
+nest_display f124
+nest_display_max f125
+nest_doorbell_visitor f8bd
+nest_eco_leaf f8be
+nest_farsight_cool f27d
+nest_farsight_dual f27c
+nest_farsight_eco f27b
+nest_farsight_heat f27a
+nest_farsight_seasonal f279
+nest_farsight_weather f8bf
+nest_found_savings f8c0
+nest_gale_wifi f579
+nest_heat_link_e f126
+nest_heat_link_gen_3 f127
+nest_hello_doorbell e82c
+nest_locator_tag f8c1
+nest_mini e789
+nest_multi_room f8c2
+nest_protect e68e
+nest_remote f5db
+nest_remote_comfort_sensor f12a
+nest_secure_alarm f12b
+nest_sunblock f8c3
+nest_tag f8c1
+nest_thermostat e68f
+nest_thermostat_e_eu f12d
+nest_thermostat_gen_3 f12e
+nest_thermostat_sensor f12f
+nest_thermostat_sensor_eu f130
+nest_thermostat_zirconium_eu f131
+nest_true_radiant f8c4
+nest_wake_on_approach f8c5
+nest_wake_on_press f8c6
+nest_wifi_gale f132
+nest_wifi_mistral f133
+nest_wifi_point f134
+nest_wifi_point_vento f134
+nest_wifi_pro f56b
+nest_wifi_pro_2 f56a
+nest_wifi_router f133
+network_cell e1b9
+network_check e640
+network_intel_node f371
+network_intelligence efac
+network_intelligence_history f5f6
+network_intelligence_update f5f5
+network_locked e61a
+network_manage f7ab
+network_node f56e
+network_ping ebca
+network_wifi e1ba
+network_wifi_1_bar ebe4
+network_wifi_1_bar_locked f58f
+network_wifi_2_bar ebd6
+network_wifi_2_bar_locked f58e
+network_wifi_3_bar ebe1
+network_wifi_3_bar_locked f58d
+network_wifi_locked f532
+neurology e10e
+new_label e609
+new_releases ef76
+new_window f710
+news e032
+newsmode efad
+newspaper eb81
+newsstand e9c4
+next_plan ef5d
+next_week e16a
+nfc e1bb
+nfc_off f369
+night_shelter f1f1
+night_sight_auto f1d7
+night_sight_auto_off f1f9
+night_sight_max f6c3
+nightlife ea62
+nightlight f03d
+nightlight_round f03d
+nights_stay f174
+no_accounts f03e
+no_adult_content f8fe
+no_backpack f237
+no_crash ebf0
+no_drinks f1a5
+no_encryption f03f
+no_encryption_gmailerrorred f03f
+no_flash f1a6
+no_food f1a7
+no_luggage f23b
+no_meals f1d6
+no_meeting_room eb4e
+no_photography f1a8
+no_sim e1ce
+no_sound e710
+no_stroller f1af
+no_transfer f1d5
+noise_aware ebec
+noise_control_off ebf3
+noise_control_on f8a8
+nordic_walking e50e
+north f1e0
+north_east f1e1
+north_west f1e2
+not_accessible f0fe
+not_accessible_forward f54a
+not_interested f08c
+not_listed_location e575
+not_started f0d1
+note e66d
+note_add e89c
+note_alt f040
+note_stack f562
+note_stack_add f563
+notes e26c
+notification_add e399
+notification_important e004
+notification_multiple e6c2
+notification_settings f367
+notification_sound f353
+notifications e7f5
+notifications_active e7f7
+notifications_none e7f5
+notifications_off e7f6
+notifications_paused e7f8
+notifications_unread f4fe
+numbers eac7
+nutrition e110
+ods e6e8
+odt e6e9
+offline_bolt e932
+offline_pin e90a
+offline_pin_off f4d0
+offline_share f2de
+oil_barrel ec15
+okonomiyaki f281
+on_device_training ebfd
+on_hub_device e6c3
+oncology e114
+ondemand_video e63a
+online_prediction f0eb
+onsen f6f8
+opacity e91c
+open_in_browser e89d
+open_in_full f1ce
+open_in_new e89e
+open_in_new_down f70f
+open_in_new_off e4f6
+open_in_phone f2d2
+open_jam efae
+open_run f4b7
+open_with e89f
+ophthalmology e115
+oral_disease e116
+orbit f426
+order_approve f812
+order_play f811
+orders eb14
+orthopedics f897
+other_admission e47b
+other_houses e58c
+outbound e1ca
+outbox ef5f
+outbox_alt eb17
+outdoor_garden e205
+outdoor_grill ea47
+outgoing_mail f0d2
+outlet f1d4
+outlined_flag f0c6
+outpatient e118
+outpatient_med e119
+output ebbe
+output_circle f70e
+oven e9c7
+oven_gen e843
+overview e4a7
+overview_key f7d4
+owl f3b4
+oxygen_saturation e4de
+p2p f52a
+pace f6b8
+pacemaker e656
+package e48f
+package_2 f569
+padding e9c8
+padel f2a7
+page_control e731
+page_footer f383
+page_header f384
+page_info f614
+page_menu_ios eefb
+pageless f509
+pages e7f9
+pageview e8a0
+paid f041
+palette e40a
+pallet f86a
+pan_tool e925
+pan_tool_alt ebb9
+pan_zoom f655
+panorama e40b
+panorama_fish_eye e40c
+panorama_horizontal e40d
+panorama_photosphere e9c9
+panorama_vertical e40e
+panorama_wide_angle e40f
+paragliding e50f
+parent_child_dining f22d
+park ea63
+parking_meter f28a
+parking_sign f289
+parking_valet f288
+partly_cloudy_day f172
+partly_cloudy_night f174
+partner_exchange f7f9
+partner_heart ef2e
+partner_reports efaf
+party_mode e7fa
+passkey f87f
+password f042
+password_2 f4a9
+password_2_off f4a8
+patient_list e653
+pattern f043
+pause e034
+pause_circle e1a2
+pause_circle_filled e1a2
+pause_circle_outline e1a2
+pause_presentation e0ea
+payment e8a1
+payment_arrow_down f2c0
+payment_card f2a1
+payments ef63
+pedal_bike eb29
+pediatrics e11d
+pen_size_1 f755
+pen_size_2 f754
+pen_size_3 f753
+pen_size_4 f752
+pen_size_5 f751
+pending ef64
+pending_actions f1bb
+pentagon eb50
+people ea21
+people_alt ea21
+people_outline ea21
+percent eb58
+percent_discount f244
+performance_max e51a
+pergola e203
+perm_camera_mic e8a2
+perm_contact_calendar e8a3
+perm_data_setting e8a4
+perm_device_information f2dc
+perm_identity f0d3
+perm_media e8a7
+perm_phone_msg e8a8
+perm_scan_wifi e8a9
+person f0d3
+person_2 f8e4
+person_3 f8e5
+person_4 f8e6
+person_add ea4d
+person_add_alt ea4d
+person_add_disabled e9cb
+person_alert f567
+person_apron f5a3
+person_book f5e8
+person_cancel f566
+person_celebrate f7fe
+person_check f565
+person_edit f4fa
+person_filled f0d3
+person_heart f290
+person_off e510
+person_outline f0d3
+person_pin e55a
+person_pin_circle e56a
+person_play f7fd
+person_raised_hand f59a
+person_remove ef66
+person_search f106
+person_shield e384
+personal_bag eb0e
+personal_bag_off eb0f
+personal_bag_question eb10
+personal_injury e6da
+personal_places e703
+personal_video e63b
+pest_control f0fa
+pest_control_rodent f0fd
+pet_supplies efb1
+pets e91d
+phishing ead7
+phone f0d4
+phone_alt f0d4
+phone_android f2db
+phone_bluetooth_speaker e61b
+phone_callback e649
+phone_disabled e9cc
+phone_enabled e9cd
+phone_forwarded e61c
+phone_in_talk e61d
+phone_iphone f2da
+phone_locked e61e
+phone_missed e61f
+phone_paused e620
+phonelink e326
+phonelink_erase f2ea
+phonelink_lock f2be
+phonelink_off f7a5
+phonelink_ring f2e8
+phonelink_ring_off f7aa
+phonelink_setup f2d9
+photo e432
+photo_album e411
+photo_auto_merge f530
+photo_camera e412
+photo_camera_back ef68
+photo_camera_front ef69
+photo_filter e43b
+photo_frame f0d9
+photo_library e413
+photo_prints efb2
+photo_size_select_actual e432
+photo_size_select_large e433
+photo_size_select_small e434
+php eb8f
+physical_therapy e11e
+piano e521
+piano_off e520
+pickleball f2a6
+picture_as_pdf e415
+picture_in_picture e8aa
+picture_in_picture_alt e911
+picture_in_picture_center f550
+picture_in_picture_large f54f
+picture_in_picture_medium f54e
+picture_in_picture_mobile f517
+picture_in_picture_off f52f
+picture_in_picture_small f54d
+pie_chart f0da
+pie_chart_filled f0da
+pie_chart_outline f0da
+pie_chart_outlined f0da
+pill e11f
+pill_off f809
+pin f045
+pin_drop e55e
+pin_end e767
+pin_invoke e763
+pinboard f3ab
+pinboard_unread f3ac
+pinch eb38
+pinch_zoom_in f1fa
+pinch_zoom_out f1fb
+pip f64d
+pip_exit f70d
+pivot_table_chart e9ce
+place f1db
+place_item f1f0
+plagiarism ea5a
+plane_contrails f2ac
+planet f387
+planner_banner_ad_pt e692
+planner_review e694
+play_arrow e037
+play_circle e1c4
+play_disabled ef6a
+play_for_work e906
+play_lesson f047
+play_music e6ee
+play_pause f137
+play_shapes f7fc
+playground f28e
+playground_2 f28f
+playing_cards f5dc
+playlist_add e03b
+playlist_add_check e065
+playlist_add_check_circle e7e6
+playlist_add_circle e7e5
+playlist_play e05f
+playlist_remove eb80
+plug_connect f35a
+plumbing f107
+plus_one e800
+podcasts f048
+podiatry e120
+podium f7fb
+point_of_sale f17e
+point_scan f70c
+poker_chip f49b
+policy ea17
+policy_alert f407
+poll f0cc
+polyline ebbb
+polymer e8ab
+pool eb48
+portable_wifi_off f087
+portrait e851
+position_bottom_left f70b
+position_bottom_right f70a
+position_top_right f709
+post e705
+post_add ea20
+potted_plant f8aa
+power e63c
+power_input e336
+power_off e646
+power_rounded f8c7
+power_settings_circle f418
+power_settings_new f8c7
+prayer_times f838
+precision_manufacturing f049
+pregnancy f5f1
+pregnant_woman f5f1
+preliminary e7d8
+prescriptions e121
+present_to_all e0df
+preview f1c5
+preview_off f7af
+price_change f04a
+price_check f04b
+print e8ad
+print_add f7a2
+print_connect f7a1
+print_disabled e9cf
+print_error f7a0
+print_lock f651
+priority e19f
+priority_high e645
+privacy f148
+privacy_tip f0dc
+private_connectivity e744
+problem e122
+procedure e651
+process_chart f855
+production_quantity_limits e1d1
+productivity e296
+progress_activity e9d0
+prompt_suggestion f4f6
+propane ec14
+propane_tank ec13
+psychiatry e123
+psychology ea4a
+psychology_alt f8ea
+public e80b
+public_off f1ca
+publish e255
+published_with_changes f232
+pulmonology e124
+pulse_alert f501
+punch_clock eaa8
+push_pin f10d
+qr_code ef6b
+qr_code_2 e00a
+qr_code_2_add f658
+qr_code_scanner f206
+query_builder efd6
+query_stats e4fc
+question_answer e8af
+question_exchange f7f3
+question_mark eb8b
+queue e03c
+queue_music e03d
+queue_play_next e066
+quick_phrases e7d1
+quick_reference e46e
+quick_reference_all f801
+quick_reorder eb15
+quickreply ef6c
+quiet_time f159
+quiet_time_active eb76
+quiz f04c
+r_mobiledata f04d
+radar f04e
+radio e03e
+radio_button_checked e837
+radio_button_partial f560
+radio_button_unchecked e836
+radiology e125
+railway_alert e9d1
+railway_alert_2 f461
+rainy f176
+rainy_heavy f61f
+rainy_light f61e
+rainy_snow f61d
+ramen_dining ea64
+ramp_left eb9c
+ramp_right eb96
+range_hood e1ea
+rate_review e560
+rate_review_rtl e706
+raven f555
+raw_off f04f
+raw_on f050
+read_more ef6d
+readiness_score f6dd
+real_estate_agent e73a
+rear_camera f6c2
+rebase f845
+rebase_edit f846
+receipt e8b0
+receipt_long ef6e
+receipt_long_off f40a
+recent_actors e03f
+recent_patient f808
+recenter f4c0
+recommend e9d2
+record_voice_over e91f
+rectangle eb54
+recycling e760
+redeem e8f6
+redo e15a
+reduce_capacity f21c
+refresh e5d5
+regular_expression f750
+relax f6dc
+release_alert f654
+remember_me f051
+reminder e6c6
+reminders_alt e6c6
+remote_gen e83e
+remove e15b
+remove_circle f08f
+remove_circle_outline f08f
+remove_done e9d3
+remove_from_queue e067
+remove_moderator e9d4
+remove_red_eye e8f4
+remove_road ebfc
+remove_selection e9d5
+remove_shopping_cart e928
+reopen_window f708
+reorder e8fe
+repartition f8e8
+repeat e040
+repeat_on e9d6
+repeat_one e041
+repeat_one_on e9d7
+replace_audio f451
+replace_image f450
+replace_video f44f
+replay e042
+replay_10 e059
+replay_30 e05a
+replay_5 e05b
+replay_circle_filled e9d8
+reply e15e
+reply_all e15f
+report f052
+report_gmailerrorred f052
+report_off e170
+report_problem f083
+request_page f22c
+request_quote f1b6
+reset_brightness f482
+reset_exposure f266
+reset_focus f481
+reset_image f824
+reset_iso f480
+reset_settings f47f
+reset_shadow f47e
+reset_shutter_speed f47d
+reset_tv e9d9
+reset_white_balance f47c
+reset_wrench f56c
+resize f707
+respiratory_rate e127
+responsive_layout e9da
+rest_area f22a
+restart_alt f053
+restaurant e56c
+restaurant_menu e561
+restore e8b3
+restore_from_trash e938
+restore_page e929
+resume f7d0
+reviews f07c
+rewarded_ads efb6
+rheumatology e128
+rib_cage f898
+rice_bowl f1f5
+right_click f706
+right_panel_close f705
+right_panel_open f704
+ring_volume f0dd
+ring_volume_filled f0dd
+ripples e9db
+road f472
+robot f882
+robot_2 f5d0
+rocket eba5
+rocket_launch eb9b
+roller_shades ec12
+roller_shades_closed ec11
+roller_skating ebcd
+roofing f201
+room f1db
+room_preferences f1b8
+room_service eb49
+rotate_90_degrees_ccw e418
+rotate_90_degrees_cw eaab
+rotate_auto f417
+rotate_left e419
+rotate_right e41a
+roundabout_left eb99
+roundabout_right eba3
+rounded_corner e920
+route eacd
+router e328
+router_off f2f4
+routine e20c
+rowing e921
+rss_feed e0e5
+rsvp f055
+rtt e9ad
+rubric eb27
+rule f1c2
+rule_folder f1c9
+rule_settings f64c
+run_circle ef6f
+running_with_errors e51d
+rv_hookup e642
+safety_check ebef
+safety_check_off f59d
+safety_divider e1cc
+sailing e502
+salinity f876
+sanitizer f21d
+satellite e562
+satellite_alt eb3a
+sauna f6f7
+save e161
+save_alt f090
+save_as eb60
+save_clock f398
+saved_search ea11
+savings e2eb
+scale eb5f
+scan f74e
+scan_delete f74f
+scanner e329
+scatter_plot e268
+scene e2a7
+schedule efd6
+schedule_send ea0a
+schema e4fd
+school e80c
+science ea4b
+science_off f542
+scooter f471
+score e269
+scoreboard ebd0
+screen_lock_landscape f2d8
+screen_lock_portrait f2be
+screen_lock_rotation f2d6
+screen_record f679
+screen_rotation f2d5
+screen_rotation_alt ebee
+screen_rotation_up f678
+screen_search_desktop ef70
+screen_share e0e2
+screenshot f056
+screenshot_frame f677
+screenshot_frame_2 f374
+screenshot_keyboard f7d3
+screenshot_monitor ec08
+screenshot_region f7d2
+screenshot_tablet f697
+script f45f
+scrollable_header e9dc
+scuba_diving ebce
+sd e9dd
+sd_card e623
+sd_card_alert f057
+sd_storage e623
+sdk e720
+search e8b6
+search_activity f3e5
+search_check f800
+search_check_2 f469
+search_gear eefa
+search_hands_free e696
+search_insights f4bc
+search_off ea76
+seat_cool_left f331
+seat_cool_right f330
+seat_heat_left f32f
+seat_heat_right f32e
+seat_vent_left f32d
+seat_vent_right f32c
+security e32a
+security_key f503
+security_update f2cd
+security_update_good f073
+security_update_warning f2d3
+segment e94b
+select f74d
+select_all e162
+select_check_box f1fe
+select_to_speak f7cf
+select_window e6fa
+select_window_2 f4c8
+select_window_off e506
+self_care f86d
+self_improvement ea78
+sell f05b
+send e163
+send_and_archive ea0c
+send_money e8b7
+send_time_extension eadb
+send_to_mobile f2d2
+sensor_door f1b5
+sensor_occupied ec10
+sensor_window f1b4
+sensors e51e
+sensors_krx f556
+sensors_krx_off f515
+sensors_off e51f
+sentiment_calm f6a7
+sentiment_content f6a6
+sentiment_dissatisfied e811
+sentiment_excited f6a5
+sentiment_extremely_dissatisfied f194
+sentiment_frustrated f6a4
+sentiment_neutral e812
+sentiment_sad f6a3
+sentiment_satisfied e813
+sentiment_satisfied_alt e813
+sentiment_stressed f6a2
+sentiment_very_dissatisfied e814
+sentiment_very_satisfied e815
+sentiment_worried f6a1
+serif f4ac
+server_person f3bd
+service_toolbox e717
+set_meal f1ea
+settings e8b8
+settings_accessibility f05d
+settings_account_box f835
+settings_alert f143
+settings_applications e8b9
+settings_b_roll f625
+settings_backup_restore e8ba
+settings_bluetooth e8bb
+settings_brightness e8bd
+settings_cell f2d1
+settings_cinematic_blur f624
+settings_ethernet e8be
+settings_heart f522
+settings_input_antenna e8bf
+settings_input_component e8c1
+settings_input_composite e8c1
+settings_input_hdmi e8c2
+settings_input_svideo e8c3
+settings_motion_mode f833
+settings_night_sight f832
+settings_overscan e8c4
+settings_panorama f831
+settings_phone e8c5
+settings_photo_camera f834
+settings_power e8c6
+settings_remote e8c7
+settings_seating ef2d
+settings_slow_motion f623
+settings_suggest f05e
+settings_system_daydream e1c3
+settings_timelapse f622
+settings_video_camera f621
+settings_voice e8c8
+settop_component e2ac
+severe_cold ebd3
+shadow e9df
+shadow_add f584
+shadow_minus f583
+shape_line f8d3
+shape_recognition eb01
+shapes e602
+share e80d
+share_eta e5f7
+share_location f05f
+share_off f6cb
+share_reviews f8a4
+share_windows f613
+shaved_ice f225
+sheets_rtl f823
+shelf_auto_hide f703
+shelf_position f702
+shelves f86e
+shield e9e0
+shield_lock f686
+shield_locked f592
+shield_moon eaa9
+shield_person f650
+shield_question f529
+shield_toggle f2ad
+shield_watch f30f
+shield_with_heart e78f
+shield_with_house e78d
+shift e5f2
+shift_lock f7ae
+shift_lock_off f483
+shop e8c9
+shop_2 e8ca
+shop_two e8ca
+shopping_bag f1cc
+shopping_bag_speed f39a
+shopping_basket e8cb
+shopping_cart e8cc
+shopping_cart_checkout eb88
+shopping_cart_off f4f7
+shoppingmode efb7
+short_stay e4d0
+short_text e261
+shortcut f57a
+show_chart e6e1
+shower f061
+shuffle e043
+shuffle_on e9e1
+shutter_speed e43d
+shutter_speed_add f57e
+shutter_speed_minus f57d
+sick f220
+side_navigation e9e2
+sign_language ebe5
+sign_language_2 f258
+signal_cellular_0_bar f0a8
+signal_cellular_1_bar f0a9
+signal_cellular_2_bar f0aa
+signal_cellular_3_bar f0ab
+signal_cellular_4_bar e1c8
+signal_cellular_add f7a9
+signal_cellular_alt e202
+signal_cellular_alt_1_bar ebdf
+signal_cellular_alt_2_bar ebe3
+signal_cellular_connected_no_internet_0_bar f0ac
+signal_cellular_connected_no_internet_4_bar e1cd
+signal_cellular_no_sim e1ce
+signal_cellular_nodata f062
+signal_cellular_null e1cf
+signal_cellular_off e1d0
+signal_cellular_pause f5a7
+signal_disconnected f239
+signal_wifi_0_bar f0b0
+signal_wifi_4_bar f065
+signal_wifi_4_bar_lock e1e1
+signal_wifi_bad f064
+signal_wifi_connected_no_internet_4 f064
+signal_wifi_off e1da
+signal_wifi_statusbar_4_bar f065
+signal_wifi_statusbar_not_connected f0ef
+signal_wifi_statusbar_null f067
+signature f74c
+signpost eb91
+sim_card e32b
+sim_card_alert f057
+sim_card_download f068
+simulation f3e1
+single_bed ea48
+sip f069
+siren f3a7
+siren_check f3a6
+siren_open f3a5
+siren_question f3a4
+skateboarding e511
+skeleton f899
+skillet f543
+skillet_cooktop f544
+skip_next e044
+skip_previous e045
+skull f89a
+skull_list f370
+slab_serif f4ab
+sledding e512
+sleep e213
+sleep_score f6b7
+slide_library f822
+sliders e9e3
+slideshow e41b
+slow_motion_video e068
+smart_button f1c1
+smart_card_reader f4a5
+smart_card_reader_off f4a6
+smart_display f06a
+smart_outlet e844
+smart_screen f2d0
+smart_toy f06c
+smartphone e7ba
+smartphone_camera f44e
+smb_share f74b
+smoke_free eb4a
+smoking_rooms eb4b
+sms e625
+sms_failed e87f
+snippet_folder f1c7
+snooze e046
+snowboarding e513
+snowing e80f
+snowing_heavy f61c
+snowmobile e503
+snowshoeing e514
+soap f1b2
+soba ef36
+social_distance e1cb
+social_leaderboard f6a0
+solar_power ec0f
+solo_dining ef35
+sort e164
+sort_by_alpha e053
+sos ebf7
+sound_detection_dog_barking f149
+sound_detection_glass_break f14a
+sound_detection_loud_sound f14b
+sound_sampler f6b4
+soup_kitchen e7d3
+source f1c8
+source_environment e527
+source_notes e12d
+south f1e3
+south_america e7e4
+south_east f1e4
+south_west f1e5
+spa eb4c
+space_bar e256
+space_dashboard e66b
+spatial_audio ebeb
+spatial_audio_off ebe8
+spatial_speaker f4cf
+spatial_tracking ebea
+speaker e32d
+speaker_group e32e
+speaker_notes e8cd
+speaker_notes_off e92a
+speaker_phone e0d2
+special_character f74a
+specific_gravity f872
+speech_to_text f8a7
+speed e9e4
+speed_0_25 f4d4
+speed_0_2x f498
+speed_0_5 f4e2
+speed_0_5x f497
+speed_0_75 f4d3
+speed_0_7x f496
+speed_1_2 f4e1
+speed_1_25 f4d2
+speed_1_2x f495
+speed_1_5 f4e0
+speed_1_5x f494
+speed_1_75 f4d1
+speed_1_7x f493
+speed_2x f4eb
+speed_camera f470
+spellcheck e8ce
+split_scene f3bf
+split_scene_down f2ff
+split_scene_left f2fe
+split_scene_right f2fd
+split_scene_up f2fc
+splitscreen f06d
+splitscreen_add f4fd
+splitscreen_bottom f676
+splitscreen_landscape f459
+splitscreen_left f675
+splitscreen_portrait f458
+splitscreen_right f674
+splitscreen_top f673
+splitscreen_vertical_add f4fc
+spo2 f6db
+spoke e9a7
+sports ea30
+sports_and_outdoors efb8
+sports_bar f1f3
+sports_baseball ea51
+sports_basketball ea26
+sports_cricket ea27
+sports_esports ea28
+sports_football ea29
+sports_golf ea2a
+sports_gymnastics ebc4
+sports_handball ea33
+sports_hockey ea2b
+sports_kabaddi ea34
+sports_martial_arts eae9
+sports_mma ea2c
+sports_motorsports ea2d
+sports_rugby ea2e
+sports_score f06e
+sports_soccer ea2f
+sports_tennis ea32
+sports_volleyball ea31
+sprinkler e29a
+sprint f81f
+square eb36
+square_dot f3b3
+square_foot ea49
+ssid_chart eb66
+stack f609
+stack_group f359
+stack_hexagon f41c
+stack_off f608
+stack_star f607
+stacked_bar_chart e9e6
+stacked_email e6c7
+stacked_inbox e6c9
+stacked_line_chart f22b
+stacks f500
+stadia_controller f135
+stadium eb90
+stairs f1a9
+stairs_2 f46c
+star f09a
+star_border f09a
+star_border_purple500 f09a
+star_half e839
+star_outline f09a
+star_purple500 f09a
+star_rate f0ec
+star_rate_half ec45
+star_shine f31d
+stars e8d0
+stars_2 f31c
+start e089
+stat_0 e697
+stat_1 e698
+stat_2 e699
+stat_3 e69a
+stat_minus_1 e69b
+stat_minus_2 e69c
+stat_minus_3 e69d
+stay_current_landscape ed3e
+stay_current_portrait e7ba
+stay_primary_landscape ed3e
+stay_primary_portrait f2d3
+steering_wheel_heat f32b
+step f6fe
+step_into f701
+step_out f700
+step_over f6ff
+steppers e9e7
+steps f6da
+stethoscope f805
+stethoscope_arrow f807
+stethoscope_check f806
+sticky_note e9e8
+sticky_note_2 f1fc
+stock_media f570
+stockpot f545
+stop e047
+stop_circle ef71
+stop_screen_share e0e3
+storage e1db
+store e8d1
+store_mall_directory e8d1
+storefront ea12
+storm f070
+straight eb95
+straighten e41c
+strategy f5df
+stream e9e9
+stream_apps f79f
+streetview e56e
+stress_management f6d9
+strikethrough_s e257
+stroke_full f749
+stroke_partial f748
+stroller f1ae
+style e41d
+styler e273
+stylus f604
+stylus_brush f366
+stylus_fountain_pen f365
+stylus_highlighter f364
+stylus_laser_pointer f747
+stylus_note f603
+stylus_pen f363
+stylus_pencil f362
+subdirectory_arrow_left e5d9
+subdirectory_arrow_right e5da
+subheader e9ea
+subject e8d2
+subscript f111
+subscriptions e064
+subtitles e048
+subtitles_gear f355
+subtitles_off ef72
+subway e56f
+subway_walk f287
+summarize f071
+sunny e81a
+sunny_snowing e819
+superscript f112
+supervised_user_circle e939
+supervised_user_circle_off f60e
+supervisor_account e8d3
+support ef73
+support_agent f0e2
+surfing e515
+surgical e131
+surround_sound e049
+swap_calls e0d7
+swap_driving_apps e69e
+swap_driving_apps_wheel e69f
+swap_horiz e8d4
+swap_horizontal_circle e933
+swap_vert e8d5
+swap_vertical_circle e8d6
+sweep e6ac
+swipe e9ec
+swipe_down eb53
+swipe_down_alt eb30
+swipe_left eb59
+swipe_left_alt eb33
+swipe_right eb52
+swipe_right_alt eb56
+swipe_up eb2e
+swipe_up_alt eb35
+swipe_vertical eb51
+switch e1f4
+switch_access f6fd
+switch_access_2 f506
+switch_access_3 f34d
+switch_access_shortcut e7e1
+switch_access_shortcut_add e7e2
+switch_account e9ed
+switch_camera e41e
+switch_left f1d1
+switch_right f1d2
+switch_video e41f
+switches e733
+sword_rose f5de
+swords f889
+symptoms e132
+synagogue eab0
+sync e627
+sync_alt ea18
+sync_arrow_down f37c
+sync_arrow_up f37b
+sync_desktop f41a
+sync_disabled e628
+sync_lock eaee
+sync_problem e629
+sync_saved_locally f820
+sync_saved_locally_off f264
+syringe e133
+system_security_update f2cd
+system_security_update_good f073
+system_security_update_warning f2d3
+system_update f2cd
+system_update_alt e8d7
+tab e8d8
+tab_close f745
+tab_close_inactive f3d0
+tab_close_right f746
+tab_duplicate f744
+tab_group f743
+tab_inactive f43b
+tab_move f742
+tab_new_right f741
+tab_recent f740
+tab_search f2f2
+tab_unselected e8d9
+table f191
+table_bar ead2
+table_chart e265
+table_chart_view f6ef
+table_convert f3c7
+table_edit f3c6
+table_eye f466
+table_lamp e1f2
+table_large f299
+table_restaurant eac6
+table_rows f101
+table_rows_narrow f73f
+table_sign ef2c
+table_view f1be
+tablet e32f
+tablet_android e330
+tablet_camera f44d
+tablet_mac e331
+tabs e9ee
+tactic f564
+tag e9ef
+tag_faces ea22
+takeout_dining ea74
+takeout_dining_2 ef34
+tamper_detection_off e82e
+tamper_detection_on f8c8
+tap_and_play f2cc
+tapas f1e9
+target e719
+task f075
+task_alt e2e6
+tatami_seat ef33
+taunt f69f
+taxi_alert ef74
+team_dashboard e013
+temp_preferences_custom f8c9
+temp_preferences_eco f8ca
+temple_buddhist eab3
+temple_hindu eaaf
+tenancy f0e3
+terminal eb8e
+terrain e564
+text_ad e728
+text_compare f3c5
+text_decrease eadd
+text_fields e262
+text_fields_alt e9f1
+text_format e165
+text_increase eae2
+text_rotate_up e93a
+text_rotate_vertical e93b
+text_rotation_angledown e93c
+text_rotation_angleup e93d
+text_rotation_down e93e
+text_rotation_none e93f
+text_select_end f73e
+text_select_jump_to_beginning f73d
+text_select_jump_to_end f73c
+text_select_move_back_character f73b
+text_select_move_back_word f73a
+text_select_move_down f739
+text_select_move_forward_character f738
+text_select_move_forward_word f737
+text_select_move_up f736
+text_select_start f735
+text_snippet f1c6
+text_to_speech f1bc
+text_up f49e
+textsms e625
+texture e421
+texture_add f57c
+texture_minus f57b
+theater_comedy ea66
+theaters e8da
+thermometer e846
+thermometer_add f582
+thermometer_gain f6d8
+thermometer_loss f6d7
+thermometer_minus f581
+thermostat f076
+thermostat_arrow_down f37a
+thermostat_arrow_up f379
+thermostat_auto f077
+thermostat_carbon f178
+things_to_do eb2a
+thread_unread f4f9
+threat_intelligence eaed
+thumb_down f578
+thumb_down_alt f578
+thumb_down_filled f578
+thumb_down_off f578
+thumb_down_off_alt f578
+thumb_up f577
+thumb_up_alt f577
+thumb_up_filled f577
+thumb_up_off f577
+thumb_up_off_alt f577
+thumbnail_bar f734
+thumbs_up_double eefc
+thumbs_up_down e8dd
+thunderstorm ebdb
+tibia f89b
+tibia_alt f89c
+tile_large f3c3
+tile_medium f3c2
+tile_small f3c1
+time_auto f0e4
+time_to_leave eff7
+timelapse e422
+timeline e922
+timer e425
+timer_1 f2af
+timer_10 e423
+timer_10_alt_1 efbf
+timer_10_select f07a
+timer_2 f2ae
+timer_3 e424
+timer_3_alt_1 efc0
+timer_3_select f07b
+timer_5 f4b1
+timer_5_shutter f4b2
+timer_arrow_down f378
+timer_arrow_up f377
+timer_off e426
+timer_pause f4bb
+timer_play f4ba
+tips_and_updates e79a
+tire_repair ebc8
+title e264
+titlecase f489
+toast efc1
+toc e8de
+today e8df
+toggle_off e9f5
+toggle_on e9f6
+token ea25
+toll e8e0
+tonality e427
+tonality_2 f2b4
+toolbar e9f7
+tools_flat_head f8cb
+tools_installation_kit e2ab
+tools_ladder e2cb
+tools_level e77b
+tools_phillips f8cc
+tools_pliers_wire_stripper e2aa
+tools_power_drill e1e9
+tools_wrench f8cd
+tooltip e9f8
+tooltip_2 f3ed
+top_panel_close f733
+top_panel_open f732
+topic f1c8
+tornado e199
+total_dissolved_solids f877
+touch_app e913
+touch_double f38b
+touch_long f38a
+touch_triple f389
+touchpad_mouse f687
+touchpad_mouse_off f4e6
+tour ef75
+toys e332
+toys_and_games efc2
+toys_fan f887
+track_changes e8e1
+trackpad_input f4c7
+trackpad_input_2 f409
+trackpad_input_3 f408
+traffic e565
+traffic_jam f46f
+trail_length eb5e
+trail_length_medium eb63
+trail_length_short eb6d
+train e570
+tram e571
+transcribe f8ec
+transfer_within_a_station e572
+transform e428
+transgender e58d
+transit_enterexit e579
+transit_ticket f3f1
+transition_chop f50e
+transition_dissolve f50d
+transition_fade f50c
+transition_push f50b
+transition_slide f50a
+translate e8e2
+translate_indic f263
+transportation e21d
+travel ef93
+travel_explore e2db
+travel_luggage_and_bags efc3
+trending_down e8e3
+trending_flat e8e4
+trending_up e8e5
+trip e6fb
+trip_origin e57b
+trolley f86b
+trolley_cable_car f46e
+trophy ea23
+troubleshoot e1d2
+try f07c
+tsunami ebd8
+tsv e6d6
+tty f1aa
+tune e429
+tungsten f07d
+turn_left eba6
+turn_right ebab
+turn_sharp_left eba7
+turn_sharp_right ebaa
+turn_slight_left eba4
+turn_slight_right eb9a
+turned_in e8e7
+turned_in_not e8e7
+tv e63b
+tv_displays f3ec
+tv_gen e830
+tv_guide e1dc
+tv_next f3eb
+tv_off e647
+tv_options_edit_channels e1dd
+tv_options_input_settings e1de
+tv_remote f5d9
+tv_signin e71b
+tv_with_assistant e785
+two_pager f51f
+two_pager_store f3c4
+two_wheeler e9f9
+type_specimen f8f0
+u_turn_left eba1
+u_turn_right eba2
+udon ef32
+ulna_radius f89d
+ulna_radius_alt f89e
+umbrella f1ad
+unarchive e169
+undo e166
+unfold_less e5d6
+unfold_less_double f8cf
+unfold_more e5d7
+unfold_more_double f8d0
+ungroup f731
+universal_currency e9fa
+universal_currency_alt e734
+universal_local e9fb
+unknown_2 f49f
+unknown_5 e6a5
+unknown_7 f49e
+unknown_document f804
+unknown_med eabd
+unlicense eb05
+unpaved_road f46d
+unpin e6f9
+unpublished f236
+unsubscribe e0eb
+upcoming f07e
+update e923
+update_disabled e075
+upgrade f0fb
+upi_pay f3cf
+upload f09b
+upload_2 f521
+upload_file e9fc
+uppercase f488
+urology e137
+usb e1e0
+usb_off e4fa
+user_attributes e708
+vaccines e138
+vacuum efc5
+valve e224
+vape_free ebc6
+vaping_rooms ebcf
+variable_add f51e
+variable_insert f51d
+variable_remove f51c
+variables f851
+ventilator e139
+verified ef76
+verified_off f30e
+verified_user f013
+vertical_align_bottom e258
+vertical_align_center e259
+vertical_align_top e25a
+vertical_distribute e076
+vertical_shades ec0e
+vertical_shades_closed ec0d
+vertical_split e949
+vibration f2cb
+video_call e070
+video_camera_back f07f
+video_camera_back_add f40c
+video_camera_front f080
+video_camera_front_off f83b
+video_chat f8a0
+video_file eb87
+video_label e071
+video_library e04a
+video_search efc6
+video_settings ea75
+video_stable f081
+videocam e04b
+videocam_alert f390
+videocam_off e04c
+videogame_asset e338
+videogame_asset_off e500
+view_agenda e8e9
+view_apps f376
+view_array e8ea
+view_carousel e8eb
+view_column e8ec
+view_column_2 f847
+view_comfy e42a
+view_comfy_alt eb73
+view_compact e42b
+view_compact_alt eb74
+view_cozy eb75
+view_day e8ed
+view_headline e8ee
+view_in_ar efc9
+view_in_ar_new efc9
+view_in_ar_off f61b
+view_kanban eb7f
+view_list e8ef
+view_module e8f0
+view_object_track f432
+view_quilt e8f1
+view_real_size f4c2
+view_sidebar f114
+view_stream e8f2
+view_timeline eb85
+view_week e8f3
+vignette e435
+vignette_2 f2b3
+villa e586
+visibility e8f4
+visibility_lock f653
+visibility_off e8f5
+vital_signs e650
+vitals e13b
+vo2_max f4aa
+voice_chat e62e
+voice_over_off e94a
+voice_selection f58a
+voice_selection_off f42c
+voicemail e0d9
+voicemail_2 f352
+volcano ebda
+volume_down e04d
+volume_down_alt e79c
+volume_mute e04e
+volume_off e04f
+volume_up e050
+volunteer_activism ea70
+voting_chip f852
+vpn_key e0da
+vpn_key_alert f6cc
+vpn_key_off eb7a
+vpn_lock e62f
+vpn_lock_2 f350
+vr180_create2d efca
+vr180_create2d_off f571
+vrpano f082
+wall_art efcb
+wall_lamp e2b4
+wallet f8ff
+wallpaper e1bc
+wallpaper_slideshow f672
+wand_shine f31f
+wand_stars f31e
+ward e13c
+warehouse ebb8
+warning f083
+warning_amber f083
+warning_off f7ad
+wash f1b1
+washoku f280
+watch e334
+watch_arrow f2ca
+watch_button_press f6aa
+watch_check f468
+watch_later efd6
+watch_off eae3
+watch_screentime f6ae
+watch_vibration f467
+watch_wake f6a9
+water f084
+water_bottle f69d
+water_bottle_large f69e
+water_damage f203
+water_do f870
+water_drop e798
+water_ec f875
+water_full f6d6
+water_heater e284
+water_lock f6ad
+water_loss f6d5
+water_lux f874
+water_medium f6d4
+water_orp f878
+water_ph f87a
+water_pump f5d8
+water_voc f87b
+waterfall_chart ea00
+waves e176
+waving_hand e766
+wb_auto e42c
+wb_cloudy f15c
+wb_incandescent e42e
+wb_iridescent f07d
+wb_shade ea01
+wb_sunny e430
+wb_twilight e1c6
+wc e63d
+weather_hail f67f
+weather_mix f60b
+weather_snowy e2cd
+web e051
+web_asset e069
+web_asset_off ef47
+web_stories e595
+web_traffic ea03
+webhook eb92
+weekend e16b
+weight e13d
+west f1e6
+whatshot e80e
+wheelchair_pickup f1ab
+where_to_vote e177
+widget_medium f3ba
+widget_small f3b9
+widget_width f3b8
+widgets e1bd
+width f730
+width_full f8f5
+width_normal f8f6
+width_wide f8f7
+wifi e63e
+wifi_1_bar e4ca
+wifi_2_bar e4d9
+wifi_add f7a8
+wifi_calling ef77
+wifi_calling_1 f0e7
+wifi_calling_2 f0f6
+wifi_calling_3 f0e7
+wifi_calling_bar_1 f44c
+wifi_calling_bar_2 f44b
+wifi_calling_bar_3 f44a
+wifi_channel eb6a
+wifi_find eb31
+wifi_home f671
+wifi_lock e1e1
+wifi_notification f670
+wifi_off e648
+wifi_password eb6b
+wifi_protected_setup f0fc
+wifi_proxy f7a7
+wifi_tethering e1e2
+wifi_tethering_error ead9
+wifi_tethering_off f087
+wind_power ec0c
+window f088
+window_closed e77e
+window_open e78c
+window_sensor e2bb
+windshield_defrost_auto f248
+windshield_defrost_front f32a
+windshield_defrost_rear f329
+windshield_heat_front f328
+wine_bar f1e8
+woman e13e
+woman_2 f8e7
+work e943
+work_alert f5f7
+work_history ec09
+work_off e942
+work_outline e943
+work_update f5f8
+workflow ea04
+workspace_premium e7af
+workspaces ea0f
+workspaces_outline ea0f
+wounds_injuries e13f
+wrap_text e25b
+wrist f69c
+wrong_location ef78
+wysiwyg f1c3
+yakitori ef31
+yard f089
+yoshoku f27f
+your_trips eb2b
+youtube_activity f85a
+youtube_searched_for e8fa
+zone_person_alert e781
+zone_person_idle e77a
+zone_person_urgent e788
+zoom_in e8ff
+zoom_in_map eb2d
+zoom_out e900
+zoom_out_map e56b
\ No newline at end of file
diff --git a/Assets/Resources/PerformanceTestRunSettings.json.meta b/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlinedCodepoints.txt.meta
similarity index 75%
rename from Assets/Resources/PerformanceTestRunSettings.json.meta
rename to Assets/Resources/Fonts/Icons/MaterialSymbolsOutlinedCodepoints.txt.meta
index 549c51c5..3e15f3f9 100644
--- a/Assets/Resources/PerformanceTestRunSettings.json.meta
+++ b/Assets/Resources/Fonts/Icons/MaterialSymbolsOutlinedCodepoints.txt.meta
@@ -1,5 +1,5 @@
fileFormatVersion: 2
-guid: cba8cf29ff1a3af4c951dc8785008b52
+guid: 76e3b660a1fc448428151d868fcb09c5
TextScriptImporter:
externalObjects: {}
userData:
diff --git a/Assets/Resources/PerformanceTestRunInfo.json b/Assets/Resources/PerformanceTestRunInfo.json
deleted file mode 100644
index 2ec3d68c..00000000
--- a/Assets/Resources/PerformanceTestRunInfo.json
+++ /dev/null
@@ -1 +0,0 @@
-{"TestSuite":"","Date":0,"Player":{"Development":false,"ScreenWidth":0,"ScreenHeight":0,"ScreenRefreshRate":0,"Fullscreen":false,"Vsync":0,"AntiAliasing":0,"Batchmode":false,"RenderThreadingMode":"Split","MtRendering":false,"GraphicsJobs":false,"GpuSkinning":true,"Platform":"","ColorSpace":"","AnisotropicFiltering":"","BlendWeights":"","GraphicsApi":"","ScriptingBackend":"IL2CPP","AndroidTargetSdkVersion":"AndroidApiLevelAuto","AndroidBuildSystem":"Gradle","BuildTarget":"StandaloneWindows64","StereoRenderingPath":"MultiPass"},"Hardware":{"OperatingSystem":"","DeviceModel":"","DeviceName":"","ProcessorType":"","ProcessorCount":0,"GraphicsDeviceName":"","SystemMemorySizeMB":0},"Editor":{"Version":"6000.2.12f1","Branch":"6000.2/staging","Changeset":"e89d5df0e333","Date":1762305399},"Dependencies":["com.cysharp.unitask@2.5.10","com.github-glitchenzo.nugetforunity@4.5.0","com.unity.2d.sprite@1.0.0","com.unity.ai.navigation@2.0.9","com.unity.cloud.gltfast@6.14.1","com.unity.ide.rider@3.0.38","com.unity.ide.visualstudio@2.0.25","com.unity.inputsystem@1.14.2","com.unity.multiplayer.center@1.0.0","com.unity.nuget.newtonsoft-json@3.2.1","com.unity.render-pipelines.core@17.2.0","com.unity.render-pipelines.universal@17.2.0","com.unity.test-framework@1.6.0","com.unity.timeline@1.8.9","com.unity.ugui@2.0.0","com.unity.visualscripting@1.9.8","com.unity.modules.accessibility@1.0.0","com.unity.modules.ai@1.0.0","com.unity.modules.androidjni@1.0.0","com.unity.modules.animation@1.0.0","com.unity.modules.assetbundle@1.0.0","com.unity.modules.audio@1.0.0","com.unity.modules.cloth@1.0.0","com.unity.modules.director@1.0.0","com.unity.modules.imageconversion@1.0.0","com.unity.modules.imgui@1.0.0","com.unity.modules.jsonserialize@1.0.0","com.unity.modules.particlesystem@1.0.0","com.unity.modules.physics@1.0.0","com.unity.modules.physics2d@1.0.0","com.unity.modules.screencapture@1.0.0","com.unity.modules.terrain@1.0.0","com.unity.modules.terrainphysics@1.0.0","com.unity.modules.tilemap@1.0.0","com.unity.modules.ui@1.0.0","com.unity.modules.uielements@1.0.0","com.unity.modules.umbra@1.0.0","com.unity.modules.unityanalytics@1.0.0","com.unity.modules.unitywebrequest@1.0.0","com.unity.modules.unitywebrequestassetbundle@1.0.0","com.unity.modules.unitywebrequestaudio@1.0.0","com.unity.modules.unitywebrequesttexture@1.0.0","com.unity.modules.unitywebrequestwww@1.0.0","com.unity.modules.vehicles@1.0.0","com.unity.modules.video@1.0.0","com.unity.modules.vr@1.0.0","com.unity.modules.wind@1.0.0","com.unity.modules.xr@1.0.0","com.unity.modules.subsystems@1.0.0","com.unity.modules.hierarchycore@1.0.0","com.unity.ext.nunit@2.0.5","com.unity.shadergraph@17.2.0","com.unity.render-pipelines.universal-config@17.0.3","com.unity.burst@1.8.25","com.unity.mathematics@1.3.2","com.unity.collections@2.6.2","com.unity.rendering.light-transport@1.0.1","com.unity.searcher@4.9.3","com.unity.nuget.mono-cecil@1.11.5","com.unity.test-framework.performance@3.2.0"],"Results":[]}
\ No newline at end of file
diff --git a/Assets/Resources/PerformanceTestRunSettings.json b/Assets/Resources/PerformanceTestRunSettings.json
deleted file mode 100644
index 49438ae1..00000000
--- a/Assets/Resources/PerformanceTestRunSettings.json
+++ /dev/null
@@ -1 +0,0 @@
-{"MeasurementCount":-1}
\ No newline at end of file
diff --git a/Assets/Resources/Prefabs/UI/List/ComponentListItem.prefab b/Assets/Resources/Prefabs/UI/List/ComponentListItem.prefab
index 0af9ebaf..3123d53e 100644
--- a/Assets/Resources/Prefabs/UI/List/ComponentListItem.prefab
+++ b/Assets/Resources/Prefabs/UI/List/ComponentListItem.prefab
@@ -37,8 +37,8 @@ RectTransform:
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 24.000008, y: -3.5}
- m_SizeDelta: {x: 0, y: 15}
+ m_AnchoredPosition: {x: 24, y: -3.5}
+ m_SizeDelta: {x: 16.79, y: 15}
m_Pivot: {x: 0, y: 1}
--- !u!222 &1821424897527179892
CanvasRenderer:
@@ -667,10 +667,10 @@ RectTransform:
m_Children: []
m_Father: {fileID: 3094276047947572059}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 15}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 8.395, y: -7.5}
+ m_SizeDelta: {x: 6.79, y: 15}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &7899941541401797984
MonoBehaviour:
@@ -1418,7 +1418,7 @@ GameObject:
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
- m_IsActive: 1
+ m_IsActive: 0
--- !u!224 &3186561737559845992
RectTransform:
m_ObjectHideFlags: 0
@@ -1635,7 +1635,7 @@ RectTransform:
m_AnchorMin: {x: 1, y: 0.5}
m_AnchorMax: {x: 1, y: 0.5}
m_AnchoredPosition: {x: -2, y: 0}
- m_SizeDelta: {x: 0, y: 22}
+ m_SizeDelta: {x: 40.79, y: 22}
m_Pivot: {x: 1, y: 0.5}
--- !u!114 &4840481829667430247
MonoBehaviour:
@@ -2163,10 +2163,10 @@ RectTransform:
m_Children: []
m_Father: {fileID: 5465326936975101749}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 22}
+ m_AnchorMin: {x: 0, y: 1}
+ m_AnchorMax: {x: 0, y: 1}
+ m_AnchoredPosition: {x: 11, y: -11}
+ m_SizeDelta: {x: 22, y: 22}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &4173370272032766120
CanvasRenderer:
diff --git a/Assets/Resources/SHI/Modal/ISOP/ISOPChart.uss b/Assets/Resources/SHI/Modal/ISOP/ISOPChart.uss
index c790120e..7af86ee4 100644
--- a/Assets/Resources/SHI/Modal/ISOP/ISOPChart.uss
+++ b/Assets/Resources/SHI/Modal/ISOP/ISOPChart.uss
@@ -81,10 +81,11 @@
}
/* 첫 번째 행: 상단 테두리 추가 */
-.task-row:first-child {
+/* Unity USS does not support :first-child pseudo-class */
+/* .task-row:first-child {
border-top-width: 1px;
border-top-color: rgb(136, 190, 230);
-}
+} */
/* 호버 상태: 연한 파란색 배경 */
.task-row:hover {
@@ -127,6 +128,7 @@
}
/* 첫 번째 레벨 셀: 왼쪽 테두리 없음 */
-.task-txt:first-child {
+/* Unity USS does not support :first-child pseudo-class */
+/* .task-txt:first-child {
border-left-width: 0;
-}
+} */
diff --git a/Assets/Resources/SHI/Modal/NW/NWChart.uss b/Assets/Resources/SHI/Modal/NW/NWChart.uss
index eb8b4c4e..4f94b281 100644
--- a/Assets/Resources/SHI/Modal/NW/NWChart.uss
+++ b/Assets/Resources/SHI/Modal/NW/NWChart.uss
@@ -171,7 +171,7 @@
border-color: rgba(51, 51, 51, 0.5); /* 반투명 회색 테두리 */
justify-content: center;
align-items: center;
- cursor: link; /* 클릭 가능 커서 */
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
transition-duration: 0.15s; /* 호버 애니메이션 */
}
diff --git a/Assets/Resources/SHI/Modal/TreeList.uss b/Assets/Resources/SHI/Modal/TreeList.uss
index 88715206..100385ca 100644
--- a/Assets/Resources/SHI/Modal/TreeList.uss
+++ b/Assets/Resources/SHI/Modal/TreeList.uss
@@ -1,130 +1,73 @@
-/*
- * TreeList.uss - TreeList 컴포넌트 스타일시트
- *
- * [개요]
- * TreeList.uxml과 TreeListItem.uxml에서 사용하는 스타일을 정의합니다.
- * 어두운 테마(Dark Theme)에 맞춰 디자인되었습니다.
- *
- * [스타일 구조]
- * 1. .tree-menu-container : 메인 컨테이너 (어두운 배경, 240px 너비)
- * 2. .search-field : 검색 입력 필드 (흰색 배경, 둥근 모서리)
- * 3. #main-tree-view : TreeView 기본 설정 (들여쓰기 10px)
- * 4. .unity-tree-view__item-toggle : 펼침/접기 토글 버튼
- * 5. .unity-collection-view__item : 항목 배경색 (기본/호버/선택)
- * 6. .visibility-toggle : 가시성 토글 버튼 (눈 아이콘)
- *
- * [색상 팔레트]
- * - 배경: rgb(40, 44, 52) - 어두운 회색
- * - 호버: rgba(0, 10, 37, 0.25) - 반투명 파랑
- * - 선택: rgba(0, 10, 37, 0.5) - 더 진한 반투명 파랑
- * - 텍스트: rgb(255, 255, 255) - 흰색
- *
- * [연관 파일]
- * - TreeList.uxml : 메인 레이아웃
- * - TreeListItem.uxml : 개별 항목 템플릿
- * - TreeList.cs : C# 컨트롤러
- */
-
-/* ===================================
- 메인 컨테이너 스타일
- 사이드 패널 전체를 감싸는 컨테이너
- =================================== */
.tree-menu-container {
- background-color: rgb(40, 44, 52); /* 어두운 회색 배경 */
- flex-grow: 1; /* 부모 영역 채우기 */
+ background-color: rgb(40, 44, 52);
+ flex-grow: 1;
padding: 5px;
padding-top: 25px;
padding-bottom: 25px;
padding-left: 20px;
padding-right: 20px;
- width: 240px; /* 고정 너비 */
+ width: 240px;
}
-/* ===================================
- 검색 입력 필드 스타일
- 흰색 배경의 둥근 입력창
- =================================== */
.search-field {
margin-bottom: 20px;
- background-color: rgb(255, 255, 255); /* 흰색 배경 */
- border-radius: 4px; /* 둥근 모서리 */
+ background-color: rgb(255, 255, 255);
+ border-radius: 4px;
height: 30px;
width: auto;
margin-top: 0;
margin-right: 0;
margin-left: 0;
- -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Regular');
}
-/* 검색 필드 내부 텍스트 입력 영역 */
#search-field > #unity-text-input {
padding-top: 4px;
- padding-right: 24px; /* 오른쪽 아이콘 공간 확보 */
+ padding-right: 24px;
padding-bottom: 4px;
padding-left: 4px;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
border-bottom-right-radius: 3px;
border-bottom-left-radius: 3px;
- border-top-width: 0; /* 테두리 제거 */
+ border-top-width: 0;
border-right-width: 0;
border-bottom-width: 0;
border-left-width: 0;
}
-/* ===================================
- 체크박스 스타일
- =================================== */
#unity-checkmark {
-unity-background-image-tint-color: rgb(255, 255, 255);
}
-/* ===================================
- TreeView 기본 설정
- =================================== */
#main-tree-view {
- --unity-item-indent-width: 10; /* 계층별 들여쓰기 너비 */
+ --unity-item-indent-width: 10;
}
-/* 펼침/접기 토글 아이콘 컨테이너 */
#unity-tree-view__item-toggle > VisualElement > VisualElement {
margin-left: 0;
margin-right: 0;
- width: 22px; /* 토글 아이콘 너비 */
+ width: 22px;
}
-/* 펼침/접기 토글 버튼 */
.unity-tree-view__item-toggle {
- margin-right: 5px; /* 라벨과의 간격 */
+ margin-right: 5px;
}
-/* ===================================
- 항목 배경색 스타일
- 기본, 호버, 선택 상태별 배경색
- =================================== */
-
-/* 기본 상태: 투명 배경 */
.unity-collection-view__item {
background-color: rgba(50, 50, 50, 0);
}
-/* 호버 상태: 반투명 파란색 배경 */
.unity-collection-view__item:hover {
background-color: rgba(0, 10, 37, 0.25);
}
-/* 선택 상태: 더 진한 반투명 파란색 배경 */
.unity-collection-view__item--selected {
background-color: rgba(0, 10, 37, 0.5);
}
-/* ===================================
- 가시성 토글 버튼 스타일
- 눈 아이콘으로 3D 모델 가시성 제어
- =================================== */
.visibility-toggle {
- background-color: rgba(0, 0, 0, 0); /* 투명 배경 */
- border-width: 0; /* 테두리 없음 */
+ background-color: rgba(0, 0, 0, 0);
+ border-width: 0;
width: 16px;
height: 16px;
margin-top: 0;
@@ -137,52 +80,42 @@
padding-right: 0;
padding-left: 0;
margin-left: 0;
- flex-shrink: 0; /* 크기 축소 방지 */
- background-image: resource('SHI/Images/icon_visibility_on_64'); /* 기본: 보이는 상태 */
+ flex-shrink: 0;
+ background-image: resource('SHI/Images/icon_visibility_on_64');
}
-/* 가시성 켜짐 상태 (눈 열린 아이콘) */
.visibility-on {
background-image: resource('SHI/Images/icon_visibility_on_64');
}
-/* 가시성 꺼짐 상태 (눈 닫힌 아이콘) */
.visibility-off {
background-image: resource('SHI/Images/icon_visibility_off_64');
}
-/* ===================================
- 세로 스크롤바 스타일
- 슬림한 6px 너비의 커스텀 스크롤바
- =================================== */
.unity-scroller--vertical {
- width: 6px; /* 슬림한 너비 */
+ width: 6px;
margin-right: 4px;
- margin-bottom: 0px;
+ margin-bottom: 0;
}
-/* 세로 스크롤바 트랙 (배경) */
.unity-scroller--vertical .unity-base-slider__tracker {
- background-color: rgba(255, 255, 255, 0); /* 흰색 배경 */
+ background-color: rgba(255, 255, 255, 0);
border-width: 0;
}
-/* 세로 스크롤바 드래거 컨테이너 위치 조정 */
.unity-scroller--vertical .unity-base-slider__drag-container {
left: 0;
right: 0;
}
-/* 세로 스크롤바 드래거 (핸들) */
.unity-scroller--vertical .unity-base-slider__dragger {
- background-color: rgb(216, 216, 216); /* 밝은 회색 */
+ background-color: rgb(216, 216, 216);
border-width: 0;
- border-radius: 3px; /* 둥근 모서리 */
+ border-radius: 3px;
width: 6px;
left: 0;
}
-/* 세로 스크롤바 화살표 버튼 숨김 */
.unity-scroller--vertical .unity-repeat-button {
display: none;
width: 0;
@@ -191,49 +124,39 @@
min-height: 0;
}
-/* 세로 스크롤바 슬라이더 마진 제거 */
.unity-scroller--vertical .unity-slider {
margin: 0;
}
-/* 세로 스크롤바 입력 필드 크기 조정 */
.unity-scroller--vertical .unity-base-field__input {
width: 6px;
min-width: 6px;
}
-/* ===================================
- 가로 스크롤바 스타일
- 슬림한 6px 높이의 커스텀 스크롤바
- =================================== */
.unity-scroller--horizontal {
- height: 6px; /* 슬림한 높이 */
+ height: 6px;
margin-bottom: 4px;
- margin-right: 0px;
+ margin-right: 0;
}
-/* 가로 스크롤바 트랙 (배경) */
.unity-scroller--horizontal .unity-base-slider__tracker {
- background-color: rgba(255, 255, 255, 0); /* 흰색 배경 */
+ background-color: rgba(255, 255, 255, 0);
border-width: 0;
}
-/* 가로 스크롤바 드래거 컨테이너 위치 조정 */
.unity-scroller--horizontal .unity-base-slider__drag-container {
top: 0;
bottom: 0;
}
-/* 가로 스크롤바 드래거 (핸들) */
.unity-scroller--horizontal .unity-base-slider__dragger {
- background-color: rgb(216, 216, 216); /* 밝은 회색 */
+ background-color: rgb(216, 216, 216);
border-width: 0;
- border-radius: 3px; /* 둥근 모서리 */
+ border-radius: 3px;
height: 6px;
top: 0;
}
-/* 가로 스크롤바 화살표 버튼 숨김 */
.unity-scroller--horizontal .unity-repeat-button {
display: none;
width: 0;
@@ -242,12 +165,10 @@
min-height: 0;
}
-/* 가로 스크롤바 슬라이더 마진 제거 */
.unity-scroller--horizontal .unity-slider {
margin: 0;
}
-/* 가로 스크롤바 입력 필드 크기 조정 */
.unity-scroller--horizontal .unity-base-field__input {
height: 6px;
min-height: 6px;
diff --git a/Assets/Resources/Simulator/FreeForkLift/Prefabs/Forklift.prefab b/Assets/Resources/Simulator/FreeForkLift/Prefabs/Forklift.prefab
index 639f7749..19f62144 100644
--- a/Assets/Resources/Simulator/FreeForkLift/Prefabs/Forklift.prefab
+++ b/Assets/Resources/Simulator/FreeForkLift/Prefabs/Forklift.prefab
@@ -24,12 +24,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000010839049058}
+ serializedVersion: 2
m_LocalRotation: {x: -0.000000029802322, y: -0.7071068, z: -0.000000029802322, w: 0.7071067}
m_LocalPosition: {x: 0.546, y: 0.5154157, z: 0.9}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000012554966720}
- m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90}
--- !u!146 &146000014083572840
WheelCollider:
@@ -38,6 +39,7 @@ WheelCollider:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000010839049058}
+ serializedVersion: 2
m_Center: {x: 0, y: 0, z: 0}
m_Radius: 0.35
m_SuspensionSpring:
@@ -60,7 +62,15 @@ WheelCollider:
m_AsymptoteSlip: 0.5
m_AsymptoteValue: 0.75
m_Stiffness: 1
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_Enabled: 1
+ m_ProvidesContacts: 0
--- !u!1 &1000010860801872
GameObject:
m_ObjectHideFlags: 0
@@ -86,12 +96,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000010860801872}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 100, y: 100, z: 100}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000013356346940}
- m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &33000011975467108
MeshFilter:
@@ -112,9 +123,17 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
m_RendererPriority: 0
m_Materials:
@@ -126,6 +145,7 @@ MeshRenderer:
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
@@ -135,9 +155,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1000011070132974
GameObject:
m_ObjectHideFlags: 0
@@ -161,16 +183,17 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000011070132974}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4000012432798180}
- {fileID: 4000012935168970}
- {fileID: 4000011892871780}
- {fileID: 4000012432309022}
m_Father: {fileID: 4000013356346940}
- m_RootOrder: 8
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1000011073349600
GameObject:
@@ -199,13 +222,14 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000011073349600}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4000013356346940}
m_Father: {fileID: 0}
- m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!54 &54000013437409432
Rigidbody:
@@ -214,10 +238,21 @@ Rigidbody:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000011073349600}
- serializedVersion: 2
+ serializedVersion: 5
m_Mass: 3000
- m_Drag: 0.1
- m_AngularDrag: 0.05
+ m_LinearDamping: 0.1
+ m_AngularDamping: 0.05
+ m_CenterOfMass: {x: 0, y: 0, z: 0}
+ m_InertiaTensor: {x: 1, y: 1, z: 1}
+ m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ImplicitCom: 1
+ m_ImplicitTensor: 1
m_UseGravity: 1
m_IsKinematic: 0
m_Interpolate: 0
@@ -315,13 +350,14 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000011434685428}
+ serializedVersion: 2
m_LocalRotation: {x: -0.21805806, y: 0, z: 0, w: 0.9759358}
m_LocalPosition: {x: -0.09799957, y: 0.56307596, z: 0.7989998}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4000012006374022}
m_Father: {fileID: 4000013356346940}
- m_RootOrder: 0
m_LocalEulerAnglesHint: {x: -25.19, y: 0, z: 0}
--- !u!1 &1000011473680638
GameObject:
@@ -347,9 +383,11 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000011473680638}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4000013471762282}
- {fileID: 4000010406632914}
@@ -362,7 +400,6 @@ Transform:
- {fileID: 4000012554966720}
- {fileID: 4000011998697752}
m_Father: {fileID: 4000013476106956}
- m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &65000010894959072
BoxCollider:
@@ -372,9 +409,17 @@ BoxCollider:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000011473680638}
m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_IsTrigger: 0
+ m_ProvidesContacts: 0
m_Enabled: 1
- serializedVersion: 2
+ serializedVersion: 3
m_Size: {x: 1, y: 1, z: 2.3914237}
m_Center: {x: -0.000000014901161, y: 0.6700001, z: 0.105711475}
--- !u!1 &1000011477830700
@@ -402,12 +447,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000011477830700}
+ serializedVersion: 2
m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071067}
m_LocalPosition: {x: -0.5451015, y: 0.33541575, z: 0.89999986}
m_LocalScale: {x: 100, y: 100.00001, z: 100.00001}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000013356346940}
- m_RootOrder: 5
m_LocalEulerAnglesHint: {x: -89.980194, y: 0, z: 0}
--- !u!33 &33000012518384032
MeshFilter:
@@ -428,9 +474,17 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
m_RendererPriority: 0
m_Materials:
@@ -442,6 +496,7 @@ MeshRenderer:
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
@@ -451,9 +506,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1000011734525732
GameObject:
m_ObjectHideFlags: 0
@@ -479,12 +536,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000011734525732}
+ serializedVersion: 2
m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071067}
m_LocalPosition: {x: -0.5037266, y: 0.26429352, z: -0.707311}
m_LocalScale: {x: 100, y: 100.00001, z: 100.00001}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000013356346940}
- m_RootOrder: 4
m_LocalEulerAnglesHint: {x: -89.980194, y: 0, z: 0}
--- !u!33 &33000012340827016
MeshFilter:
@@ -505,9 +563,17 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
m_RendererPriority: 0
m_Materials:
@@ -519,6 +585,7 @@ MeshRenderer:
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
@@ -528,9 +595,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1000011739579314
GameObject:
m_ObjectHideFlags: 0
@@ -555,12 +624,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000011739579314}
+ serializedVersion: 2
m_LocalRotation: {x: -0.000000059604645, y: -0.7071068, z: -0.000000059604645, w: 0.7071067}
m_LocalPosition: {x: -0.5037265, y: 0.44729352, z: -0.7073109}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000012554966720}
- m_RootOrder: 2
m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90}
--- !u!146 &146000011170915886
WheelCollider:
@@ -569,6 +639,7 @@ WheelCollider:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000011739579314}
+ serializedVersion: 2
m_Center: {x: 0, y: 0, z: 0}
m_Radius: 0.28
m_SuspensionSpring:
@@ -591,7 +662,15 @@ WheelCollider:
m_AsymptoteSlip: 0.5
m_AsymptoteValue: 0.75
m_Stiffness: 1
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_Enabled: 1
+ m_ProvidesContacts: 0
--- !u!1 &1000012502322780
GameObject:
m_ObjectHideFlags: 0
@@ -617,13 +696,14 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000012502322780}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 100, y: 100, z: 100}
+ m_ConstrainProportionsScale: 0
m_Children:
- {fileID: 4000010940013096}
m_Father: {fileID: 4000013356346940}
- m_RootOrder: 6
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &33000013424043954
MeshFilter:
@@ -644,9 +724,17 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
m_RendererPriority: 0
m_Materials:
@@ -658,6 +746,7 @@ MeshRenderer:
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
@@ -667,9 +756,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1000012659452950
GameObject:
m_ObjectHideFlags: 0
@@ -694,12 +785,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000012659452950}
+ serializedVersion: 2
m_LocalRotation: {x: -0.000000029802322, y: -0.7071068, z: -0.000000029802322, w: 0.7071067}
m_LocalPosition: {x: 0.5037265, y: 0.44729352, z: -0.7073109}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000012554966720}
- m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90}
--- !u!146 &146000013894646302
WheelCollider:
@@ -708,6 +800,7 @@ WheelCollider:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000012659452950}
+ serializedVersion: 2
m_Center: {x: 0, y: 0, z: 0}
m_Radius: 0.28
m_SuspensionSpring:
@@ -730,7 +823,15 @@ WheelCollider:
m_AsymptoteSlip: 0.5
m_AsymptoteValue: 0.75
m_Stiffness: 1
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_Enabled: 1
+ m_ProvidesContacts: 0
--- !u!1 &1000012833946986
GameObject:
m_ObjectHideFlags: 0
@@ -755,12 +856,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000012833946986}
+ serializedVersion: 2
m_LocalRotation: {x: -0.000000059604645, y: -0.7071068, z: -0.000000059604645, w: 0.7071067}
m_LocalPosition: {x: -0.54510164, y: 0.5154157, z: 0.9}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000012554966720}
- m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: -90, z: -90}
--- !u!146 &146000011117633326
WheelCollider:
@@ -769,6 +871,7 @@ WheelCollider:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000012833946986}
+ serializedVersion: 2
m_Center: {x: 0, y: 0, z: 0}
m_Radius: 0.35
m_SuspensionSpring:
@@ -791,7 +894,15 @@ WheelCollider:
m_AsymptoteSlip: 0.5
m_AsymptoteValue: 0.75
m_Stiffness: 1
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_Enabled: 1
+ m_ProvidesContacts: 0
--- !u!1 &1000013477262638
GameObject:
m_ObjectHideFlags: 0
@@ -817,12 +928,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000013477262638}
+ serializedVersion: 2
m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071067}
m_LocalPosition: {x: 0.5037266, y: 0.26429352, z: -0.707311}
m_LocalScale: {x: 100, y: 100.00001, z: 100.00001}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000013356346940}
- m_RootOrder: 2
m_LocalEulerAnglesHint: {x: -89.980194, y: 0, z: 0}
--- !u!33 &33000013523892176
MeshFilter:
@@ -843,9 +955,17 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
m_RendererPriority: 0
m_Materials:
@@ -857,6 +977,7 @@ MeshRenderer:
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
@@ -866,9 +987,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1000013532054310
GameObject:
m_ObjectHideFlags: 0
@@ -894,12 +1017,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000013532054310}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 100, y: 100, z: 100}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000013356346940}
- m_RootOrder: 7
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &33000012354022326
MeshFilter:
@@ -920,9 +1044,17 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
m_RendererPriority: 0
m_Materials:
@@ -934,6 +1066,7 @@ MeshRenderer:
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
@@ -943,9 +1076,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1000013738711648
GameObject:
m_ObjectHideFlags: 0
@@ -971,12 +1106,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000013738711648}
+ serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0.01, y: 0.01, z: 0.01}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000012230258352}
- m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &65000013609962728
BoxCollider:
@@ -986,9 +1122,17 @@ BoxCollider:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000013738711648}
m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_IsTrigger: 0
+ m_ProvidesContacts: 0
m_Enabled: 1
- serializedVersion: 2
+ serializedVersion: 3
m_Size: {x: 0.7810302, y: 0.037019253, z: 1.136157}
m_Center: {x: -0.0026693344, y: 0.036987662, z: 1.8662252}
--- !u!65 &65000011325912258
@@ -999,9 +1143,17 @@ BoxCollider:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000013738711648}
m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_IsTrigger: 0
+ m_ProvidesContacts: 0
m_Enabled: 1
- serializedVersion: 2
+ serializedVersion: 3
m_Size: {x: 1.202784, y: 0.99137866, z: 0.09446905}
m_Center: {x: 1.4210855e-14, y: 0.63167053, z: 1.3453856}
--- !u!1 &1000013874299352
@@ -1029,12 +1181,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000013874299352}
+ serializedVersion: 2
m_LocalRotation: {x: 0.21805808, y: -0, z: -0, w: 0.9759358}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 100, y: 100, z: 100}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000013471762282}
- m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &33000010944424196
MeshFilter:
@@ -1055,9 +1208,17 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
m_RendererPriority: 0
m_Materials:
@@ -1069,6 +1230,7 @@ MeshRenderer:
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
@@ -1078,9 +1240,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1000013991346752
GameObject:
m_ObjectHideFlags: 0
@@ -1106,12 +1270,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000013991346752}
+ serializedVersion: 2
m_LocalRotation: {x: -0.7071068, y: 0, z: -0, w: 0.7071067}
m_LocalPosition: {x: 0.5459999, y: 0.33541575, z: 0.89999986}
m_LocalScale: {x: 100, y: 100.00001, z: 100.00001}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000013356346940}
- m_RootOrder: 3
m_LocalEulerAnglesHint: {x: -89.980194, y: 0, z: 0}
--- !u!33 &33000012990824728
MeshFilter:
@@ -1132,9 +1297,17 @@ MeshRenderer:
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
m_RendererPriority: 0
m_Materials:
@@ -1146,6 +1319,7 @@ MeshRenderer:
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
@@ -1155,9 +1329,11 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1000014025593340
GameObject:
m_ObjectHideFlags: 0
@@ -1182,12 +1358,13 @@ Transform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000014025593340}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000013356346940}
- m_RootOrder: 9
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!65 &65000011180271422
BoxCollider:
@@ -1197,8 +1374,16 @@ BoxCollider:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000014025593340}
m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_IsTrigger: 0
+ m_ProvidesContacts: 0
m_Enabled: 1
- serializedVersion: 2
+ serializedVersion: 3
m_Size: {x: 1.202322, y: 1.1608126, z: 1.3974968}
m_Center: {x: 9.313244e-10, y: 1.5547146, z: 0.13412763}
diff --git a/Assets/Resources/Simulator/FreeForkLift/Prefabs/PalletEmpty.prefab b/Assets/Resources/Simulator/FreeForkLift/Prefabs/PalletEmpty.prefab
index d33ab069..d732eb35 100644
--- a/Assets/Resources/Simulator/FreeForkLift/Prefabs/PalletEmpty.prefab
+++ b/Assets/Resources/Simulator/FreeForkLift/Prefabs/PalletEmpty.prefab
@@ -1,21 +1,11 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
---- !u!1001 &100100000
-Prefab:
- m_ObjectHideFlags: 1
- serializedVersion: 2
- m_Modification:
- m_TransformParent: {fileID: 0}
- m_Modifications: []
- m_RemovedComponents: []
- m_SourcePrefab: {fileID: 0}
- m_RootGameObject: {fileID: 1000010367924706}
- m_IsPrefabAsset: 1
--- !u!1 &1000010367924706
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4000010654416078}
@@ -28,11 +18,78 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
+--- !u!4 &4000010654416078
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1000010367924706}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
+ m_LocalPosition: {x: 0, y: 0, z: 5.71}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 4000012846995296}
+ - {fileID: 4000011572875330}
+ - {fileID: 4000011710664838}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
+--- !u!54 &54000013494727520
+Rigidbody:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1000010367924706}
+ serializedVersion: 5
+ m_Mass: 50
+ m_LinearDamping: 0
+ m_AngularDamping: 0.05
+ m_CenterOfMass: {x: 0, y: 0, z: 0}
+ m_InertiaTensor: {x: 1, y: 1, z: 1}
+ m_InertiaRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ImplicitCom: 1
+ m_ImplicitTensor: 1
+ m_UseGravity: 1
+ m_IsKinematic: 0
+ m_Interpolate: 0
+ m_Constraints: 0
+ m_CollisionDetection: 0
+--- !u!65 &65000011714920370
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1000010367924706}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Size: {x: 1, y: 0.04, z: 1}
+ m_Center: {x: 0, y: 0.12, z: 0}
--- !u!1 &1000011940101718
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4000011572875330}
@@ -44,11 +101,48 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
+--- !u!4 &4000011572875330
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1000011940101718}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0.072, z: -0.56}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 4000010654416078}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &65000011694717970
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1000011940101718}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Size: {x: 1, y: 0.1440002, z: 0.1006759}
+ m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &1000012623322564
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4000011710664838}
@@ -60,11 +154,48 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
+--- !u!4 &4000011710664838
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1000012623322564}
+ serializedVersion: 2
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0.072, z: 0.539}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 4000010654416078}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!65 &65000012467042714
+BoxCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1000012623322564}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 3
+ m_Size: {x: 1, y: 0.1440002, z: 0.1006759}
+ m_Center: {x: 0, y: 0, z: 0}
--- !u!1 &1000013525428288
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4000012846995296}
@@ -78,75 +209,53 @@ GameObject:
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
---- !u!4 &4000010654416078
-Transform:
- m_ObjectHideFlags: 1
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
- m_GameObject: {fileID: 1000010367924706}
- m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068}
- m_LocalPosition: {x: 0, y: 0, z: 5.71}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children:
- - {fileID: 4000012846995296}
- - {fileID: 4000011572875330}
- - {fileID: 4000011710664838}
- m_Father: {fileID: 0}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0}
---- !u!4 &4000011572875330
-Transform:
- m_ObjectHideFlags: 1
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
- m_GameObject: {fileID: 1000011940101718}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0.072, z: -0.56}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 4000010654416078}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!4 &4000011710664838
-Transform:
- m_ObjectHideFlags: 1
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
- m_GameObject: {fileID: 1000012623322564}
- m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
- m_LocalPosition: {x: 0, y: 0.072, z: 0.539}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_Children: []
- m_Father: {fileID: 4000010654416078}
- m_RootOrder: 2
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!4 &4000012846995296
Transform:
- m_ObjectHideFlags: 1
+ m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000013525428288}
+ serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 100, y: 100, z: 100}
+ m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 4000010654416078}
- m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!33 &33000011068149276
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1000013525428288}
+ m_Mesh: {fileID: 4300000, guid: 5661de86a21f8ef4b8fa880ef2e7b46c, type: 3}
--- !u!23 &23000011150270100
MeshRenderer:
- m_ObjectHideFlags: 1
+ m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000013525428288}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
m_RenderingLayerMask: 4294967295
+ m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: bb5b8dcebe22c1c43a002cc9b3d28174, type: 2}
m_StaticBatchInfo:
@@ -156,6 +265,7 @@ MeshRenderer:
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
@@ -165,76 +275,29 @@ MeshRenderer:
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
---- !u!33 &33000011068149276
-MeshFilter:
- m_ObjectHideFlags: 1
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
- m_GameObject: {fileID: 1000013525428288}
- m_Mesh: {fileID: 4300000, guid: 5661de86a21f8ef4b8fa880ef2e7b46c, type: 3}
---- !u!54 &54000013494727520
-Rigidbody:
- m_ObjectHideFlags: 1
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
- m_GameObject: {fileID: 1000010367924706}
- serializedVersion: 2
- m_Mass: 50
- m_Drag: 0
- m_AngularDrag: 0.05
- m_UseGravity: 1
- m_IsKinematic: 0
- m_Interpolate: 0
- m_Constraints: 0
- m_CollisionDetection: 0
---- !u!65 &65000011694717970
-BoxCollider:
- m_ObjectHideFlags: 1
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
- m_GameObject: {fileID: 1000011940101718}
- m_Material: {fileID: 0}
- m_IsTrigger: 0
- m_Enabled: 1
- serializedVersion: 2
- m_Size: {x: 1, y: 0.1440002, z: 0.1006759}
- m_Center: {x: 0, y: 0, z: 0}
---- !u!65 &65000011714920370
-BoxCollider:
- m_ObjectHideFlags: 1
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
- m_GameObject: {fileID: 1000010367924706}
- m_Material: {fileID: 0}
- m_IsTrigger: 0
- m_Enabled: 1
- serializedVersion: 2
- m_Size: {x: 1, y: 0.04, z: 1}
- m_Center: {x: 0, y: 0.12, z: 0}
---- !u!65 &65000012467042714
-BoxCollider:
- m_ObjectHideFlags: 1
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
- m_GameObject: {fileID: 1000012623322564}
- m_Material: {fileID: 0}
- m_IsTrigger: 0
- m_Enabled: 1
- serializedVersion: 2
- m_Size: {x: 1, y: 0.1440002, z: 0.1006759}
- m_Center: {x: 0, y: 0, z: 0}
+ m_AdditionalVertexStreams: {fileID: 0}
--- !u!65 &65000012969618506
BoxCollider:
- m_ObjectHideFlags: 1
+ m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInternal: {fileID: 100100000}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1000013525428288}
m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
m_IsTrigger: 0
+ m_ProvidesContacts: 0
m_Enabled: 1
- serializedVersion: 2
+ serializedVersion: 3
m_Size: {x: 0.010000003, y: 0.0014400017, z: 0.0010067594}
m_Center: {x: 0.00009318173, y: 0.0007195668, z: -0.005589797}
diff --git a/Assets/Resources/Simulator/FreeForkLift/Scripts/ForkController.cs b/Assets/Resources/Simulator/FreeForkLift/Scripts/ForkController.cs
index 075199f8..5bea1418 100644
--- a/Assets/Resources/Simulator/FreeForkLift/Scripts/ForkController.cs
+++ b/Assets/Resources/Simulator/FreeForkLift/Scripts/ForkController.cs
@@ -15,8 +15,7 @@ public class ForkController : MonoBehaviour {
// Update is called once per frame
void FixedUpdate () {
-
- Debug.Log(mastMoveTrue);
+
if(fork.transform.localPosition.y >= maxYmast.y && fork.transform.localPosition.y < maxY.y)
{
mastMoveTrue = true;
diff --git a/Assets/Resources/Studio/Prefabs/Modal/Setting/SettingShortcutTabContent.prefab b/Assets/Resources/Studio/Prefabs/Modal/Setting/SettingShortcutTabContent.prefab
index 3f5cd98b..80e18f68 100644
--- a/Assets/Resources/Studio/Prefabs/Modal/Setting/SettingShortcutTabContent.prefab
+++ b/Assets/Resources/Studio/Prefabs/Modal/Setting/SettingShortcutTabContent.prefab
@@ -464,7 +464,7 @@ RectTransform:
m_AnchorMin: {x: 0, y: 1}
m_AnchorMax: {x: 0, y: 1}
m_AnchoredPosition: {x: 431, y: -2}
- m_SizeDelta: {x: 50, y: 0}
+ m_SizeDelta: {x: 80, y: 0}
m_Pivot: {x: 0, y: 1}
--- !u!114 &8952730479983948989
MonoBehaviour:
@@ -1965,6 +1965,10 @@ PrefabInstance:
propertyPath: m_fontSizeBase
value: 12
objectReference: {fileID: 0}
+ - target: {fileID: 431666316254308180, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
+ propertyPath: m_HorizontalAlignment
+ value: 4
+ objectReference: {fileID: 0}
- target: {fileID: 2230432181843762964, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
propertyPath: m_Pivot.x
value: 0
@@ -1991,7 +1995,7 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 2230432181843762964, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
propertyPath: m_SizeDelta.x
- value: 50
+ value: 80
objectReference: {fileID: 0}
- target: {fileID: 2230432181843762964, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
propertyPath: m_SizeDelta.y
@@ -2057,6 +2061,10 @@ PrefabInstance:
propertyPath: m_fontSizeBase
value: 12
objectReference: {fileID: 0}
+ - target: {fileID: 6932173583458566539, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
+ propertyPath: m_HorizontalAlignment
+ value: 4
+ objectReference: {fileID: 0}
- target: {fileID: 7640204669525975220, guid: 40cc873fb7f9d6446b24facc889836b5, type: 3}
propertyPath: m_Text
value:
diff --git a/Assets/Resources/Studio/UIToolkit.meta b/Assets/Resources/Studio/UIToolkit.meta
new file mode 100644
index 00000000..04b1cc7a
--- /dev/null
+++ b/Assets/Resources/Studio/UIToolkit.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 036922f6ebd1fc246b7f9dcbed76951d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/Studio/UIToolkit/Modal.meta b/Assets/Resources/Studio/UIToolkit/Modal.meta
new file mode 100644
index 00000000..3359da6d
--- /dev/null
+++ b/Assets/Resources/Studio/UIToolkit/Modal.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 523651d33563a6e4eb5a39945fe0017f
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentDBUXML.uxml b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentDBUXML.uxml
new file mode 100644
index 00000000..d0afa7c9
--- /dev/null
+++ b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentDBUXML.uxml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentDBUXML.uxml.meta b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentDBUXML.uxml.meta
new file mode 100644
index 00000000..61356b36
--- /dev/null
+++ b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentDBUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: d27b20f78aec0354b8b97b9af0765701
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentGeneralUXML.uxml b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentGeneralUXML.uxml
new file mode 100644
index 00000000..c3cd0cfc
--- /dev/null
+++ b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentGeneralUXML.uxml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentGeneralUXML.uxml.meta b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentGeneralUXML.uxml.meta
new file mode 100644
index 00000000..670af551
--- /dev/null
+++ b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentGeneralUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 0a709a335acffbd4c9d4358c153fad81
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentShortcutUXML.uxml b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentShortcutUXML.uxml
new file mode 100644
index 00000000..96d9145f
--- /dev/null
+++ b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentShortcutUXML.uxml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentShortcutUXML.uxml.meta b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentShortcutUXML.uxml.meta
new file mode 100644
index 00000000..37338f45
--- /dev/null
+++ b/Assets/Resources/Studio/UIToolkit/Modal/UTKSettingModalContentShortcutUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: dcdd51dd452d3e94ca374da0307608a4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit.meta b/Assets/Resources/UIToolkit.meta
new file mode 100644
index 00000000..69a0e951
--- /dev/null
+++ b/Assets/Resources/UIToolkit.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 166e6c1e42c1dee4a836845108ff7782
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Button.meta b/Assets/Resources/UIToolkit/Button.meta
new file mode 100644
index 00000000..130cea7a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 0c207fd08d36fad46b095869721794d7
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Button/UTKButton.uss b/Assets/Resources/UIToolkit/Button/UTKButton.uss
new file mode 100644
index 00000000..08a00ef5
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button/UTKButton.uss
@@ -0,0 +1,436 @@
+/*
+ * ===================================
+ * UTKButton.uss
+ * 기본 버튼 컴포넌트 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Button
+ =================================== */
+
+.utk-button {
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ padding-top: var(--space-s);
+ padding-bottom: var(--space-s);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ background-color: var(--color-btn-normal);
+ color: var(--color-text-primary);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color, border-color, color;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+.utk-button:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-button:active {
+ background-color: var(--color-btn-pressed);
+}
+
+.utk-button:focus {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Button Icon
+ =================================== */
+
+.utk-button__icon {
+ font-size: var(--font-size-body1);
+ color: var(--color-text-primary);
+ margin: 0;
+ padding: 0;
+ -unity-text-align: middle-center;
+ align-self: center;
+}
+
+.utk-button--has-icon .utk-button__icon {
+ margin-right: var(--space-s);
+}
+
+/* ===================================
+ Button Text
+ =================================== */
+
+.utk-button__text {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-center;
+}
+
+/* ===================================
+ Icon Only Mode
+ =================================== */
+
+.utk-button--icon-only {
+ padding: 0;
+ min-width: auto;
+ width: var(--size-icon-btn);
+ height: var(--size-icon-btn);
+ justify-content: center;
+ align-items: center;
+}
+
+.utk-button--icon-only .utk-button__icon {
+ margin: 0;
+ padding: 0;
+ align-self: center;
+}
+
+/* ===================================
+ Size Variants
+ =================================== */
+
+.utk-button--small {
+ height: 20px;
+ min-width: 60px;
+ padding-left: var(--space-s);
+ padding-right: var(--space-s);
+ font-size: var(--font-size-label3);
+}
+
+.utk-button--small .utk-button__text {
+ font-size: var(--font-size-label3);
+}
+
+.utk-button--small .utk-button__icon {
+ font-size: var(--font-size-label3);
+}
+
+.utk-button--medium {
+ height: var(--size-btn-height);
+ min-width: var(--size-btn-min-width);
+}
+
+.utk-button--large {
+ height: 32px;
+ min-width: 100px;
+ padding-left: var(--space-l);
+ padding-right: var(--space-l);
+}
+
+.utk-button--large .utk-button__text {
+ font-size: var(--font-size-body1);
+}
+
+.utk-button--large .utk-button__icon {
+ font-size: var(--font-size-body1);
+}
+
+/* ===================================
+ Style Variants
+ =================================== */
+
+/* Normal (Default) */
+.utk-button--normal {
+ background-color: var(--color-btn-normal);
+ border-color: var(--color-border);
+ color: var(--color-text-primary);
+}
+
+.utk-button--normal:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-button--normal:active {
+ background-color: var(--color-btn-pressed);
+}
+
+/* Primary */
+.utk-button--primary {
+ background-color: var(--color-btn-primary);
+ border-color: var(--color-btn-primary);
+ color: var(--color-text-on-primary);
+}
+
+.utk-button--primary:hover {
+ background-color: var(--color-btn-primary-hover);
+ border-color: var(--color-btn-primary-hover);
+}
+
+.utk-button--primary:active {
+ background-color: var(--color-blue-04);
+ border-color: var(--color-blue-04);
+}
+
+.utk-button--primary .utk-button__text,
+.utk-button--primary .utk-button__icon {
+ color: var(--color-text-on-primary);
+}
+
+/* Secondary */
+.utk-button--secondary {
+ background-color: var(--color-btn-secondary);
+ border-color: var(--color-border);
+ color: var(--color-text-primary);
+}
+
+.utk-button--secondary:hover {
+ background-color: var(--color-btn-secondary-hover);
+}
+
+/* Ghost (Transparent) */
+.utk-button--ghost {
+ background-color: transparent;
+ border-color: transparent;
+ color: var(--color-text-primary);
+}
+
+.utk-button--ghost:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+.utk-button--ghost:active {
+ background-color: rgba(255, 255, 255, 0.15);
+}
+
+/* Danger */
+.utk-button--danger {
+ background-color: var(--color-red-01);
+ border-color: var(--color-red-01);
+ color: var(--color-text-on-primary);
+}
+
+.utk-button--danger:hover {
+ background-color: var(--color-red-02);
+ border-color: var(--color-red-02);
+}
+
+.utk-button--danger .utk-button__text,
+.utk-button--danger .utk-button__icon {
+ color: var(--color-text-on-primary);
+}
+
+/* ===================================
+ Outline Variants
+ =================================== */
+
+/* Outline Normal */
+.utk-button--outline-normal {
+ background-color: transparent;
+ border-color: var(--color-border);
+ border-width: 1px;
+ color: var(--color-text-primary);
+}
+
+.utk-button--outline-normal:hover {
+ background-color: var(--color-btn-hover);
+ border-color: var(--color-text-primary);
+}
+
+.utk-button--outline-normal:active {
+ background-color: var(--color-btn-pressed);
+}
+
+.utk-button--outline-normal .utk-button__text,
+.utk-button--outline-normal .utk-button__icon {
+ color: var(--color-text-primary);
+}
+
+/* Outline Primary */
+.utk-button--outline-primary {
+ background-color: transparent;
+ border-color: var(--color-btn-primary);
+ border-width: 1px;
+ color: var(--color-btn-primary);
+}
+
+.utk-button--outline-primary:hover {
+ background-color: var(--color-btn-primary);
+ border-color: var(--color-btn-primary);
+}
+
+.utk-button--outline-primary:active {
+ background-color: var(--color-btn-primary-hover);
+ border-color: var(--color-btn-primary-hover);
+}
+
+.utk-button--outline-primary .utk-button__text,
+.utk-button--outline-primary .utk-button__icon {
+ color: var(--color-btn-primary);
+}
+
+.utk-button--outline-primary:hover .utk-button__text,
+.utk-button--outline-primary:hover .utk-button__icon {
+ color: var(--color-text-on-primary);
+}
+
+/* Outline Danger */
+.utk-button--outline-danger {
+ background-color: transparent;
+ border-color: var(--color-red-01);
+ border-width: 1px;
+ color: var(--color-red-01);
+}
+
+.utk-button--outline-danger:hover {
+ background-color: var(--color-red-01);
+ border-color: var(--color-red-01);
+}
+
+.utk-button--outline-danger:active {
+ background-color: var(--color-red-02);
+ border-color: var(--color-red-02);
+}
+
+.utk-button--outline-danger .utk-button__text,
+.utk-button--outline-danger .utk-button__icon {
+ color: var(--color-red-01);
+}
+
+.utk-button--outline-danger:hover .utk-button__text,
+.utk-button--outline-danger:hover .utk-button__icon {
+ color: var(--color-text-on-primary);
+}
+
+/* ===================================
+ Text Variant (Label/Icon only, no background/border)
+ =================================== */
+
+/* Text - 배경과 외곽선이 투명하고 텍스트/아이콘만 표시 */
+.utk-button--text {
+ background-color: transparent;
+ border-color: transparent;
+ border-width: 0;
+ color: var(--color-text-primary);
+ padding-left: var(--space-s);
+ padding-right: var(--space-s);
+ min-width: auto;
+}
+
+.utk-button--text:hover {
+ background-color: transparent;
+ color: var(--color-btn-primary);
+}
+
+.utk-button--text:active {
+ background-color: transparent;
+ color: var(--color-btn-primary-hover);
+}
+
+.utk-button--text .utk-button__text,
+.utk-button--text .utk-button__icon {
+ color: var(--color-text-primary);
+}
+
+.utk-button--text:hover .utk-button__text,
+.utk-button--text:hover .utk-button__icon {
+ color: var(--color-btn-primary);
+}
+
+.utk-button--text:active .utk-button__text,
+.utk-button--text:active .utk-button__icon {
+ color: var(--color-btn-primary-hover);
+}
+
+/* Text Icon Only - 원형 아이콘 버튼 */
+.utk-button--text.utk-button--icon-only {
+ width: var(--size-icon-btn);
+ height: var(--size-icon-btn);
+ border-radius: 50%;
+ padding: 0;
+}
+
+.utk-button--text.utk-button--icon-only:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+.utk-button--text.utk-button--icon-only:hover .utk-button__icon {
+ color: var(--color-text-primary);
+}
+
+.utk-button--text.utk-button--icon-only:active {
+ background-color: rgba(255, 255, 255, 0.15);
+}
+
+.utk-button--text.utk-button--icon-only:active .utk-button__icon {
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-button--disabled {
+ background-color: var(--color-btn-disabled);
+ border-color: var(--color-border);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-button--disabled:hover {
+ background-color: var(--color-btn-disabled);
+ border-color: var(--color-border);
+}
+
+.utk-button--disabled:active {
+ background-color: var(--color-btn-disabled);
+ border-color: var(--color-border);
+}
+
+.utk-button--disabled:focus {
+ border-color: var(--color-border);
+}
+
+.utk-button--disabled .utk-button__text,
+.utk-button--disabled .utk-button__icon {
+ color: var(--color-text-disabled);
+}
+
+/* Text Variant Disabled - hover/active 시에도 색상 유지 */
+.utk-button--text.utk-button--disabled {
+ background-color: transparent;
+ border-color: transparent;
+}
+
+.utk-button--text.utk-button--disabled:hover {
+ background-color: transparent;
+}
+
+.utk-button--text.utk-button--disabled:hover .utk-button__text,
+.utk-button--text.utk-button--disabled:hover .utk-button__icon {
+ color: var(--color-text-disabled);
+}
+
+.utk-button--text.utk-button--disabled:active .utk-button__text,
+.utk-button--text.utk-button--disabled:active .utk-button__icon {
+ color: var(--color-text-disabled);
+}
+
+/* ===================================
+ Image Icon Support
+ =================================== */
+
+.utk-button__image-icon {
+ width: 20px;
+ height: 20px;
+ flex-shrink: 0;
+ -unity-background-scale-mode: scale-to-fit;
+}
+
+.utk-button--has-image-icon .utk-button__image-icon {
+ margin-right: var(--space-s);
+}
+
+.utk-button--icon-only .utk-button__image-icon {
+ margin-right: 0;
+}
+
+/* Size Variants for Image Icon */
+.utk-button--small .utk-button__image-icon {
+ width: 16px;
+ height: 16px;
+}
+
+.utk-button--large .utk-button__image-icon {
+ width: 24px;
+ height: 24px;
+}
diff --git a/Assets/Resources/UIToolkit/Button/UTKButton.uss.meta b/Assets/Resources/UIToolkit/Button/UTKButton.uss.meta
new file mode 100644
index 00000000..353c9b28
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button/UTKButton.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d87c1fbcdd3ffee42b5860c781bcb4f8
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Button/UTKCheckBox.uss b/Assets/Resources/UIToolkit/Button/UTKCheckBox.uss
new file mode 100644
index 00000000..3bd0ca14
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button/UTKCheckBox.uss
@@ -0,0 +1,118 @@
+/*
+ * ===================================
+ * UTKCheckBox.uss
+ * 체크박스 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-checkbox {
+ flex-direction: row;
+ align-items: center;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+/* ===================================
+ Checkbox Box
+ =================================== */
+
+.utk-checkbox__box {
+ width: 18px;
+ height: 18px;
+ min-width: 18px;
+ min-height: 18px;
+ border-radius: var(--radius-s);
+ border-width: 2px;
+ border-color: var(--color-border);
+ background-color: var(--color-bg-input);
+ align-items: center;
+ justify-content: center;
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
+}
+
+.utk-checkbox:hover .utk-checkbox__box {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-checkbox--checked .utk-checkbox__box,
+.utk-checkbox--indeterminate .utk-checkbox__box {
+ border-color: var(--color-btn-primary);
+ background-color: var(--color-btn-primary);
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
+}
+
+/* ===================================
+ Check Icon
+ =================================== */
+
+.utk-checkbox__icon {
+ width: 14px;
+ height: 14px;
+ font-size: 12px;
+ color: var(--color-text-primary);
+ -unity-text-align: middle-center;
+ -unity-font-style: bold;
+ opacity: 0;
+ transition-duration: var(--anim-fast);
+ transition-property: opacity;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ translate: -50% -50%;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
+}
+
+.utk-checkbox--checked .utk-checkbox__icon,
+.utk-checkbox--indeterminate .utk-checkbox__icon {
+ opacity: 1;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-checkbox__label {
+ margin-left: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-checkbox--disabled {
+ cursor: arrow;
+}
+
+.utk-checkbox--disabled .utk-checkbox__box {
+ border-color: var(--color-border);
+ background-color: var(--color-btn-disabled);
+}
+
+.utk-checkbox--disabled:hover .utk-checkbox__box {
+ border-color: var(--color-border);
+}
+
+.utk-checkbox--disabled.utk-checkbox--checked .utk-checkbox__box,
+.utk-checkbox--disabled.utk-checkbox--indeterminate .utk-checkbox__box {
+ background-color: var(--color-text-disabled);
+ border-color: var(--color-text-disabled);
+}
+
+.utk-checkbox--disabled.utk-checkbox--checked:hover .utk-checkbox__box,
+.utk-checkbox--disabled.utk-checkbox--indeterminate:hover .utk-checkbox__box {
+ border-color: var(--color-text-disabled);
+}
+
+.utk-checkbox--disabled .utk-checkbox__label {
+ color: var(--color-text-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Button/UTKCheckBox.uss.meta b/Assets/Resources/UIToolkit/Button/UTKCheckBox.uss.meta
new file mode 100644
index 00000000..fdbb32ec
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button/UTKCheckBox.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c2c311091db8199469dcc687e40e3765
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Button/UTKRadioButton.uss b/Assets/Resources/UIToolkit/Button/UTKRadioButton.uss
new file mode 100644
index 00000000..db9c7311
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button/UTKRadioButton.uss
@@ -0,0 +1,124 @@
+/*
+ * ===================================
+ * UTKRadioButton.uss
+ * Unity RadioButton 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-radio {
+ flex-direction: row;
+ align-items: center;
+ align-self: flex-start;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+/* ===================================
+ Radio Input Container
+ =================================== */
+
+.utk-radio > .unity-radio-button__input {
+ flex-direction: row;
+ align-items: center;
+}
+
+/* ===================================
+ Checkmark Container (Outer Circle)
+ =================================== */
+
+.utk-radio .unity-radio-button__checkmark-background {
+ width: 18px;
+ height: 18px;
+ border-radius: 9px;
+ border-width: 2px;
+ border-color: var(--color-border);
+ background-color: var(--color-bg-input);
+ align-items: center;
+ justify-content: center;
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-radio:hover .unity-radio-button__checkmark-background {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-radio:checked .unity-radio-button__checkmark-background {
+ border-color: var(--color-btn-primary);
+ background-color: var(--color-btn-primary);
+}
+
+/* ===================================
+ Checkmark (Inner Dot)
+ =================================== */
+
+.utk-radio .unity-radio-button__checkmark {
+ width: 8px;
+ height: 8px;
+ border-radius: 4px;
+ background-color: transparent;
+ background-image: none;
+ -unity-background-image-tint-color: transparent;
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ translate: -50% -50%;
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+}
+
+.utk-radio:checked .unity-radio-button__checkmark {
+ background-color: var(--color-text-on-primary);
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-radio .unity-radio-button__text {
+ margin-left: var(--space-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-radio:disabled {
+ cursor: arrow;
+ opacity: 1;
+}
+
+.utk-radio:disabled .unity-radio-button__checkmark-background {
+ border-color: var(--color-border);
+ background-color: var(--color-btn-disabled);
+}
+
+.utk-radio:disabled:hover .unity-radio-button__checkmark-background {
+ border-color: var(--color-border);
+}
+
+.utk-radio:disabled:checked:hover .unity-radio-button__checkmark-background {
+ border-color: var(--color-text-disabled);
+}
+
+.utk-radio:disabled:checked .unity-radio-button__checkmark-background {
+ background-color: var(--color-text-disabled);
+ border-color: var(--color-text-disabled);
+}
+
+.utk-radio:disabled .unity-radio-button__checkmark {
+ background-color: var(--color-btn-disabled);
+}
+
+.utk-radio:disabled:checked .unity-radio-button__checkmark {
+ background-color: var(--color-text-on-primary);
+}
+
+.utk-radio:disabled .unity-radio-button__text {
+ color: var(--color-text-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Button/UTKRadioButton.uss.meta b/Assets/Resources/UIToolkit/Button/UTKRadioButton.uss.meta
new file mode 100644
index 00000000..58ba329b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button/UTKRadioButton.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1480e5ed2b9f5914f8a920e59c027cf3
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Button/UTKToggle.uss b/Assets/Resources/UIToolkit/Button/UTKToggle.uss
new file mode 100644
index 00000000..fafadd04
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button/UTKToggle.uss
@@ -0,0 +1,112 @@
+/*
+ * ===================================
+ * UTKToggle.uss
+ * Unity Toggle 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-toggle {
+ flex-direction: row;
+ align-items: center;
+ align-self: flex-start;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+/* ===================================
+ Hide default Unity checkmark
+ =================================== */
+
+.utk-toggle > .unity-toggle__input {
+ width: 36px;
+ height: 20px;
+ min-width: 36px;
+ min-height: 20px;
+ border-radius: 10px;
+ background-color: var(--color-btn-normal);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ flex-shrink: 0;
+ transition-duration: var(--anim-normal);
+ transition-property: background-color, border-color;
+}
+
+.utk-toggle:hover > .unity-toggle__input {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-toggle--on > .unity-toggle__input {
+ background-color: var(--color-btn-primary);
+ border-color: var(--color-btn-primary);
+}
+
+/* ===================================
+ Checkmark (Thumb)
+ =================================== */
+
+.utk-toggle > .unity-toggle__input > .unity-toggle__checkmark {
+ width: 14px;
+ height: 14px;
+ border-width: 0;
+ border-radius: var(--radius-full);
+ background-color: var(--color-text-secondary);
+ -unity-background-image-tint-color: transparent;
+ background-image: none;
+ margin: 2px;
+ transition-duration: var(--anim-normal);
+ transition-property: translate, background-color;
+}
+
+.utk-toggle--on > .unity-toggle__input > .unity-toggle__checkmark {
+ translate: 16px 0;
+ background-color: var(--color-text-on-primary);
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-toggle > .unity-toggle__label,
+.utk-toggle > .unity-label {
+ margin-left: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-toggle--disabled {
+ cursor: arrow;
+}
+
+.utk-toggle--disabled > .unity-toggle__input {
+ background-color: var(--color-btn-disabled);
+ border-color: var(--color-border);
+}
+
+.utk-toggle--disabled:hover > .unity-toggle__input {
+ border-color: var(--color-border);
+}
+
+.utk-toggle--disabled.utk-toggle--on > .unity-toggle__input {
+ background-color: var(--color-text-disabled);
+ border-color: var(--color-text-disabled);
+}
+
+.utk-toggle--disabled.utk-toggle--on:hover > .unity-toggle__input {
+ border-color: var(--color-text-disabled);
+}
+
+.utk-toggle--disabled > .unity-toggle__input > .unity-toggle__checkmark {
+ background-color: var(--color-text-disabled);
+}
+
+.utk-toggle--disabled > .unity-toggle__label,
+.utk-toggle--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Button/UTKToggle.uss.meta b/Assets/Resources/UIToolkit/Button/UTKToggle.uss.meta
new file mode 100644
index 00000000..e9324798
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button/UTKToggle.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ea8e7fa6e2b464743a2cb236bc35086f
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Button/UTKToggleButtonGroup.uss b/Assets/Resources/UIToolkit/Button/UTKToggleButtonGroup.uss
new file mode 100644
index 00000000..eb22d623
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button/UTKToggleButtonGroup.uss
@@ -0,0 +1,87 @@
+/*
+ * ===================================
+ * UTKToggleButtonGroup.uss
+ * Unity ToggleButtonGroup 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-toggle-group {
+ flex-direction: row;
+ background-color: var(--color-bg-secondary);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ padding: 2px;
+}
+
+/* ===================================
+ Toggle Buttons
+ =================================== */
+
+.utk-toggle-group > .unity-button {
+ margin: 0;
+ padding: var(--space-xs) var(--space-m);
+ background-color: transparent;
+ border-width: 0;
+ border-radius: var(--radius-xs);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color, color;
+}
+
+.utk-toggle-group > .unity-button:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-toggle-group > .unity-button:checked {
+ background-color: var(--color-btn-primary);
+ color: var(--color-text-on-primary);
+}
+
+.utk-toggle-group > .unity-button:checked:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+/* ===================================
+ Custom Button Class
+ =================================== */
+
+.utk-toggle-group__button {
+ flex-direction: row;
+ align-items: center;
+}
+
+.utk-toggle-group__icon {
+ margin-right: var(--space-xs);
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-toggle-group--disabled {
+ opacity: 1;
+}
+
+.utk-toggle-group--disabled > .unity-button {
+ color: var(--color-text-disabled);
+ background-color: transparent;
+}
+
+.utk-toggle-group--disabled > .unity-button:hover {
+ background-color: transparent;
+}
+
+.utk-toggle-group--disabled > .unity-button:checked {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+}
+
+.utk-toggle-group--disabled > .unity-button:checked:hover {
+ background-color: var(--color-btn-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Button/UTKToggleButtonGroup.uss.meta b/Assets/Resources/UIToolkit/Button/UTKToggleButtonGroup.uss.meta
new file mode 100644
index 00000000..d95795c7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Button/UTKToggleButtonGroup.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b86bf8de13087274d838017cb2603ed2
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Card.meta b/Assets/Resources/UIToolkit/Card.meta
new file mode 100644
index 00000000..71aed263
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Card.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 68a77a858a5c1ce44832e5b9580b80de
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Card/UTKCard.uss b/Assets/Resources/UIToolkit/Card/UTKCard.uss
new file mode 100644
index 00000000..f6b3949d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Card/UTKCard.uss
@@ -0,0 +1,112 @@
+/*
+ * ===================================
+ * UTKCard.uss
+ * 카드 컴포넌트 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-card {
+ flex-direction: column;
+ border-radius: var(--radius-l);
+ overflow: hidden;
+}
+
+/* ===================================
+ Variants
+ =================================== */
+
+.utk-card--elevated {
+ background-color: var(--color-bg-elevated);
+}
+
+.utk-card--outlined {
+ background-color: var(--color-bg-panel);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+.utk-card--filled {
+ background-color: var(--color-btn-normal);
+}
+
+/* ===================================
+ Clickable State
+ =================================== */
+
+.utk-card--clickable {
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+}
+
+.utk-card--clickable:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-card--clickable:active {
+ background-color: var(--color-btn-pressed);
+}
+
+/* ===================================
+ Image Container
+ =================================== */
+
+.utk-card__image {
+ height: 160px;
+ background-size: cover;
+ background-position: center;
+}
+
+/* ===================================
+ Header
+ =================================== */
+
+.utk-card__header {
+ flex-direction: column;
+ padding: var(--space-l);
+ padding-bottom: 0;
+}
+
+/* ===================================
+ Title
+ =================================== */
+
+.utk-card__title {
+ font-size: var(--font-size-h3);
+ color: var(--color-text-primary);
+ -unity-font-style: bold;
+ margin-bottom: var(--space-xs);
+}
+
+/* ===================================
+ Subtitle
+ =================================== */
+
+.utk-card__subtitle {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+}
+
+/* ===================================
+ Content
+ =================================== */
+
+.utk-card__content {
+ padding: var(--space-l);
+}
+
+/* ===================================
+ Actions
+ =================================== */
+
+.utk-card__actions {
+ flex-direction: row;
+ justify-content: flex-end;
+ padding: var(--space-m) var(--space-l);
+ border-top-width: var(--border-width);
+ border-top-color: var(--color-border);
+}
diff --git a/Assets/Resources/UIToolkit/Card/UTKCard.uss.meta b/Assets/Resources/UIToolkit/Card/UTKCard.uss.meta
new file mode 100644
index 00000000..259784f8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Card/UTKCard.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2fe5884914f7ee14d8a93eedb3b40fd4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Common.meta b/Assets/Resources/UIToolkit/Common.meta
new file mode 100644
index 00000000..f12d413f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 31176a3f98a362d4283ac94b4d603372
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Common/UTKFoldout.uss b/Assets/Resources/UIToolkit/Common/UTKFoldout.uss
new file mode 100644
index 00000000..40c4da9d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKFoldout.uss
@@ -0,0 +1,100 @@
+/*
+ * ===================================
+ * UTKFoldout.uss
+ * Unity Foldout 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-foldout {
+ margin-bottom: var(--space-s);
+}
+
+/* ===================================
+ Toggle (Header)
+ =================================== */
+
+.utk-foldout > .unity-foldout__toggle {
+ margin: 0;
+ padding: var(--space-s) var(--space-m);
+ background-color: var(--color-bg-secondary);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color, border-color;
+}
+
+.utk-foldout > .unity-foldout__toggle:hover {
+ background-color: var(--color-btn-hover);
+}
+
+/* ===================================
+ Checkmark (Arrow)
+ =================================== */
+
+.utk-foldout > .unity-foldout__toggle > .unity-toggle__input > .unity-foldout__checkmark {
+ width: 16px;
+ height: 16px;
+ -unity-background-image-tint-color: var(--color-text-secondary);
+ transition-duration: var(--anim-fast);
+ transition-property: rotate;
+ margin-top: 0;
+ margin-bottom: 0;
+ margin-left: 0;
+ margin-right: var(--space-xs);
+}
+
+.utk-foldout > .unity-foldout__toggle:checked > .unity-toggle__input > .unity-foldout__checkmark {
+ rotate: 0deg;
+}
+
+/* ===================================
+ Title Label
+ =================================== */
+
+.utk-foldout > .unity-foldout__toggle > .unity-toggle__input > .unity-foldout__text {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-font-style: bold;
+ margin: 0;
+ padding: var(--space-s) 0;
+}
+
+/* ===================================
+ Content Container
+ =================================== */
+
+.utk-foldout .unity-foldout__content {
+ margin-top: var(--space-s);
+ margin-left: var(--space-m);
+ padding: var(--space-m);
+ background-color: var(--color-bg-secondary);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+.utk-foldout .unity-foldout__content {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Collapsed State - Remove content border radius on top
+ =================================== */
+
+.utk-foldout:checked > .unity-foldout__toggle {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.utk-foldout:checked .unity-foldout__content {
+ margin-top: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-top-width: 0;
+}
diff --git a/Assets/Resources/UIToolkit/Common/UTKFoldout.uss.meta b/Assets/Resources/UIToolkit/Common/UTKFoldout.uss.meta
new file mode 100644
index 00000000..5bd33a1e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKFoldout.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7a0f870707b8498449e18047de242133
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Common/UTKHelpBox.uss b/Assets/Resources/UIToolkit/Common/UTKHelpBox.uss
new file mode 100644
index 00000000..c2530033
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKHelpBox.uss
@@ -0,0 +1,127 @@
+/*
+ * ===================================
+ * UTKHelpBox.uss
+ * Unity HelpBox 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-helpbox {
+ flex-direction: row;
+ align-items: center;
+ padding: var(--space-m);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ min-height: 32px;
+}
+
+/* ===================================
+ Icon
+ =================================== */
+
+.utk-helpbox__icon {
+ font-size: 20px;
+ margin-right: var(--space-m);
+ flex-shrink: 0;
+ align-self: center;
+}
+
+/* ===================================
+ Message
+ =================================== */
+
+.utk-helpbox__message {
+ flex-grow: 1;
+ font-size: var(--font-size-body2);
+ white-space: normal;
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Info Type
+ =================================== */
+
+.utk-helpbox--info {
+ background-color: rgba(8, 151, 251, 0.1);
+ border-color: var(--color-state-info);
+}
+
+.utk-helpbox--info .utk-helpbox__icon {
+ color: var(--color-state-info);
+}
+
+.utk-helpbox--info .utk-helpbox__message {
+ color: var(--color-state-info);
+}
+
+/* ===================================
+ Success Type
+ =================================== */
+
+.utk-helpbox--success {
+ background-color: rgba(115, 201, 145, 0.1);
+ border-color: var(--color-state-success);
+}
+
+.utk-helpbox--success .utk-helpbox__icon {
+ color: var(--color-state-success);
+}
+
+.utk-helpbox--success .utk-helpbox__message {
+ color: var(--color-state-success);
+}
+
+/* ===================================
+ Warning Type
+ =================================== */
+
+.utk-helpbox--warning {
+ background-color: rgba(238, 157, 40, 0.1);
+ border-color: var(--color-state-warning);
+}
+
+.utk-helpbox--warning .utk-helpbox__icon {
+ color: var(--color-state-warning);
+}
+
+.utk-helpbox--warning .utk-helpbox__message {
+ color: var(--color-state-warning);
+}
+
+/* ===================================
+ Error Type
+ =================================== */
+
+.utk-helpbox--error {
+ background-color: rgba(241, 76, 76, 0.1);
+ border-color: var(--color-state-error);
+}
+
+.utk-helpbox--error .utk-helpbox__icon {
+ color: var(--color-state-error);
+}
+
+.utk-helpbox--error .utk-helpbox__message {
+ color: var(--color-state-error);
+}
+
+/* ===================================
+ None Type (No icon)
+ =================================== */
+
+.utk-helpbox--none {
+ background-color: var(--color-bg-secondary);
+ border-color: var(--color-border);
+}
+
+.utk-helpbox--none .utk-helpbox__icon {
+ display: none;
+}
+
+.utk-helpbox--none .utk-helpbox__message {
+ color: var(--color-text-primary);
+}
+
diff --git a/Assets/Resources/UIToolkit/Common/UTKHelpBox.uss.meta b/Assets/Resources/UIToolkit/Common/UTKHelpBox.uss.meta
new file mode 100644
index 00000000..6af21a0a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKHelpBox.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e71b5c9d9a33d264fbd619b3b6e3a707
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Common/UTKImage.uss b/Assets/Resources/UIToolkit/Common/UTKImage.uss
new file mode 100644
index 00000000..b124b2ae
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKImage.uss
@@ -0,0 +1,10 @@
+/* UTKImage 기본 스타일 */
+.utk-image {
+ overflow: hidden;
+ -unity-background-scale-mode: scale-to-fit;
+}
+
+/* 로딩 상태 */
+.utk-image--loading {
+ opacity: 0.5;
+}
diff --git a/Assets/Resources/UIToolkit/Common/UTKImage.uss.meta b/Assets/Resources/UIToolkit/Common/UTKImage.uss.meta
new file mode 100644
index 00000000..f78b8f30
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKImage.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 143038e63b8fc834cafe9db628cc5011
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Common/UTKScrollView.uss b/Assets/Resources/UIToolkit/Common/UTKScrollView.uss
new file mode 100644
index 00000000..0daea829
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKScrollView.uss
@@ -0,0 +1,57 @@
+/*
+ * ===================================
+ * UTKScrollView.uss
+ * Unity ScrollView 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-scrollview {
+ flex-grow: 1;
+}
+
+/* ===================================
+ Content Container
+ =================================== */
+
+.utk-scrollview > .unity-scroll-view__content-and-vertical-scroll-container {
+ flex-grow: 1;
+}
+
+.utk-scrollview > .unity-scroll-view__content-and-vertical-scroll-container > .unity-scroll-view__content-viewport {
+ flex-grow: 1;
+}
+
+.utk-scrollview > .unity-scroll-view__content-and-vertical-scroll-container > .unity-scroll-view__content-viewport > .unity-scroll-view__content-container {
+ padding: 0;
+}
+
+/* ===================================
+ Content Text
+ =================================== */
+
+.utk-scrollview .unity-label {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Vertical Scroller
+ =================================== */
+
+.utk-scrollview .unity-scroller--vertical > .unity-scroller__slider {
+ width: 6px;
+ margin: 0;
+}
+
+/* ===================================
+ Horizontal Scroller
+ =================================== */
+
+.utk-scrollview .unity-scroller--horizontal > .unity-scroller__slider {
+ height: 6px;
+ margin: 0;
+}
diff --git a/Assets/Resources/UIToolkit/Common/UTKScrollView.uss.meta b/Assets/Resources/UIToolkit/Common/UTKScrollView.uss.meta
new file mode 100644
index 00000000..d54687ac
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKScrollView.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ff0a7d358a20ced4dbe5ef646db9b0f3
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Common/UTKTooltip.uss b/Assets/Resources/UIToolkit/Common/UTKTooltip.uss
new file mode 100644
index 00000000..c3cba5cf
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKTooltip.uss
@@ -0,0 +1,18 @@
+/* UTKTooltip.uss - 툴팁 스타일 */
+
+.utk-tooltip-container {
+ position: absolute;
+ background-color: var(--color-bg-tooltip);
+ border-radius: var(--radius-m);
+ padding: var(--space-s) var(--space-m);
+ max-width: 300px;
+ border-width: var(--border-width);
+ border-color: var(--color-border-light);
+}
+
+.utk-tooltip-label {
+ color: #FFFFFF;
+ font-size: var(--font-size-body2);
+ white-space: normal;
+ -unity-text-align: middle-left;
+}
diff --git a/Assets/Resources/UIToolkit/Common/UTKTooltip.uss.meta b/Assets/Resources/UIToolkit/Common/UTKTooltip.uss.meta
new file mode 100644
index 00000000..7c0855b5
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKTooltip.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d18684c4217403848995bd0890378f98
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Common/UTKTooltip.uxml b/Assets/Resources/UIToolkit/Common/UTKTooltip.uxml
new file mode 100644
index 00000000..6534bc28
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKTooltip.uxml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Common/UTKTooltip.uxml.meta b/Assets/Resources/UIToolkit/Common/UTKTooltip.uxml.meta
new file mode 100644
index 00000000..c712d60c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Common/UTKTooltip.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: f473e51c9a54d0842a93597f537a6d8b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Document.meta b/Assets/Resources/UIToolkit/Document.meta
new file mode 100644
index 00000000..d3c2ba8f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Document.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: c4f4597de9fcbbf42b0ae7a69db1d5c3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Document/DynamicDocument.uxml b/Assets/Resources/UIToolkit/Document/DynamicDocument.uxml
new file mode 100644
index 00000000..2dfe7e44
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Document/DynamicDocument.uxml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Document/DynamicDocument.uxml.meta b/Assets/Resources/UIToolkit/Document/DynamicDocument.uxml.meta
new file mode 100644
index 00000000..f72f1d0d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Document/DynamicDocument.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 388c12cc6f747a3409725653495a6501
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Document/ModalDocument.uxml b/Assets/Resources/UIToolkit/Document/ModalDocument.uxml
new file mode 100644
index 00000000..2dfe7e44
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Document/ModalDocument.uxml
@@ -0,0 +1,9 @@
+
+
+
+
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Document/ModalDocument.uxml.meta b/Assets/Resources/UIToolkit/Document/ModalDocument.uxml.meta
new file mode 100644
index 00000000..e7871ac5
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Document/ModalDocument.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 5ad0294e546cb18409d368046997e670
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Document/StaticDocument.uxml b/Assets/Resources/UIToolkit/Document/StaticDocument.uxml
new file mode 100644
index 00000000..e76d3f85
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Document/StaticDocument.uxml
@@ -0,0 +1,2 @@
+
+
diff --git a/Assets/Resources/UIToolkit/Document/StaticDocument.uxml.meta b/Assets/Resources/UIToolkit/Document/StaticDocument.uxml.meta
new file mode 100644
index 00000000..a285aafd
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Document/StaticDocument.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 9d3024917e8d4b546943ec3f7b03d9e4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Dropdown.meta b/Assets/Resources/UIToolkit/Dropdown.meta
new file mode 100644
index 00000000..a6dc856e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Dropdown.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e3e102ff4716d6d4599fe861ea58a444
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Dropdown/UTKDropdownUss.uss b/Assets/Resources/UIToolkit/Dropdown/UTKDropdownUss.uss
new file mode 100644
index 00000000..8320730d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Dropdown/UTKDropdownUss.uss
@@ -0,0 +1,212 @@
+/*
+ * ===================================
+ * UTKDropdown.uss
+ * 단일 선택 드롭다운 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-dropdown {
+ flex-direction: row;
+ align-items: center;
+ position: relative;
+ overflow: visible;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-dropdown__label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-font-style: normal;
+ display: none;
+}
+
+/* ===================================
+ Input Container (Display Field)
+ =================================== */
+
+.utk-dropdown__input {
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+ min-width: 100px;
+ flex-grow: 1;
+ height: var(--size-input-height);
+ padding-top: 0px;
+ padding-bottom: 0px;
+ padding-left: var(--space-m);
+ padding-right: 0;
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-dropdown__input:hover {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-dropdown--open .utk-dropdown__input {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Display Label
+ =================================== */
+
+.utk-dropdown__display {
+ flex-grow: 1;
+ flex-shrink: 1;
+ min-width: 0;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ -unity-text-align: middle-left;
+}
+
+.utk-dropdown__display--placeholder {
+ color: var(--color-text-secondary);
+}
+
+/* ===================================
+ Dropdown Icon Container
+ =================================== */
+
+.utk-dropdown__icon-container {
+ flex-shrink: 0;
+ width: 24px;
+ height: 24px;
+ margin-left: var(--space-s);
+ margin-right: 0;
+ align-items: center;
+ justify-content: center;
+}
+
+/* ===================================
+ Dropdown Icon
+ =================================== */
+
+.utk-dropdown__icon {
+ width: 100%;
+ height: 100%;
+ font-size: 18px;
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+}
+
+/* ===================================
+ Popup Container
+ =================================== */
+
+.utk-dropdown__popup {
+ max-height: 300px;
+ background-color: var(--color-bg-elevated);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-xs);
+ box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);
+}
+
+/* ===================================
+ Options ScrollView
+ =================================== */
+
+.utk-dropdown__options {
+ max-height: 280px;
+}
+
+.utk-dropdown__options > .unity-scroll-view__content-container {
+ flex-direction: column;
+}
+
+/* ===================================
+ Option Item
+ =================================== */
+
+.utk-dropdown__option {
+ position: relative;
+ flex-direction: row;
+ align-items: center;
+ padding: var(--space-xs) var(--space-s);
+ padding-left: 36px; /* 체크 아이콘 공간 확보: 8px(padding) + 20px(icon) + 8px(gap) */
+ border-radius: var(--radius-s);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+.utk-dropdown__option:hover,
+.utk-dropdown__option--hover {
+ background-color: var(--color-bg-hover);
+}
+
+/* ===================================
+ Check Icon (Selected Indicator)
+ =================================== */
+
+.utk-dropdown__check-icon {
+ position: absolute;
+ left: 8px;
+ width: 20px;
+ height: 20px;
+ font-size: 16px;
+ color: var(--color-btn-primary);
+ -unity-text-align: middle-center;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
+}
+
+/* ===================================
+ Option Label
+ =================================== */
+
+.utk-dropdown__option-label {
+ flex-grow: 1;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ margin-left: 0;
+ padding-left: 0;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-dropdown--disabled {
+ cursor: arrow;
+}
+
+.utk-dropdown--disabled .utk-dropdown__label {
+ color: var(--color-text-disabled);
+}
+
+.utk-dropdown--disabled .utk-dropdown__input {
+ background-color: var(--color-btn-disabled);
+ cursor: arrow;
+}
+
+.utk-dropdown--disabled .utk-dropdown__input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-dropdown--disabled .utk-dropdown__display {
+ color: var(--color-text-disabled);
+}
+
+.utk-dropdown--disabled .utk-dropdown__icon {
+ color: var(--color-text-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Dropdown/UTKDropdownUss.uss.meta b/Assets/Resources/UIToolkit/Dropdown/UTKDropdownUss.uss.meta
new file mode 100644
index 00000000..57ee9c59
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Dropdown/UTKDropdownUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2320c89b336d59c45b16b935c4f311b4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Dropdown/UTKEnumDropDownUss.uss b/Assets/Resources/UIToolkit/Dropdown/UTKEnumDropDownUss.uss
new file mode 100644
index 00000000..7d2a14e8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Dropdown/UTKEnumDropDownUss.uss
@@ -0,0 +1,212 @@
+/*
+ * ===================================
+ * UTKEnumDropDown.uss
+ * Enum 선택 드롭다운 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-enum-dropdown {
+ flex-direction: row;
+ align-items: center;
+ position: relative;
+ overflow: visible;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-enum-dropdown__label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-font-style: normal;
+ display: none;
+}
+
+/* ===================================
+ Input Container (Display Field)
+ =================================== */
+
+.utk-enum-dropdown__input {
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+ min-width: 120px;
+ flex-grow: 1;
+ height: var(--size-input-height);
+ padding-top: 0px;
+ padding-bottom: 0px;
+ padding-left: var(--space-m);
+ padding-right: 0;
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-enum-dropdown__input:hover {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-enum-dropdown--open .utk-enum-dropdown__input {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Display Label
+ =================================== */
+
+.utk-enum-dropdown__display {
+ flex-grow: 1;
+ flex-shrink: 1;
+ min-width: 0;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ -unity-text-align: middle-left;
+}
+
+.utk-enum-dropdown__display--placeholder {
+ color: var(--color-text-secondary);
+}
+
+/* ===================================
+ Dropdown Icon Container
+ =================================== */
+
+.utk-enum-dropdown__icon-container {
+ flex-shrink: 0;
+ width: 24px;
+ height: 24px;
+ margin-left: var(--space-s);
+ margin-right: 0;
+ align-items: center;
+ justify-content: center;
+}
+
+/* ===================================
+ Dropdown Icon
+ =================================== */
+
+.utk-enum-dropdown__icon {
+ width: 100%;
+ height: 100%;
+ font-size: 18px;
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+}
+
+/* ===================================
+ Popup Container
+ =================================== */
+
+.utk-enum-dropdown__popup {
+ max-height: 300px;
+ background-color: var(--color-bg-elevated);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-xs);
+ box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);
+}
+
+/* ===================================
+ Options ScrollView
+ =================================== */
+
+.utk-enum-dropdown__options {
+ max-height: 280px;
+}
+
+.utk-enum-dropdown__options > .unity-scroll-view__content-container {
+ flex-direction: column;
+}
+
+/* ===================================
+ Option Item
+ =================================== */
+
+.utk-enum-dropdown__option {
+ position: relative;
+ flex-direction: row;
+ align-items: center;
+ padding: var(--space-xs) var(--space-s);
+ padding-left: 36px; /* 체크 아이콘 공간 확보: 8px(padding) + 20px(icon) + 8px(gap) */
+ border-radius: var(--radius-s);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+.utk-enum-dropdown__option:hover,
+.utk-enum-dropdown__option--hover {
+ background-color: var(--color-bg-hover);
+}
+
+/* ===================================
+ Check Icon (Selected Indicator)
+ =================================== */
+
+.utk-enum-dropdown__check-icon {
+ position: absolute;
+ left: 8px;
+ width: 20px;
+ height: 20px;
+ font-size: 16px;
+ color: var(--color-btn-primary);
+ -unity-text-align: middle-center;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
+}
+
+/* ===================================
+ Option Label
+ =================================== */
+
+.utk-enum-dropdown__option-label {
+ flex-grow: 1;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ margin-left: 0;
+ padding-left: 0;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5; /* 클릭 가능 커서 */
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-enum-dropdown--disabled {
+ cursor: arrow;
+}
+
+.utk-enum-dropdown--disabled .utk-enum-dropdown__label {
+ color: var(--color-text-disabled);
+}
+
+.utk-enum-dropdown--disabled .utk-enum-dropdown__input {
+ background-color: var(--color-btn-disabled);
+ cursor: arrow;
+}
+
+.utk-enum-dropdown--disabled .utk-enum-dropdown__input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-enum-dropdown--disabled .utk-enum-dropdown__display {
+ color: var(--color-text-disabled);
+}
+
+.utk-enum-dropdown--disabled .utk-enum-dropdown__icon {
+ color: var(--color-text-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Dropdown/UTKEnumDropDownUss.uss.meta b/Assets/Resources/UIToolkit/Dropdown/UTKEnumDropDownUss.uss.meta
new file mode 100644
index 00000000..f0e07402
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Dropdown/UTKEnumDropDownUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9e84333091e1fc440853703013572ea1
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Dropdown/UTKMultiSelectDropdownUss.uss b/Assets/Resources/UIToolkit/Dropdown/UTKMultiSelectDropdownUss.uss
new file mode 100644
index 00000000..f04766f9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Dropdown/UTKMultiSelectDropdownUss.uss
@@ -0,0 +1,214 @@
+/*
+ * ===================================
+ * UTKMultiSelectDropdown.uss
+ * 다중 선택 드롭다운 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-multiselect-dropdown {
+ flex-direction: row;
+ align-items: center;
+ position: relative;
+ overflow: visible;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-multiselect-dropdown__label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-font-style: normal;
+}
+
+/* ===================================
+ Input Container (Display Field)
+ =================================== */
+
+.utk-multiselect-dropdown__input {
+ flex-direction: row;
+ align-items: center;
+ justify-content: space-between;
+ min-width: 120px;
+ flex-grow: 1;
+ height: var(--size-input-height);
+ padding-top: 0px;
+ padding-bottom: 0px;
+ padding-left: var(--space-m);
+ padding-right: 0;
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-multiselect-dropdown__input:hover {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-multiselect-dropdown--open .utk-multiselect-dropdown__input {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Display Label
+ =================================== */
+
+.utk-multiselect-dropdown__display {
+ flex-grow: 1;
+ flex-shrink: 1;
+ min-width: 0;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ -unity-text-align: middle-left;
+}
+
+.utk-multiselect-dropdown__display--placeholder {
+ color: var(--color-text-secondary);
+}
+
+/* ===================================
+ Dropdown Icon Container
+ =================================== */
+
+.utk-multiselect-dropdown__icon-container {
+ flex-shrink: 0;
+ width: 24px;
+ height: 24px;
+ margin-left: var(--space-s);
+ margin-right: 0;
+ align-items: center;
+ justify-content: center;
+}
+
+/* ===================================
+ Dropdown Icon
+ =================================== */
+
+.utk-multiselect-dropdown__icon {
+ width: 100%;
+ height: 100%;
+ font-size: 18px;
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+}
+
+/* ===================================
+ Popup Container
+ =================================== */
+
+.utk-multiselect-dropdown__popup {
+ max-height: 300px;
+ background-color: var(--color-bg-elevated);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-xs);
+ box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2);
+}
+
+/* ===================================
+ Options ScrollView
+ =================================== */
+
+.utk-multiselect-dropdown__options {
+ max-height: 280px;
+}
+
+.utk-multiselect-dropdown__options > .unity-scroll-view__content-container {
+ flex-direction: column;
+}
+
+/* ===================================
+ Option Item
+ =================================== */
+
+.utk-multiselect-dropdown__option {
+ flex-direction: row;
+ align-items: center;
+ padding: var(--space-xs) var(--space-s);
+ border-radius: var(--radius-s);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+}
+
+.utk-multiselect-dropdown__option:hover,
+.utk-multiselect-dropdown__option--hover {
+ background-color: var(--color-bg-hover);
+}
+
+/* ===================================
+ Toggle (Checkbox)
+ =================================== */
+
+.utk-multiselect-dropdown__toggle {
+ flex-grow: 1;
+ margin: 0;
+}
+
+.utk-multiselect-dropdown__toggle > .unity-label {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ padding-left: var(--space-s);
+ flex-grow: 1;
+}
+
+.utk-multiselect-dropdown__toggle > .unity-toggle__input {
+ flex-shrink: 0;
+}
+
+.utk-multiselect-dropdown__toggle > .unity-toggle__input > .unity-toggle__checkmark {
+ width: 16px;
+ height: 16px;
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-xs);
+ background-color: var(--color-bg-input);
+}
+
+.utk-multiselect-dropdown__toggle:checked > .unity-toggle__input > .unity-toggle__checkmark {
+ background-color: var(--color-btn-primary);
+ border-color: var(--color-btn-primary);
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-multiselect-dropdown--disabled {
+ cursor: arrow;
+}
+
+.utk-multiselect-dropdown--disabled .utk-multiselect-dropdown__label {
+ color: var(--color-text-disabled);
+}
+
+.utk-multiselect-dropdown--disabled .utk-multiselect-dropdown__input {
+ background-color: var(--color-btn-disabled);
+ cursor: arrow;
+}
+
+.utk-multiselect-dropdown--disabled .utk-multiselect-dropdown__input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-multiselect-dropdown--disabled .utk-multiselect-dropdown__display {
+ color: var(--color-text-disabled);
+}
+
+.utk-multiselect-dropdown--disabled .utk-multiselect-dropdown__icon {
+ color: var(--color-text-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Dropdown/UTKMultiSelectDropdownUss.uss.meta b/Assets/Resources/UIToolkit/Dropdown/UTKMultiSelectDropdownUss.uss.meta
new file mode 100644
index 00000000..7c074928
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Dropdown/UTKMultiSelectDropdownUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ac92d6de4f479c345969f036e1e56cf2
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Images.meta b/Assets/Resources/UIToolkit/Images.meta
new file mode 100644
index 00000000..79a5c5a9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7592dc8b147efba4c87e224db8ad6411
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/btn_cancel_64.png b/Assets/Resources/UIToolkit/Images/btn_cancel_64.png
new file mode 100644
index 00000000..7894909f
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/btn_cancel_64.png differ
diff --git a/Assets/Resources/UIToolkit/Images/btn_cancel_64.png.meta b/Assets/Resources/UIToolkit/Images/btn_cancel_64.png.meta
new file mode 100644
index 00000000..231030e4
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/btn_cancel_64.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 9dd52303744ec104bb941cd8271e0668
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 64
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/btn_close_16.png b/Assets/Resources/UIToolkit/Images/btn_close_16.png
new file mode 100644
index 00000000..c358d190
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/btn_close_16.png differ
diff --git a/Assets/Resources/UIToolkit/Images/btn_close_16.png.meta b/Assets/Resources/UIToolkit/Images/btn_close_16.png.meta
new file mode 100644
index 00000000..808f1a6d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/btn_close_16.png.meta
@@ -0,0 +1,117 @@
+fileFormatVersion: 2
+guid: 22696bb0676cc944586f52b7c9068566
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/btn_close_22.png b/Assets/Resources/UIToolkit/Images/btn_close_22.png
new file mode 100644
index 00000000..fa22e0e2
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/btn_close_22.png differ
diff --git a/Assets/Resources/UIToolkit/Images/btn_close_22.png.meta b/Assets/Resources/UIToolkit/Images/btn_close_22.png.meta
new file mode 100644
index 00000000..950bfccf
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/btn_close_22.png.meta
@@ -0,0 +1,117 @@
+fileFormatVersion: 2
+guid: 91d854fabfbb60445ba500eaffcaea07
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_arc_32.png b/Assets/Resources/UIToolkit/Images/cursor_arc_32.png
new file mode 100644
index 00000000..435205af
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_arc_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_arc_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_arc_32.png.meta
new file mode 100644
index 00000000..059c69f6
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_arc_32.png.meta
@@ -0,0 +1,117 @@
+fileFormatVersion: 2
+guid: acc29314a978fae4aac25b69b047bb67
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_ask_32.png b/Assets/Resources/UIToolkit/Images/cursor_ask_32.png
new file mode 100644
index 00000000..4c13833d
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_ask_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_ask_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_ask_32.png.meta
new file mode 100644
index 00000000..f25ef4cb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_ask_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 685c81e8ca4d2fc43bd652c2c87f9c59
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_context_menu_32.png b/Assets/Resources/UIToolkit/Images/cursor_context_menu_32.png
new file mode 100644
index 00000000..79add9dd
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_context_menu_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_context_menu_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_context_menu_32.png.meta
new file mode 100644
index 00000000..0ad6efa8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_context_menu_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 8463ac354797a2e47b66ae84a1c746d3
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_copy_32.png b/Assets/Resources/UIToolkit/Images/cursor_copy_32.png
new file mode 100644
index 00000000..129af4b3
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_copy_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_copy_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_copy_32.png.meta
new file mode 100644
index 00000000..6857c209
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_copy_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: c25b0d89f1cfa05408867c2868f310a1
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_default_black_32.png b/Assets/Resources/UIToolkit/Images/cursor_default_black_32.png
new file mode 100644
index 00000000..7228503b
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_default_black_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_default_black_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_default_black_32.png.meta
new file mode 100644
index 00000000..9390a4d3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_default_black_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 4c613dee867f03049a204be6c197a40c
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_default_white_32.png b/Assets/Resources/UIToolkit/Images/cursor_default_white_32.png
new file mode 100644
index 00000000..c3461e25
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_default_white_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_default_white_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_default_white_32.png.meta
new file mode 100644
index 00000000..e111f312
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_default_white_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: dc6f5fccfcbcd1d4ca3f339c4419497d
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_export_32.png b/Assets/Resources/UIToolkit/Images/cursor_export_32.png
new file mode 100644
index 00000000..6f9e4628
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_export_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_export_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_export_32.png.meta
new file mode 100644
index 00000000..81d1812e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_export_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 046797f2fb6687c43b0d2ceee318ba68
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_grabbing_32.png b/Assets/Resources/UIToolkit/Images/cursor_grabbing_32.png
new file mode 100644
index 00000000..d1f13dab
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_grabbing_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_grabbing_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_grabbing_32.png.meta
new file mode 100644
index 00000000..b0969fef
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_grabbing_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 3dd437376d1973b46a4a8ff8a2a4c953
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_hand_32.png b/Assets/Resources/UIToolkit/Images/cursor_hand_32.png
new file mode 100644
index 00000000..912bac34
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_hand_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_hand_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_hand_32.png.meta
new file mode 100644
index 00000000..8a5038fd
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_hand_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 8b25dfa4462c56b4eaf5f26709b1adfe
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_link_32.png b/Assets/Resources/UIToolkit/Images/cursor_link_32.png
new file mode 100644
index 00000000..f83c0b13
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_link_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_link_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_link_32.png.meta
new file mode 100644
index 00000000..1a816fdc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_link_32.png.meta
@@ -0,0 +1,117 @@
+fileFormatVersion: 2
+guid: 1d3223f28dbb58d49b4d7327cec5bd85
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 0
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_move_32.png b/Assets/Resources/UIToolkit/Images/cursor_move_32.png
new file mode 100644
index 00000000..9b238df8
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_move_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_move_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_move_32.png.meta
new file mode 100644
index 00000000..47584bd0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_move_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 5c1cca3d2ce737c4cad9ea404bf3a600
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_node_32.png b/Assets/Resources/UIToolkit/Images/cursor_node_32.png
new file mode 100644
index 00000000..7e97b198
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_node_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_node_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_node_32.png.meta
new file mode 100644
index 00000000..bd86fcfe
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_node_32.png.meta
@@ -0,0 +1,117 @@
+fileFormatVersion: 2
+guid: 8d2b78493f037da4b991a95f4f940bbc
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_point_white_32.png b/Assets/Resources/UIToolkit/Images/cursor_point_white_32.png
new file mode 100644
index 00000000..61076af5
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_point_white_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_point_white_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_point_white_32.png.meta
new file mode 100644
index 00000000..f9518142
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_point_white_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 8be8521165e23d848bc21fcc6385d131
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_col_32.png b/Assets/Resources/UIToolkit/Images/cursor_resize_col_32.png
new file mode 100644
index 00000000..754c27db
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_resize_col_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_col_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_resize_col_32.png.meta
new file mode 100644
index 00000000..775daf91
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_resize_col_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: ebe187a4dada7d5449d755bc456382e2
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_down_32.png b/Assets/Resources/UIToolkit/Images/cursor_resize_down_32.png
new file mode 100644
index 00000000..6d6aac28
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_resize_down_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_down_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_resize_down_32.png.meta
new file mode 100644
index 00000000..520f2dc7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_resize_down_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: c3d0651e8c68cf24288992307cde7769
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_h_32.png b/Assets/Resources/UIToolkit/Images/cursor_resize_h_32.png
new file mode 100644
index 00000000..761ab41c
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_resize_h_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_h_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_resize_h_32.png.meta
new file mode 100644
index 00000000..e300c71f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_resize_h_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: e73a9f04113c1a24c9aade38fe3af996
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_left_32.png b/Assets/Resources/UIToolkit/Images/cursor_resize_left_32.png
new file mode 100644
index 00000000..cc0430ee
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_resize_left_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_left_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_resize_left_32.png.meta
new file mode 100644
index 00000000..37c3ed55
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_resize_left_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 72b6d995a4ba0ed41ba50ae2e62655e4
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_right_32.png b/Assets/Resources/UIToolkit/Images/cursor_resize_right_32.png
new file mode 100644
index 00000000..a9b7e308
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_resize_right_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_right_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_resize_right_32.png.meta
new file mode 100644
index 00000000..c7cd4fe7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_resize_right_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 74d652fa8451be948916eddbbbd5a647
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_row_32.png b/Assets/Resources/UIToolkit/Images/cursor_resize_row_32.png
new file mode 100644
index 00000000..fb904d36
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_resize_row_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_row_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_resize_row_32.png.meta
new file mode 100644
index 00000000..56e68555
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_resize_row_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 946e7f41bc093c749b414451889b8bd6
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_tlbr_32.png b/Assets/Resources/UIToolkit/Images/cursor_resize_tlbr_32.png
new file mode 100644
index 00000000..cb56f6d9
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_resize_tlbr_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_tlbr_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_resize_tlbr_32.png.meta
new file mode 100644
index 00000000..509dc60c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_resize_tlbr_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 05de99c1f3666614690f5324cb3126b4
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_trbl_32.png b/Assets/Resources/UIToolkit/Images/cursor_resize_trbl_32.png
new file mode 100644
index 00000000..8c7606a2
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_resize_trbl_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_trbl_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_resize_trbl_32.png.meta
new file mode 100644
index 00000000..5beed67f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_resize_trbl_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 29cb0131849e5cf4290ea1d32494bb44
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_up_32.png b/Assets/Resources/UIToolkit/Images/cursor_resize_up_32.png
new file mode 100644
index 00000000..e5fe3c07
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_resize_up_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_up_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_resize_up_32.png.meta
new file mode 100644
index 00000000..b319e6c2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_resize_up_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: fc8e9d48bd33f024faf4c45f8d54810f
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_v_32.png b/Assets/Resources/UIToolkit/Images/cursor_resize_v_32.png
new file mode 100644
index 00000000..76c3345e
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_resize_v_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_resize_v_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_resize_v_32.png.meta
new file mode 100644
index 00000000..e61ccb6f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_resize_v_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 11ecfc4c6a65f3e4f8d9cab86f8eb2a4
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_left_32.png b/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_left_32.png
new file mode 100644
index 00000000..8abca960
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_left_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_left_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_left_32.png.meta
new file mode 100644
index 00000000..1db6d8e8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_left_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 6c573113a9559b24084a52cad526dd74
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_right_32.png b/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_right_32.png
new file mode 100644
index 00000000..7d9ec941
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_right_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_right_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_right_32.png.meta
new file mode 100644
index 00000000..994a4bfa
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_rotate_bottom_right_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 26b8d00b787496b48a93fb9f9696cbba
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_rotate_top_left_32.png b/Assets/Resources/UIToolkit/Images/cursor_rotate_top_left_32.png
new file mode 100644
index 00000000..6d92b2b2
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_rotate_top_left_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_rotate_top_left_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_rotate_top_left_32.png.meta
new file mode 100644
index 00000000..2254b01c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_rotate_top_left_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 952ead70e0bcdc846b3d3680d62d9aee
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_rotate_top_right_32.png b/Assets/Resources/UIToolkit/Images/cursor_rotate_top_right_32.png
new file mode 100644
index 00000000..28c64338
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_rotate_top_right_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_rotate_top_right_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_rotate_top_right_32.png.meta
new file mode 100644
index 00000000..1179febb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_rotate_top_right_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: ce83124e62b6af5478c46f915c939f4e
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_select_32.png b/Assets/Resources/UIToolkit/Images/cursor_select_32.png
new file mode 100644
index 00000000..9e8a1d2b
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_select_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_select_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_select_32.png.meta
new file mode 100644
index 00000000..0647f7be
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_select_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 3910925c0a9c48044990753c0b572bd5
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_wait_32.png b/Assets/Resources/UIToolkit/Images/cursor_wait_32.png
new file mode 100644
index 00000000..7e770f4c
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_wait_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_wait_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_wait_32.png.meta
new file mode 100644
index 00000000..8527756c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_wait_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: a65c886ee4157e841ae5632ddd001e6b
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_zoom_in_32.png b/Assets/Resources/UIToolkit/Images/cursor_zoom_in_32.png
new file mode 100644
index 00000000..edb20a65
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_zoom_in_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_zoom_in_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_zoom_in_32.png.meta
new file mode 100644
index 00000000..098bcab4
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_zoom_in_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 9468b13a1597daf498a37b89f0f3b01e
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/cursor_zoom_out_32.png b/Assets/Resources/UIToolkit/Images/cursor_zoom_out_32.png
new file mode 100644
index 00000000..e2783710
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/cursor_zoom_out_32.png differ
diff --git a/Assets/Resources/UIToolkit/Images/cursor_zoom_out_32.png.meta b/Assets/Resources/UIToolkit/Images/cursor_zoom_out_32.png.meta
new file mode 100644
index 00000000..729a5679
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/cursor_zoom_out_32.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: ebb8aec746a76ea41b01b6b9ea6d3911
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 1
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 0
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 7
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: 4
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/icon_down_20x16.png b/Assets/Resources/UIToolkit/Images/icon_down_20x16.png
new file mode 100644
index 00000000..af3f30c4
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/icon_down_20x16.png differ
diff --git a/Assets/Resources/UIToolkit/Images/icon_down_20x16.png.meta b/Assets/Resources/UIToolkit/Images/icon_down_20x16.png.meta
new file mode 100644
index 00000000..ac1e4f4a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/icon_down_20x16.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 07ba9c8b4566e80489abb0991b24b01d
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/icon_down_22.png b/Assets/Resources/UIToolkit/Images/icon_down_22.png
new file mode 100644
index 00000000..edaa47a7
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/icon_down_22.png differ
diff --git a/Assets/Resources/UIToolkit/Images/icon_down_22.png.meta b/Assets/Resources/UIToolkit/Images/icon_down_22.png.meta
new file mode 100644
index 00000000..d806a855
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/icon_down_22.png.meta
@@ -0,0 +1,117 @@
+fileFormatVersion: 2
+guid: 68290a8f5e2d8bc46ad9e1fb9df69ac6
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/icon_eye_22x16.png b/Assets/Resources/UIToolkit/Images/icon_eye_22x16.png
new file mode 100644
index 00000000..d0b70812
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/icon_eye_22x16.png differ
diff --git a/Assets/Resources/UIToolkit/Images/icon_eye_22x16.png.meta b/Assets/Resources/UIToolkit/Images/icon_eye_22x16.png.meta
new file mode 100644
index 00000000..2a1fe028
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/icon_eye_22x16.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: e6a78b3026893f24abf05bfd5c515bcf
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/icon_eye_close_22x16.png b/Assets/Resources/UIToolkit/Images/icon_eye_close_22x16.png
new file mode 100644
index 00000000..b375f521
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/icon_eye_close_22x16.png differ
diff --git a/Assets/Resources/UIToolkit/Images/icon_eye_close_22x16.png.meta b/Assets/Resources/UIToolkit/Images/icon_eye_close_22x16.png.meta
new file mode 100644
index 00000000..e526d7bb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/icon_eye_close_22x16.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 98d19f50484d3cf458835c97a645b838
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/icon_right_22.png b/Assets/Resources/UIToolkit/Images/icon_right_22.png
new file mode 100644
index 00000000..a4e63465
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/icon_right_22.png differ
diff --git a/Assets/Resources/UIToolkit/Images/icon_right_22.png.meta b/Assets/Resources/UIToolkit/Images/icon_right_22.png.meta
new file mode 100644
index 00000000..8799464a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/icon_right_22.png.meta
@@ -0,0 +1,117 @@
+fileFormatVersion: 2
+guid: 29501629c71a0774f80fd47545b7abe7
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/icon_search_22x16.png b/Assets/Resources/UIToolkit/Images/icon_search_22x16.png
new file mode 100644
index 00000000..73ae4573
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/icon_search_22x16.png differ
diff --git a/Assets/Resources/UIToolkit/Images/icon_search_22x16.png.meta b/Assets/Resources/UIToolkit/Images/icon_search_22x16.png.meta
new file mode 100644
index 00000000..d383d207
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/icon_search_22x16.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 42ee2462b3dbdc34c8c3aab7aae8c998
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Images/icon_setting_22.png b/Assets/Resources/UIToolkit/Images/icon_setting_22.png
new file mode 100644
index 00000000..d6b8d627
Binary files /dev/null and b/Assets/Resources/UIToolkit/Images/icon_setting_22.png differ
diff --git a/Assets/Resources/UIToolkit/Images/icon_setting_22.png.meta b/Assets/Resources/UIToolkit/Images/icon_setting_22.png.meta
new file mode 100644
index 00000000..398d8e4a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Images/icon_setting_22.png.meta
@@ -0,0 +1,143 @@
+fileFormatVersion: 2
+guid: 44dedbf997719db41a2ef719b0b7282f
+TextureImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 13
+ mipmaps:
+ mipMapMode: 0
+ enableMipMap: 0
+ sRGBTexture: 1
+ linearTexture: 0
+ fadeOut: 0
+ borderMipMap: 0
+ mipMapsPreserveCoverage: 0
+ alphaTestReferenceValue: 0.5
+ mipMapFadeDistanceStart: 1
+ mipMapFadeDistanceEnd: 3
+ bumpmap:
+ convertToNormalMap: 0
+ externalNormalMap: 0
+ heightScale: 0.25
+ normalMapFilter: 0
+ flipGreenChannel: 0
+ isReadable: 0
+ streamingMipmaps: 0
+ streamingMipmapsPriority: 0
+ vTOnly: 0
+ ignoreMipmapLimit: 0
+ grayScaleToAlpha: 0
+ generateCubemap: 6
+ cubemapConvolution: 0
+ seamlessCubemap: 0
+ textureFormat: 1
+ maxTextureSize: 2048
+ textureSettings:
+ serializedVersion: 2
+ filterMode: 1
+ aniso: 1
+ mipBias: 0
+ wrapU: 1
+ wrapV: 1
+ wrapW: 0
+ nPOTScale: 0
+ lightmap: 0
+ compressionQuality: 50
+ spriteMode: 1
+ spriteExtrude: 1
+ spriteMeshType: 1
+ alignment: 0
+ spritePivot: {x: 0.5, y: 0.5}
+ spritePixelsToUnits: 100
+ spriteBorder: {x: 0, y: 0, z: 0, w: 0}
+ spriteGenerateFallbackPhysicsShape: 1
+ alphaUsage: 1
+ alphaIsTransparency: 1
+ spriteTessellationDetail: -1
+ textureType: 8
+ textureShape: 1
+ singleChannelComponent: 0
+ flipbookRows: 1
+ flipbookColumns: 1
+ maxTextureSizeSet: 0
+ compressionQualitySet: 0
+ textureFormatSet: 0
+ ignorePngGamma: 0
+ applyGammaDecoding: 0
+ swizzle: 50462976
+ cookieLightType: 0
+ platformSettings:
+ - serializedVersion: 4
+ buildTarget: DefaultTexturePlatform
+ maxTextureSize: 32
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: Standalone
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WebGL
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ - serializedVersion: 4
+ buildTarget: WindowsStoreApps
+ maxTextureSize: 2048
+ resizeAlgorithm: 0
+ textureFormat: -1
+ textureCompression: 1
+ compressionQuality: 50
+ crunchedCompression: 0
+ allowsAlphaSplitting: 0
+ overridden: 0
+ ignorePlatformSupport: 0
+ androidETC2FallbackOverride: 0
+ forceMaximumCompressionQuality_BC6H_BC7: 0
+ spriteSheet:
+ serializedVersion: 2
+ sprites: []
+ outline: []
+ customData:
+ physicsShape: []
+ bones: []
+ spriteID: 5e97eb03825dee720800000000000000
+ internalID: 0
+ vertices: []
+ indices:
+ edges: []
+ weights: []
+ secondaryTextures: []
+ spriteCustomMetadata:
+ entries: []
+ nameFileIdTable: {}
+ mipmapLimitGroupName:
+ pSDRemoveMatte: 0
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Input.meta b/Assets/Resources/UIToolkit/Input.meta
new file mode 100644
index 00000000..7c7c10a7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e2678ea1ea23c6e41a4d300953917924
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Input/UTKBoundsField.uss b/Assets/Resources/UIToolkit/Input/UTKBoundsField.uss
new file mode 100644
index 00000000..b471bdc4
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKBoundsField.uss
@@ -0,0 +1,156 @@
+/*
+ * ===================================
+ * UTKBoundsField.uss
+ * Unity BoundsField 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-boundsfield {
+ flex-direction: row;
+ align-items: flex-start;
+ flex-wrap: wrap;
+ height: auto;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-boundsfield > .unity-label {
+ min-width: 80px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Input Container
+ =================================== */
+
+.utk-boundsfield > .unity-base-field__input {
+ flex-direction: column;
+ flex-grow: 1;
+}
+
+/* ===================================
+ Vector3 Fields (Center, Extents rows)
+ =================================== */
+
+.utk-boundsfield .unity-composite-field__field-spacer {
+ flex-grow: 0;
+}
+
+.utk-boundsfield .unity-vector3-field {
+ margin-bottom: var(--space-xs);
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-boundsfield .unity-vector3-field:last-child {
+ margin-bottom: 0;
+} */
+
+.utk-boundsfield .unity-vector3-field > .unity-label {
+ min-width: 50px;
+ margin-right: var(--space-s);
+ padding-top: 3px;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ -unity-text-align: upper-left;
+}
+
+/* ===================================
+ Individual Float Fields
+ =================================== */
+
+.utk-boundsfield .unity-float-field {
+ flex-grow: 1;
+ margin-right: var(--space-xs);
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-boundsfield .unity-float-field:last-child {
+ margin-right: 0;
+} */
+
+.utk-boundsfield .unity-float-field > .unity-label {
+ min-width: 14px;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+}
+
+.utk-boundsfield .unity-float-field > .unity-base-text-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-xs) var(--space-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+}
+
+.utk-boundsfield .unity-float-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-btn-primary);
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-boundsfield--error .unity-float-field > .unity-base-text-field__input {
+ border-color: var(--color-border-error);
+}
+
+.utk-boundsfield--error > .unity-label {
+ color: var(--color-state-error);
+}
+
+/* Error Message Label */
+.utk-boundsfield__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-boundsfield--disabled {
+ cursor: arrow;
+}
+
+.utk-boundsfield--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
+
+.utk-boundsfield--disabled .unity-float-field > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-boundsfield--disabled .unity-float-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ Read Only
+ =================================== */
+
+.utk-boundsfield--readonly > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+}
+
diff --git a/Assets/Resources/UIToolkit/Input/UTKBoundsField.uss.meta b/Assets/Resources/UIToolkit/Input/UTKBoundsField.uss.meta
new file mode 100644
index 00000000..3ecf6737
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKBoundsField.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: fb9218d9b4dadb746acba91bd552dd78
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKDoubleField.uss b/Assets/Resources/UIToolkit/Input/UTKDoubleField.uss
new file mode 100644
index 00000000..ef1b744a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKDoubleField.uss
@@ -0,0 +1,110 @@
+/*
+ * ===================================
+ * UTKDoubleField.uss
+ * Unity DoubleField 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-double-field {
+ flex-direction: row;
+ align-items: center;
+ flex-wrap: wrap;
+ height: auto;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-double-field > .unity-label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Input
+ =================================== */
+
+.utk-double-field > .unity-base-text-field__input {
+ flex-grow: 1;
+ height: var(--size-input-height);
+ min-width: 60px;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-double-field > .unity-base-text-field__input:hover {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-double-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-double-field--error > .unity-base-text-field__input {
+ border-color: var(--color-border-error);
+}
+
+.utk-double-field--error > .unity-label {
+ color: var(--color-state-error);
+}
+
+/* Error Message Label */
+.utk-double-field__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ padding-left: 68px;
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-double-field--disabled {
+ cursor: arrow;
+}
+
+.utk-double-field--disabled > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-double-field--disabled > .unity-base-text-field__input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-double-field--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
+
+/* ===================================
+ Read Only
+ =================================== */
+
+.utk-double-field--readonly > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Input/UTKDoubleField.uss.meta b/Assets/Resources/UIToolkit/Input/UTKDoubleField.uss.meta
new file mode 100644
index 00000000..154e4e0d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKDoubleField.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 98f69e608a93d484c98ba1b75fe4a1a6
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKFloatField.uss b/Assets/Resources/UIToolkit/Input/UTKFloatField.uss
new file mode 100644
index 00000000..6176e2ac
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKFloatField.uss
@@ -0,0 +1,112 @@
+/*
+ * ===================================
+ * UTKFloatField.uss
+ * Unity FloatField 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-float-field {
+ flex-direction: row;
+ align-items: center;
+ flex-wrap: wrap;
+ height: auto;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-float-field > .unity-label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Input
+ =================================== */
+
+.utk-float-field > .unity-base-text-field__input {
+ flex-grow: 1;
+ height: var(--size-input-height);
+ min-width: 60px;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-float-field > .unity-base-text-field__input:hover {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-float-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-float-field--error > .unity-base-text-field__input {
+ border-color: var(--color-border-error);
+}
+
+.utk-float-field--error > .unity-label {
+ color: var(--color-state-error);
+}
+
+/* Error Message Label */
+.utk-float-field__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ padding-left: 68px;
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-float-field--disabled {
+ cursor: arrow;
+}
+
+.utk-float-field--disabled > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-float-field--disabled > .unity-base-text-field__input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-float-field--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
+
+
+/* ===================================
+ Read Only
+ =================================== */
+
+.utk-float-field--readonly > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+}
+
diff --git a/Assets/Resources/UIToolkit/Input/UTKFloatField.uss.meta b/Assets/Resources/UIToolkit/Input/UTKFloatField.uss.meta
new file mode 100644
index 00000000..c7f73cf0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKFloatField.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d8137ecc1856dfe48a66a72b186845b2
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKFloatStepper.uss b/Assets/Resources/UIToolkit/Input/UTKFloatStepper.uss
new file mode 100644
index 00000000..243c0485
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKFloatStepper.uss
@@ -0,0 +1,184 @@
+/*
+ * ===================================
+ * UTKFloatStepper.uss
+ * Float Stepper Component Styles
+ * ===================================
+ */
+
+/* ===================================
+ Root Container
+ =================================== */
+
+.utk-number-stepper {
+ flex-direction: row;
+ align-items: stretch;
+ flex-wrap: wrap;
+ height: auto;
+ min-height: var(--size-input-height);
+}
+
+
+/* ===================================
+ Text Input Field
+ =================================== */
+
+.utk-number-stepper__input {
+ flex-grow: 1;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: var(--font-size-body2);
+}
+
+.utk-number-stepper__text-input {
+ flex-grow: 1;
+ background-color: var(--color-bg-input);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+ border-top-left-radius: var(--radius-s);
+ border-bottom-left-radius: var(--radius-s);
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-top-width: var(--border-width);
+ border-bottom-width: var(--border-width);
+ border-left-width: var(--border-width);
+ border-right-width: 0;
+ border-top-color: var(--color-border);
+ border-bottom-color: var(--color-border);
+ border-left-color: var(--color-border);
+ padding-top: 0;
+ padding-bottom: 0;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ margin: 0;
+ -unity-text-align: middle-right;
+}
+
+
+/* ===================================
+ Button Container
+ =================================== */
+
+.utk-number-stepper__buttons {
+ flex-direction: column;
+ width: 16px;
+}
+
+
+/* ===================================
+ Stepper Buttons (Base)
+ =================================== */
+
+.utk-number-stepper__btn {
+ flex-grow: 1;
+ width: 16px;
+ font-size: 6px;
+ padding: 0;
+ margin: 0;
+ background-color: var(--color-btn-normal);
+ color: var(--color-text-secondary);
+ border-top-width: var(--border-width);
+ border-left-width: 0;
+ border-right-width: var(--border-width);
+ border-top-color: var(--color-border);
+ border-right-color: var(--color-border);
+ border-bottom-color: var(--color-border);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color, color;
+ height: 12px;
+}
+
+.utk-number-stepper__btn:hover {
+ background-color: var(--color-btn-hover);
+ color: var(--color-text-primary);
+}
+
+.utk-number-stepper__btn:active {
+ background-color: var(--color-btn-pressed);
+}
+
+
+/* ===================================
+ Up Button
+ =================================== */
+
+.utk-number-stepper__btn--up {
+ border-bottom-width: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: var(--radius-s);
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+
+/* ===================================
+ Down Button
+ =================================== */
+
+.utk-number-stepper__btn--down {
+ border-bottom-width: var(--border-width);
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: var(--radius-s);
+}
+
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-number-stepper--disabled {
+ cursor: arrow;
+}
+
+.utk-number-stepper--disabled .utk-number-stepper__text-input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-number-stepper--disabled .utk-number-stepper__text-input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-number-stepper--disabled .utk-number-stepper__btn {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-number-stepper--disabled .utk-number-stepper__btn:hover {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+}
+
+.utk-number-stepper--disabled .utk-number-stepper__btn:active {
+ background-color: var(--color-btn-disabled);
+}
+
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-number-stepper--error .utk-number-stepper__text-input {
+ border-top-color: var(--color-border-error);
+ border-bottom-color: var(--color-border-error);
+ border-left-color: var(--color-border-error);
+}
+
+.utk-number-stepper--error .utk-number-stepper__btn {
+ border-top-color: var(--color-border-error);
+ border-right-color: var(--color-border-error);
+ border-bottom-color: var(--color-border-error);
+}
+
+/* Error Message Label */
+.utk-number-stepper__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
diff --git a/Assets/Resources/UIToolkit/Input/UTKFloatStepper.uss.meta b/Assets/Resources/UIToolkit/Input/UTKFloatStepper.uss.meta
new file mode 100644
index 00000000..f570f199
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKFloatStepper.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 53011be3e472c5d46a86079c477e8848
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKInputField.uss b/Assets/Resources/UIToolkit/Input/UTKInputField.uss
new file mode 100644
index 00000000..1800f2d8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKInputField.uss
@@ -0,0 +1,169 @@
+/*
+ * ===================================
+ * UTKInputField.uss
+ * Unity TextField 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-input {
+ flex-direction: row;
+ align-items: center;
+ flex-wrap: wrap;
+ height: auto;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-input > .unity-label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Text Input
+ =================================== */
+
+.utk-input > .unity-base-text-field__input {
+ flex-grow: 1;
+ height: var(--size-input-height);
+ min-width: 60px;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-input > .unity-base-text-field__input:hover {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-input > .unity-base-text-field__input:focus {
+ border-color: var(--color-border-focus);
+}
+
+/* Hide all inner TextField borders */
+.utk-input .unity-text-input {
+ border-width: 0;
+ background-color: transparent;
+ padding: 0;
+ margin: 0;
+}
+
+/* ===================================
+ Placeholder
+ =================================== */
+
+.utk-input .unity-text-element--placeholder {
+ color: var(--color-text-secondary);
+}
+
+/* ===================================
+ Multiline
+ =================================== */
+
+.utk-input--multiline > .unity-base-text-field__input {
+ height: auto;
+ min-height: 24px;
+ padding-top: var(--space-s);
+ padding-bottom: var(--space-s);
+ white-space: normal;
+ align-items: flex-start;
+}
+
+/* Note: min-width: 60px (label), min-width: 120px (input), min-height: 24px (multiline)
+ are intentionally kept as fixed values for layout consistency */
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-input--error > .unity-base-text-field__input {
+ border-color: var(--color-border-error);
+}
+
+.utk-input--error > .unity-label {
+ color: var(--color-state-error);
+}
+
+/* Error Message Label */
+.utk-input__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ padding-left: 68px;
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
+
+/* ===================================
+ Variants
+ =================================== */
+
+/* Default */
+.utk-input--default > .unity-base-text-field__input {
+ background-color: var(--color-bg-input);
+}
+
+/* Filled */
+.utk-input--filled > .unity-base-text-field__input {
+ background-color: var(--color-btn-normal);
+ border-width: 0;
+ border-bottom-width: var(--border-width-thick);
+ border-radius: var(--radius-s) var(--radius-s) 0 0;
+}
+
+.utk-input--filled.utk-input--focused > .unity-base-text-field__input {
+ border-bottom-color: var(--color-border-focus);
+}
+
+/* Outlined */
+.utk-input--outlined > .unity-base-text-field__input {
+ background-color: transparent;
+ border-width: var(--border-width-thick);
+}
+
+/* ===================================
+ Read Only
+ =================================== */
+
+.utk-input--readonly > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-input--disabled {
+ cursor: arrow;
+}
+
+.utk-input--disabled > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-input--disabled > .unity-base-text-field__input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-input--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Input/UTKInputField.uss.meta b/Assets/Resources/UIToolkit/Input/UTKInputField.uss.meta
new file mode 100644
index 00000000..0c3d2ec3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKInputField.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a075fdf47d701b6489cea68e97eb9ccf
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKIntStepper.uss b/Assets/Resources/UIToolkit/Input/UTKIntStepper.uss
new file mode 100644
index 00000000..9f370b63
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKIntStepper.uss
@@ -0,0 +1,183 @@
+/*
+ * ===================================
+ * UTKIntStepper.uss
+ * Number Stepper Component Styles
+ * ===================================
+ */
+
+/* ===================================
+ Root Container
+ =================================== */
+
+.utk-number-stepper {
+ flex-direction: row;
+ align-items: stretch;
+ flex-wrap: wrap;
+ height: auto;
+ min-height: var(--size-input-height);
+}
+
+
+/* ===================================
+ Text Input Field
+ =================================== */
+
+.utk-number-stepper__input {
+ flex-grow: 1;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ font-size: var(--font-size-body2);
+}
+
+.utk-number-stepper__text-input {
+ flex-grow: 1;
+ background-color: var(--color-bg-input);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+ border-top-left-radius: var(--radius-s);
+ border-bottom-left-radius: var(--radius-s);
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+ border-top-width: var(--border-width);
+ border-bottom-width: var(--border-width);
+ border-left-width: var(--border-width);
+ border-right-width: 0;
+ border-top-color: var(--color-border);
+ border-bottom-color: var(--color-border);
+ border-left-color: var(--color-border);
+ padding-top: 0;
+ padding-bottom: 0;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ margin: 0;
+ -unity-text-align: middle-right;
+}
+
+
+/* ===================================
+ Button Container
+ =================================== */
+
+.utk-number-stepper__buttons {
+ flex-direction: column;
+ width: 16px;
+}
+
+
+/* ===================================
+ Stepper Buttons (Base)
+ =================================== */
+
+.utk-number-stepper__btn {
+ flex-grow: 1;
+ width: 16px;
+ font-size: 6px;
+ padding: 0;
+ margin: 0;
+ background-color: var(--color-btn-normal);
+ color: var(--color-text-secondary);
+ border-top-width: var(--border-width);
+ border-left-width: 0;
+ border-right-width: var(--border-width);
+ border-top-color: var(--color-border);
+ border-right-color: var(--color-border);
+ border-bottom-color: var(--color-border);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color, color;
+ height: 12px;
+}
+
+.utk-number-stepper__btn:hover {
+ background-color: var(--color-btn-hover);
+ color: var(--color-text-primary);
+}
+
+.utk-number-stepper__btn:active {
+ background-color: var(--color-btn-pressed);
+}
+
+
+/* ===================================
+ Up Button
+ =================================== */
+
+.utk-number-stepper__btn--up {
+ border-bottom-width: 0;
+ border-top-left-radius: 0;
+ border-top-right-radius: var(--radius-s);
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+
+/* ===================================
+ Down Button
+ =================================== */
+
+.utk-number-stepper__btn--down {
+ border-bottom-width: var(--border-width);
+ border-top-left-radius: 0;
+ border-top-right-radius: 0;
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: var(--radius-s);
+}
+
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-number-stepper--disabled {
+ cursor: arrow;
+}
+
+.utk-number-stepper--disabled .utk-number-stepper__text-input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-number-stepper--disabled .utk-number-stepper__text-input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-number-stepper--disabled .utk-number-stepper__btn {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-number-stepper--disabled .utk-number-stepper__btn:hover {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+}
+
+.utk-number-stepper--disabled .utk-number-stepper__btn:active {
+ background-color: var(--color-btn-disabled);
+}
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-number-stepper--error .utk-number-stepper__text-input {
+ border-top-color: var(--color-border-error);
+ border-bottom-color: var(--color-border-error);
+ border-left-color: var(--color-border-error);
+}
+
+.utk-number-stepper--error .utk-number-stepper__btn {
+ border-top-color: var(--color-border-error);
+ border-right-color: var(--color-border-error);
+ border-bottom-color: var(--color-border-error);
+}
+
+/* Error Message Label */
+.utk-number-stepper__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
diff --git a/Assets/Resources/UIToolkit/Input/UTKIntStepper.uss.meta b/Assets/Resources/UIToolkit/Input/UTKIntStepper.uss.meta
new file mode 100644
index 00000000..ebd3b7de
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKIntStepper.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 224543ff0f5af4b48b6c73948d95c4a0
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKIntegerField.uss b/Assets/Resources/UIToolkit/Input/UTKIntegerField.uss
new file mode 100644
index 00000000..b9d89808
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKIntegerField.uss
@@ -0,0 +1,111 @@
+/*
+ * ===================================
+ * UTKIntegerField.uss
+ * Unity IntegerField 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-integer-field {
+ flex-direction: row;
+ align-items: center;
+ flex-wrap: wrap;
+ height: auto;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-integer-field > .unity-label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Input
+ =================================== */
+
+.utk-integer-field > .unity-base-text-field__input {
+ flex-grow: 1;
+ height: var(--size-input-height);
+ min-width: 60px;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-integer-field > .unity-base-text-field__input:hover {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-integer-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-integer-field--error > .unity-base-text-field__input {
+ border-color: var(--color-border-error);
+}
+
+.utk-integer-field--error > .unity-label {
+ color: var(--color-state-error);
+}
+
+/* Error Message Label */
+.utk-integer-field__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ padding-left: 68px;
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-integer-field--disabled {
+ cursor: arrow;
+}
+
+.utk-integer-field--disabled > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-integer-field--disabled > .unity-base-text-field__input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-integer-field--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
+
+
+/* ===================================
+ Read Only
+ =================================== */
+
+.utk-integer-field--readonly > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+}
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Input/UTKIntegerField.uss.meta b/Assets/Resources/UIToolkit/Input/UTKIntegerField.uss.meta
new file mode 100644
index 00000000..4de7d8f7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKIntegerField.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b105d56f950b4b948aee9d86d8c1b85f
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKLongField.uss b/Assets/Resources/UIToolkit/Input/UTKLongField.uss
new file mode 100644
index 00000000..45b24722
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKLongField.uss
@@ -0,0 +1,110 @@
+/*
+ * ===================================
+ * UTKLongField.uss
+ * Unity LongField 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-long-field {
+ flex-direction: row;
+ align-items: center;
+ flex-wrap: wrap;
+ height: auto;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-long-field > .unity-label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Input
+ =================================== */
+
+.utk-long-field > .unity-base-text-field__input {
+ flex-grow: 1;
+ height: var(--size-input-height);
+ min-width: 60px;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-long-field > .unity-base-text-field__input:hover {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-long-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-long-field--error > .unity-base-text-field__input {
+ border-color: var(--color-border-error);
+}
+
+.utk-long-field--error > .unity-label {
+ color: var(--color-state-error);
+}
+
+/* Error Message Label */
+.utk-long-field__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ padding-left: 68px;
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-long-field--disabled {
+ cursor: arrow;
+}
+
+.utk-long-field--disabled > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-long-field--disabled > .unity-base-text-field__input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-long-field--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
+
+
+/* ===================================
+ Read Only
+ =================================== */
+
+.utk-long-field--readonly > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+}
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Input/UTKLongField.uss.meta b/Assets/Resources/UIToolkit/Input/UTKLongField.uss.meta
new file mode 100644
index 00000000..79172baa
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKLongField.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bbb1eac6b6df9034996b14ec5c47bfed
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKRectField.uss b/Assets/Resources/UIToolkit/Input/UTKRectField.uss
new file mode 100644
index 00000000..e801b86a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKRectField.uss
@@ -0,0 +1,147 @@
+/*
+ * ===================================
+ * UTKRectField.uss
+ * Unity RectField 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-rectfield {
+ flex-direction: row;
+ align-items: flex-start;
+ flex-wrap: wrap;
+ height: auto;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-rectfield > .unity-label {
+ min-width: 80px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Input Container
+ =================================== */
+
+.utk-rectfield > .unity-base-field__input {
+ flex-direction: column;
+ flex-grow: 1;
+}
+
+/* ===================================
+ Vector2 Fields (X/Y, W/H rows)
+ =================================== */
+
+.utk-rectfield .unity-composite-field__field-spacer {
+ flex-grow: 0;
+}
+
+.utk-rectfield .unity-vector2-field {
+ margin-bottom: var(--space-xs);
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-rectfield .unity-vector2-field:last-child {
+ margin-bottom: 0;
+} */
+
+/* ===================================
+ Individual Float Fields
+ =================================== */
+
+.utk-rectfield .unity-float-field {
+ flex-grow: 1;
+ margin-right: var(--space-xs);
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-rectfield .unity-float-field:last-child {
+ margin-right: 0;
+} */
+
+.utk-rectfield .unity-float-field > .unity-label {
+ min-width: 14px;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+}
+
+.utk-rectfield .unity-float-field > .unity-base-text-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-xs) var(--space-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+}
+
+.utk-rectfield .unity-float-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-btn-primary);
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-rectfield--error .unity-float-field > .unity-base-text-field__input {
+ border-color: var(--color-border-error);
+}
+
+.utk-rectfield--error > .unity-label {
+ color: var(--color-state-error);
+}
+
+/* Error Message Label */
+.utk-rectfield__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-rectfield--disabled {
+ cursor: arrow;
+}
+
+.utk-rectfield--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
+
+.utk-rectfield--disabled .unity-float-field > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-rectfield--disabled .unity-float-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-border);
+}
+
+
+/* ===================================
+ Read Only
+ =================================== */
+
+.utk-rectfield--readonly > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Input/UTKRectField.uss.meta b/Assets/Resources/UIToolkit/Input/UTKRectField.uss.meta
new file mode 100644
index 00000000..288a32ea
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKRectField.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 09f901972d800d74f869b052c2d61386
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKVector2Field.uss b/Assets/Resources/UIToolkit/Input/UTKVector2Field.uss
new file mode 100644
index 00000000..e992adb0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKVector2Field.uss
@@ -0,0 +1,153 @@
+/*
+ * ===================================
+ * UTKVector2Field.uss
+ * Unity Vector2Field 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-vector2-field {
+ flex-direction: row;
+ align-items: center;
+ flex-wrap: wrap;
+ height: auto;
+ margin-right: 0;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-vector2-field > .unity-label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Input Container
+ =================================== */
+
+.utk-vector2-field > .unity-composite-field__input {
+ flex-grow: 1;
+ flex-direction: row;
+}
+
+/* ===================================
+ Field Spacer (X, Y labels)
+ =================================== */
+
+.utk-vector2-field .unity-composite-field__field-spacer {
+ flex-grow: 0;
+}
+
+/* ===================================
+ Individual Fields
+ =================================== */
+
+.utk-vector2-field .unity-float-field {
+ flex-grow: 1;
+ margin-right: var(--space-s);
+}
+
+.utk-vector2-field #unity-y-input {
+ margin-right: 0;
+}
+
+.utk-vector2-field #unity-y-input #unity-text-input {
+ padding-right: 0;
+}
+
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-vector2-field .unity-float-field:last-child {
+ margin-right: 0;
+} */
+
+.utk-vector2-field .unity-float-field > .unity-label {
+ min-width: 12px;
+ margin-right: var(--space-xs);
+ font-size: var(--font-size-label3);
+ color: var(--color-text-secondary);
+}
+
+.utk-vector2-field .unity-float-field > .unity-base-text-field__input {
+ height: var(--size-input-height);
+ min-width: 40px;
+ padding-left: var(--space-s);
+ padding-right: var(--space-s);
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-vector2-field .unity-float-field > .unity-base-text-field__input:hover {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-vector2-field .unity-float-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-vector2-field--error .unity-float-field > .unity-base-text-field__input {
+ border-color: var(--color-border-error);
+}
+
+.utk-vector2-field--error > .unity-label {
+ color: var(--color-state-error);
+}
+
+/* Error Message Label */
+.utk-vector2-field__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-vector2-field--disabled {
+ cursor: arrow;
+}
+
+.utk-vector2-field--disabled .unity-float-field > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-vector2-field--disabled .unity-float-field > .unity-base-text-field__input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-vector2-field--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
+
+
+/* ===================================
+ Read Only
+ =================================== */
+
+.utk-vector2-field--readonly > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Input/UTKVector2Field.uss.meta b/Assets/Resources/UIToolkit/Input/UTKVector2Field.uss.meta
new file mode 100644
index 00000000..226d621a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKVector2Field.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0880ec227c210aa40872b9d849ac2fcd
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKVector3Field.uss b/Assets/Resources/UIToolkit/Input/UTKVector3Field.uss
new file mode 100644
index 00000000..83ad05c7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKVector3Field.uss
@@ -0,0 +1,148 @@
+/*
+ * ===================================
+ * UTKVector3Field.uss
+ * Unity Vector3Field 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-vector3-field {
+ flex-direction: row;
+ align-items: center;
+ flex-wrap: wrap;
+ height: auto;
+ margin-right: 0;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-vector3-field > .unity-label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Input Container
+ =================================== */
+
+.utk-vector3-field > .unity-composite-field__input {
+ flex-grow: 1;
+ flex-direction: row;
+}
+
+/* ===================================
+ Field Spacer (X, Y, Z labels)
+ =================================== */
+
+.utk-vector3-field .unity-composite-field__field-spacer {
+ flex-grow: 0;
+}
+
+/* ===================================
+ Individual Fields
+ =================================== */
+
+.utk-vector3-field .unity-float-field {
+ flex-grow: 1;
+ margin-right: var(--space-s);
+}
+
+.utk-vector3-field #unity-z-input {
+ margin-right: 0;
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-vector3-field .unity-float-field:last-child {
+ margin-right: 0;
+} */
+
+.utk-vector3-field .unity-float-field > .unity-label {
+ min-width: 12px;
+ margin-right: var(--space-xs);
+ font-size: var(--font-size-label3);
+ color: var(--color-text-secondary);
+}
+
+.utk-vector3-field .unity-float-field > .unity-base-text-field__input {
+ height: var(--size-input-height);
+ min-width: 40px;
+ padding-left: var(--space-s);
+ padding-right: var(--space-s);
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-vector3-field .unity-float-field > .unity-base-text-field__input:hover {
+ border-color: var(--color-btn-primary);
+}
+
+.utk-vector3-field .unity-float-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-vector3-field--error .unity-float-field > .unity-base-text-field__input {
+ border-color: var(--color-border-error);
+}
+
+.utk-vector3-field--error > .unity-label {
+ color: var(--color-state-error);
+}
+
+/* Error Message Label */
+.utk-vector3-field__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-vector3-field--disabled {
+ cursor: arrow;
+}
+
+.utk-vector3-field--disabled .unity-float-field > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-vector3-field--disabled .unity-float-field > .unity-base-text-field__input:hover {
+ border-color: var(--color-border);
+}
+
+.utk-vector3-field--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
+
+
+/* ===================================
+ Read Only
+ =================================== */
+
+.utk-vector3-field--readonly > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Input/UTKVector3Field.uss.meta b/Assets/Resources/UIToolkit/Input/UTKVector3Field.uss.meta
new file mode 100644
index 00000000..68b8835e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKVector3Field.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6771e66d29af64c47948f5ae956025da
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Input/UTKVector4Field.uss b/Assets/Resources/UIToolkit/Input/UTKVector4Field.uss
new file mode 100644
index 00000000..4d7e9209
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKVector4Field.uss
@@ -0,0 +1,134 @@
+/*
+ * ===================================
+ * UTKVector4Field.uss
+ * Unity Vector4Field 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-vector4field {
+ flex-direction: row;
+ align-items: center;
+ flex-wrap: wrap;
+ height: auto;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-vector4field > .unity-label {
+ min-width: 80px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Input Container
+ =================================== */
+
+.utk-vector4field > .unity-base-field__input {
+ flex-direction: row;
+ flex-grow: 1;
+}
+
+/* ===================================
+ Individual Float Fields
+ =================================== */
+
+.utk-vector4field .unity-float-field {
+ flex-grow: 1;
+ margin-right: var(--space-xs);
+}
+
+.utk-vector4field #unity-w-input {
+ margin-right: 0;
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-vector4field .unity-float-field:last-child {
+ margin-right: 0;
+} */
+
+.utk-vector4field .unity-float-field > .unity-label {
+ min-width: 14px;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+}
+
+.utk-vector4field .unity-float-field > .unity-base-text-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-xs) var(--space-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ --unity-cursor-color: var(--color-text-primary);
+}
+
+.utk-vector4field .unity-float-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-btn-primary);
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+/* ===================================
+ Error State
+ =================================== */
+
+.utk-vector4field--error .unity-float-field > .unity-base-text-field__input {
+ border-color: var(--color-border-error);
+}
+
+.utk-vector4field--error > .unity-label {
+ color: var(--color-state-error);
+}
+
+/* Error Message Label */
+.utk-vector4field__error-message {
+ width: 100%;
+ margin-top: var(--space-xs);
+ font-size: var(--font-size-caption);
+ color: var(--color-state-error);
+ white-space: normal;
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-vector4field--disabled {
+ cursor: arrow;
+}
+
+.utk-vector4field--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
+
+.utk-vector4field--disabled .unity-float-field > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-vector4field--disabled .unity-float-field > .unity-base-text-field__input:focus {
+ border-color: var(--color-border);
+}
+
+
+/* ===================================
+ Read Only
+ =================================== */
+
+.utk-vector4field--readonly > .unity-base-text-field__input {
+ background-color: var(--color-btn-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Input/UTKVector4Field.uss.meta b/Assets/Resources/UIToolkit/Input/UTKVector4Field.uss.meta
new file mode 100644
index 00000000..3c2c73c3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Input/UTKVector4Field.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ad2e424eb06c9bf48b0bbd625b13141b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Label.meta b/Assets/Resources/UIToolkit/Label.meta
new file mode 100644
index 00000000..e71f5985
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Label.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3d58a6cd086613c4abcaa122afdbea56
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Label/UTKLabel.uss b/Assets/Resources/UIToolkit/Label/UTKLabel.uss
new file mode 100644
index 00000000..93944ab7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Label/UTKLabel.uss
@@ -0,0 +1,220 @@
+/*
+ * ===================================
+ * UTKLabel.uss
+ * 텍스트 라벨 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-label {
+ flex-direction: row;
+}
+
+.utk-label__text {
+ margin: 0;
+ padding: 0;
+}
+
+/* ===================================
+ Size Variants
+ =================================== */
+
+.utk-label--h1 .utk-label__text {
+ font-size: var(--font-size-h1);
+ -unity-font-style: bold;
+}
+
+.utk-label--h2 .utk-label__text {
+ font-size: var(--font-size-h2);
+ -unity-font-style: bold;
+}
+
+.utk-label--h3 .utk-label__text {
+ font-size: var(--font-size-h3);
+ -unity-font-style: bold;
+}
+
+.utk-label--body1 .utk-label__text {
+ font-size: var(--font-size-body1);
+}
+
+.utk-label--body2 .utk-label__text {
+ font-size: var(--font-size-body2);
+}
+
+.utk-label--label1 .utk-label__text {
+ font-size: var(--font-size-label1);
+}
+
+.utk-label--label2 .utk-label__text {
+ font-size: var(--font-size-label2);
+}
+
+.utk-label--label3 .utk-label__text {
+ font-size: var(--font-size-label3);
+}
+
+.utk-label--caption .utk-label__text {
+ font-size: var(--font-size-label4);
+}
+
+/* ===================================
+ Color Variants
+ =================================== */
+
+.utk-label--primary .utk-label__text {
+ color: var(--color-text-primary);
+}
+
+.utk-label--secondary .utk-label__text {
+ color: var(--color-text-secondary);
+}
+
+.utk-label--disabled .utk-label__text {
+ color: var(--color-text-disabled);
+}
+
+.utk-label--success .utk-label__text {
+ color: var(--color-state-success);
+}
+
+.utk-label--warning .utk-label__text {
+ color: var(--color-state-warning);
+}
+
+.utk-label--error .utk-label__text {
+ color: var(--color-state-error);
+}
+
+.utk-label--info .utk-label__text {
+ color: var(--color-state-info);
+}
+
+/* ===================================
+ Font Style
+ =================================== */
+
+.utk-label--bold .utk-label__text {
+ -unity-font-style: bold;
+}
+
+.utk-label--italic .utk-label__text {
+ -unity-font-style: italic;
+}
+
+.utk-label--bold.utk-label--italic .utk-label__text {
+ -unity-font-style: bold-and-italic;
+}
+
+/* ===================================
+ Text Alignment
+ =================================== */
+
+.utk-label--left {
+ justify-content: flex-start;
+}
+
+.utk-label--left .utk-label__text {
+ -unity-text-align: middle-left;
+}
+
+.utk-label--center {
+ justify-content: center;
+}
+
+.utk-label--center .utk-label__text {
+ -unity-text-align: middle-center;
+}
+
+.utk-label--right {
+ justify-content: flex-end;
+}
+
+.utk-label--right .utk-label__text {
+ -unity-text-align: middle-right;
+}
+
+/* ===================================
+ Icon Styles
+ =================================== */
+
+.utk-label--has-icon {
+ align-items: center;
+}
+
+.utk-label__icon {
+ margin: 0;
+ padding: 0;
+ -unity-text-align: middle-center;
+ flex-shrink: 0;
+ -unity-font-definition: resource('Fonts/Icons/MaterialSymbolsOutlined');
+ font-size: 16px;
+ color: var(--color-text-primary);
+}
+
+/* Icon Color Variants */
+.utk-label--primary .utk-label__icon {
+ color: var(--color-text-primary);
+}
+
+.utk-label--secondary .utk-label__icon {
+ color: var(--color-text-secondary);
+}
+
+.utk-label--disabled .utk-label__icon {
+ color: var(--color-text-disabled);
+}
+
+.utk-label--success .utk-label__icon {
+ color: var(--color-state-success);
+}
+
+.utk-label--warning .utk-label__icon {
+ color: var(--color-state-warning);
+}
+
+.utk-label--error .utk-label__icon {
+ color: var(--color-state-error);
+}
+
+.utk-label--info .utk-label__icon {
+ color: var(--color-state-info);
+}
+
+.utk-label__image-icon {
+ flex-shrink: 0;
+ -unity-background-scale-mode: scale-to-fit;
+ -unity-background-image-tint-color: var(--color-text-primary);
+}
+
+/* Image Icon Color Variants */
+.utk-label--primary .utk-label__image-icon {
+ -unity-background-image-tint-color: var(--color-text-primary);
+}
+
+.utk-label--secondary .utk-label__image-icon {
+ -unity-background-image-tint-color: var(--color-text-secondary);
+}
+
+.utk-label--disabled .utk-label__image-icon {
+ -unity-background-image-tint-color: var(--color-text-disabled);
+}
+
+.utk-label--success .utk-label__image-icon {
+ -unity-background-image-tint-color: var(--color-state-success);
+}
+
+.utk-label--warning .utk-label__image-icon {
+ -unity-background-image-tint-color: var(--color-state-warning);
+}
+
+.utk-label--error .utk-label__image-icon {
+ -unity-background-image-tint-color: var(--color-state-error);
+}
+
+.utk-label--info .utk-label__image-icon {
+ -unity-background-image-tint-color: var(--color-state-info);
+}
diff --git a/Assets/Resources/UIToolkit/Label/UTKLabel.uss.meta b/Assets/Resources/UIToolkit/Label/UTKLabel.uss.meta
new file mode 100644
index 00000000..f9c4e8af
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Label/UTKLabel.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ba4afab5648d05542a67be81b62b3ceb
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List.meta b/Assets/Resources/UIToolkit/List.meta
new file mode 100644
index 00000000..c851465f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 3a74dc9dc20593f4e911815b5182854b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/List/UTKAccordionGridItem.uxml b/Assets/Resources/UIToolkit/List/UTKAccordionGridItem.uxml
new file mode 100644
index 00000000..e28a1814
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKAccordionGridItem.uxml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKAccordionGridItem.uxml.meta b/Assets/Resources/UIToolkit/List/UTKAccordionGridItem.uxml.meta
new file mode 100644
index 00000000..20a46e14
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKAccordionGridItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: a16c1e343c8da7e43957b039d6f899b7
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKAccordionHorizontalItem.uxml b/Assets/Resources/UIToolkit/List/UTKAccordionHorizontalItem.uxml
new file mode 100644
index 00000000..3f8210a8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKAccordionHorizontalItem.uxml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKAccordionHorizontalItem.uxml.meta b/Assets/Resources/UIToolkit/List/UTKAccordionHorizontalItem.uxml.meta
new file mode 100644
index 00000000..bcd20d4e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKAccordionHorizontalItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 437e77fc62e06a04982915c498c2e545
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKAccordionList.uxml b/Assets/Resources/UIToolkit/List/UTKAccordionList.uxml
new file mode 100644
index 00000000..4fb19ed9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKAccordionList.uxml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKAccordionList.uxml.meta b/Assets/Resources/UIToolkit/List/UTKAccordionList.uxml.meta
new file mode 100644
index 00000000..90d29457
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKAccordionList.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: b81fa4f4b558f214e975bf2209d7d8d8
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKAccordionListUss.uss b/Assets/Resources/UIToolkit/List/UTKAccordionListUss.uss
new file mode 100644
index 00000000..2ca293c5
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKAccordionListUss.uss
@@ -0,0 +1,437 @@
+/*
+ * ===================================
+ * UTKAccordionList.uss
+ * 테마 변수를 사용하는 아코디언 리스트 스타일
+ * ===================================
+ *
+ * 이 파일은 UTKThemeManager의 테마 변수를 참조합니다.
+ * - 색상: var(--color-*)
+ * - 간격: var(--space-*)
+ * - 반지름: var(--radius-*)
+ */
+
+.accordion-list-container {
+ background-color: var(--color-bg-panel);
+ flex-grow: 1;
+ padding: 0;
+ width: 100%;
+}
+
+.accordion-search-container {
+ flex-direction: row;
+ align-items: center;
+ margin: 0 0 var(--space-m) 0;
+}
+
+.accordion-search-field {
+ flex-grow: 1;
+ height: 24px;
+ margin: 0;
+}
+
+.accordion-search-field .unity-text-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-s) var(--space-m);
+ min-height: 24px;
+ font-size: var(--font-size-body2);
+}
+
+.accordion-search-field:focus .unity-text-field__input {
+ border-color: var(--color-border-focus);
+}
+
+/* ============================================
+ Clear 버튼 (Clear Button) - UTKButton 스타일 오버라이드
+ ============================================ */
+
+.accordion-clear-button {
+ width: 16px;
+ height: 16px;
+ min-width: 16px;
+ min-height: 16px;
+ border-width: 0;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ right: var(--space-s);
+ align-self: center;
+}
+
+.accordion-search-result-label {
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ margin-bottom: var(--space-m);
+ padding-left: var(--space-s);
+ height: 16px;
+}
+
+.accordion-tree-view .unity-tree-view__item-indent {
+ width: 0;
+ min-width: 0;
+ max-width: 0;
+ flex-basis: 0;
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+.accordion-tree-view .unity-tree-view__item-toggle .unity-toggle__checkmark {
+ width: 20px;
+ height: 20px;
+ background-image: resource('UIToolkit/Images/icon_right_22');
+ -unity-background-image-tint-color: var(--color-text-secondary);
+ rotate: 0deg;
+}
+
+.accordion-tree-view {
+ flex-grow: 1;
+ background-color: transparent;
+}
+
+.accordion-tree-view .unity-tree-view__item {
+ padding: 0;
+ margin: 0;
+ background-color: transparent;
+}
+
+.accordion-tree-view .unity-tree-view__item:hover {
+ background-color: transparent;
+}
+
+.accordion-tree-view .unity-tree-view__item:checked {
+ background-color: transparent;
+}
+
+.accordion-tree-view .unity-tree-view__item:hover:checked {
+ background-color: transparent;
+}
+
+.accordion-tree-view .unity-collection-view__item {
+ background-color: transparent;
+}
+
+.accordion-tree-view .unity-collection-view__item:hover {
+ background-color: transparent;
+}
+
+.accordion-tree-view .unity-collection-view__item--selected {
+ background-color: transparent;
+}
+
+.accordion-tree-view .unity-tree-view__item-toggle {
+ display: none;
+}
+
+.accordion-section-row {
+ background-color: var(--color-bg-elevated);
+}
+
+.accordion-section-row:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.accordion-section-row .unity-tree-view__item-toggle {
+ display: flex;
+ width: 16px;
+ margin-left: var(--space-s);
+}
+
+.accordion-item-container {
+ flex-grow: 1;
+}
+
+.accordion-sections-container {
+ flex-grow: 1;
+}
+
+.accordion-sections-container .unity-scroller--vertical {
+ width: 8px;
+}
+
+.accordion-sections-container .unity-scroller--vertical .unity-base-slider__dragger {
+ background-color: var(--color-scroller-dragger-normal);
+ border-radius: var(--radius-m);
+}
+
+.accordion-sections-container .unity-scroller--vertical .unity-base-slider__dragger:hover {
+ background-color: var(--color-scroller-dragger-hover);
+}
+
+.accordion-section {
+ border-bottom-width: 0;
+ margin-bottom: 0;
+}
+
+.accordion-section-header {
+ flex-direction: row;
+ align-items: center;
+ height: 30px;
+ background-color: transparent;
+ padding-left: 0;
+ padding-right: var(--space-m);
+}
+
+.accordion-section-header:hover {
+ background-color: transparent;
+}
+
+.accordion-expand-button {
+ display: none;
+}
+
+.accordion-expand-icon {
+ display: none;
+}
+
+.accordion-section-title {
+ flex-grow: 1;
+ color: var(--color-text-primary);
+ font-size: var(--font-size-body2);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Bold');
+ -unity-text-align: middle-left;
+ padding-left: var(--space-s);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.accordion-section-body {
+ background-color: var(--color-bg-panel);
+ overflow: hidden;
+ padding: 0;
+}
+
+.accordion-section-body.collapsed {
+ display: none;
+}
+
+.accordion-horizontal-item {
+ flex-direction: row;
+ align-items: center;
+ height: 25px;
+ padding: 0 var(--space-m) 0 28px;
+ background-color: transparent;
+ padding-right: 0;
+}
+
+.accordion-horizontal-item:hover {
+ background-color: var(--color-collection-item-hover);
+}
+
+.accordion-horizontal-item.selected {
+ background-color: var(--color-collection-item-selected);
+}
+
+.accordion-head-container {
+ width: 20px;
+ height: 20px;
+ margin-right: var(--space-s);
+ flex-shrink: 0;
+ align-items: center;
+ justify-content: center;
+}
+
+.accordion-head-image {
+ width: 16px;
+ height: 16px;
+ -unity-background-scale-mode: scale-to-fit;
+}
+
+.accordion-head-image .unity-label {
+ font-size: 16px;
+}
+
+.accordion-content-button {
+ flex-grow: 1;
+ height: 100%;
+ background-color: transparent;
+ border-width: 0;
+ padding: 0;
+ margin: 0;
+ -unity-text-align: middle-left;
+ justify-content: center;
+}
+
+.accordion-content-button:hover {
+ background-color: transparent;
+}
+
+.accordion-content-label {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+.accordion-horizontal-item.selected .accordion-content-label {
+ color: var(--color-base-01);
+}
+
+.accordion-tail-container {
+ flex-direction: row;
+ align-items: center;
+ flex-shrink: 0;
+}
+
+.accordion-tail-button {
+ width: 20px;
+ height: 20px;
+ background-color: transparent;
+ border-width: 0;
+ padding: 0;
+ margin-left: 0;
+ align-items: center;
+ justify-content: center;
+}
+
+.accordion-tail-button:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+ border-radius: var(--radius-s);
+}
+
+.accordion-tail-icon {
+ width: 14px;
+ height: 14px;
+ -unity-background-scale-mode: scale-to-fit;
+ -unity-background-image-tint-color: var(--color-text-secondary);
+}
+
+.accordion-tail-button:hover .accordion-tail-icon {
+ -unity-background-image-tint-color: var(--color-text-primary);
+}
+
+.accordion-grid-row {
+ flex-direction: row;
+ justify-content: flex-start;
+ align-items: flex-start;
+ padding: 0;
+}
+
+.accordion-grid-item {
+ flex-direction: column;
+ align-items: center;
+ justify-content: flex-start;
+ width: 120px;
+ height: 120px;
+ padding: 0;
+ margin: var(--space-xs);
+ background-color: transparent;
+ border-width: 0;
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+ flex-shrink: 0;
+}
+
+.accordion-grid-item:hover {
+ background-color: var(--color-collection-item-hover);
+}
+
+.accordion-grid-item:checked {
+ background-color: var(--color-collection-item-selected);
+}
+
+.accordion-grid-item:checked:hover {
+ background-color: var(--color-collection-item-selected-hover);
+}
+
+.accordion-grid-item--hidden {
+ visibility: hidden;
+}
+
+.accordion-grid-image {
+ width: 116px;
+ height: 87px;
+ min-width: 100px;
+ min-height: 75px;
+ background-color: var(--color-bg-input);
+ border-radius: var(--radius-m);
+ margin-bottom: 0;
+ -unity-background-scale-mode: scale-to-fit;
+ flex-shrink: 0;
+}
+
+.accordion-grid-image.loading {
+ background-image: none;
+}
+
+.accordion-grid-caption {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ -unity-text-align: upper-left;
+ white-space: normal;
+ width: 100%;
+ max-width: 100px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex-shrink: 1;
+}
+
+.accordion-grid-item:checked .accordion-grid-caption {
+ color: var(--color-base-01);
+}
+
+.accordion-grid-container {
+ flex-direction: row;
+ flex-wrap: wrap;
+ padding: var(--space-s);
+ padding-left: var(--space-xxl);
+}
+
+.accordion-grid-image-container {
+ width: 70px;
+ height: 70px;
+ margin-bottom: var(--space-s);
+ background-color: var(--color-bg-input);
+ border-radius: var(--radius-m);
+ align-items: center;
+ justify-content: center;
+}
+
+/* ===================================
+ Drag Ghost (dynamically created)
+ =================================== */
+
+.accordion-drag-ghost {
+ position: absolute;
+ opacity: 0.8;
+ /* pointer-events: none; */ /* Unity USS does not support pointer-events */
+ width: 116px;
+ height: 87px;
+ background-color: transparent;
+ border-radius: var(--radius-m);
+}
+
+.accordion-drag-ghost .accordion-grid-image {
+ width: 116px;
+ height: 87px;
+ min-width: 116px;
+ min-height: 87px;
+ border-radius: var(--radius-m);
+}
+
+/* New theme-aware drag ghost classes */
+.utk-accordion-drag-ghost {
+ opacity: 0.8;
+}
+
+.utk-accordion-drag-ghost__image {
+ width: 100%;
+ height: 100%;
+ background-color: var(--color-drag-ghost-bg);
+ border-radius: var(--radius-m);
+ -unity-background-scale-mode: scale-to-fit;
+}
+
+.accordion-empty-label {
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Regular');
+ -unity-text-align: middle-center;
+ padding: var(--space-xl);
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKAccordionListUss.uss.meta b/Assets/Resources/UIToolkit/List/UTKAccordionListUss.uss.meta
new file mode 100644
index 00000000..f32eaf80
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKAccordionListUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2fddf5103d281d34c90ae9ca58eb7f10
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKAccordionSection.uxml b/Assets/Resources/UIToolkit/List/UTKAccordionSection.uxml
new file mode 100644
index 00000000..42c440c3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKAccordionSection.uxml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKAccordionSection.uxml.meta b/Assets/Resources/UIToolkit/List/UTKAccordionSection.uxml.meta
new file mode 100644
index 00000000..3bf99d0a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKAccordionSection.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6821f43452ecf6e4ebab5135eb8356c5
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKComponentList.uxml b/Assets/Resources/UIToolkit/List/UTKComponentList.uxml
new file mode 100644
index 00000000..83e98db2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKComponentList.uxml
@@ -0,0 +1,10 @@
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKComponentList.uxml.meta b/Assets/Resources/UIToolkit/List/UTKComponentList.uxml.meta
new file mode 100644
index 00000000..d180a86a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKComponentList.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 0a221099d1761a543bfbbb334d020885
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKComponentListGroupItem.uxml b/Assets/Resources/UIToolkit/List/UTKComponentListGroupItem.uxml
new file mode 100644
index 00000000..5990aeeb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKComponentListGroupItem.uxml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKComponentListGroupItem.uxml.meta b/Assets/Resources/UIToolkit/List/UTKComponentListGroupItem.uxml.meta
new file mode 100644
index 00000000..ace62304
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKComponentListGroupItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 4949994f0313f02459e91ec4e4144a9d
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKComponentListItem.uxml b/Assets/Resources/UIToolkit/List/UTKComponentListItem.uxml
new file mode 100644
index 00000000..8910e551
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKComponentListItem.uxml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKComponentListItem.uxml.meta b/Assets/Resources/UIToolkit/List/UTKComponentListItem.uxml.meta
new file mode 100644
index 00000000..7f0f8978
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKComponentListItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: ebc2d9ee974683b4794dc4b6e4c30ac0
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKComponentListUss.uss b/Assets/Resources/UIToolkit/List/UTKComponentListUss.uss
new file mode 100644
index 00000000..4e681c17
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKComponentListUss.uss
@@ -0,0 +1,147 @@
+/*
+ * UTKComponentList.uss
+ *
+ * UTKComponentList 컴포넌트의 스타일 정의입니다.
+ * 테마 지원: var(--color-*) 변수 사용
+ */
+
+.tree-menu-container {
+ background-color: var(--color-bg-panel);
+ align-self: stretch;
+ padding: 5px;
+ padding-top: 0;
+ padding-right: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+ flex-grow: 1;
+}
+
+.search-container {
+ flex-direction: row;
+ align-items: center;
+ margin-bottom: 20px;
+}
+
+.search-field {
+ flex-grow: 1;
+ height: 24px;
+ margin: 0;
+}
+
+.search-field .unity-text-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-s) var(--space-m);
+ min-height: 24px;
+ font-size: var(--font-size-body2);
+}
+
+.search-field:focus .unity-text-field__input {
+ border-color: var(--color-border-focus);
+}
+
+/* ============================================
+ Clear 버튼 (Clear Button) - UTKButton 스타일 오버라이드
+ ============================================ */
+
+.search-clear-button {
+ width: 16px;
+ height: 16px;
+ min-width: 16px;
+ min-height: 16px;
+ border-width: 0;
+ margin: 0;
+ padding: 0;
+ align-self: center;
+ position: absolute;
+ right: 4px;
+}
+
+/* 카테고리 확장/축소 토글 화살표 스타일 */
+.unity-tree-view__item-toggle #unity-checkmark {
+ background-image: resource('UIToolkit/Images/icon_down_22');
+}
+
+/* 카테고리 항목: hover 시 배경 색상 변경 없음 */
+.category-item:hover {
+ background-color: rgba(0, 0, 0, 0);
+}
+
+/* 카테고리 항목: 선택 스타일도 비활성화 */
+.category-item:checked {
+ background-color: rgba(0, 0, 0, 0);
+}
+
+.category-item:hover:checked {
+ background-color: rgba(0, 0, 0, 0);
+}
+
+/* ============================================
+ TreeView 아이템 컨테이너 (TreeView Item Container)
+ ============================================ */
+
+.unity-tree-view__item-content TemplateContainer {
+ flex-grow: 1;
+}
+
+/* ============================================
+ 그룹 아이템 (Group Item) - UTKComponentListGroupItem
+ ============================================ */
+
+.tree-item-container {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ height: 22px;
+ padding: 0 8px 0 0;
+}
+
+.tree-item-container .item-label-style {
+ flex-grow: 1;
+ margin: 0;
+ padding: 0 4px;
+ height: 22px;
+ color: var(--color-text-primary);
+ font-size: var(--font-size-body2);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Bold');
+ -unity-text-align: middle-left;
+}
+
+.tree-item-container .badge-label {
+ flex-grow: 0;
+ margin: 0;
+ padding: 0 4px;
+ min-width: 18px;
+ height: 18px;
+ color: var(--color-text-on-primary);
+ font-size: var(--font-size-label4);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ -unity-text-align: middle-center;
+ align-items: center;
+ border-radius: 9px;
+ background-color: var(--color-bg-tertiary);
+}
+
+/* ============================================
+ 리프 아이템 (Leaf Item) - UTKComponentListItem
+ ============================================ */
+
+.tree-leaf-item-container {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ height: 22px;
+ padding: 0 8px 0 0;
+}
+
+.tree-leaf-item-container .item-label-style {
+ flex-grow: 1;
+ margin: 0;
+ padding: 0 4px;
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ -unity-text-align: middle-left;
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKComponentListUss.uss.meta b/Assets/Resources/UIToolkit/List/UTKComponentListUss.uss.meta
new file mode 100644
index 00000000..b3c38bcb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKComponentListUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 71cac0276293ce2479851f572ffbda27
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKImageList.uxml b/Assets/Resources/UIToolkit/List/UTKImageList.uxml
new file mode 100644
index 00000000..3da3d0bc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKImageList.uxml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKImageList.uxml.meta b/Assets/Resources/UIToolkit/List/UTKImageList.uxml.meta
new file mode 100644
index 00000000..955212c2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKImageList.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: d8b3d06f0f93efd40bbcd3ef503f7d5e
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKImageListItem.uxml b/Assets/Resources/UIToolkit/List/UTKImageListItem.uxml
new file mode 100644
index 00000000..e82f4819
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKImageListItem.uxml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKImageListItem.uxml.meta b/Assets/Resources/UIToolkit/List/UTKImageListItem.uxml.meta
new file mode 100644
index 00000000..61020a00
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKImageListItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 1c522a2c09cb57649a8ee7c8bab6a044
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKImageListUss.uss b/Assets/Resources/UIToolkit/List/UTKImageListUss.uss
new file mode 100644
index 00000000..8928645b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKImageListUss.uss
@@ -0,0 +1,179 @@
+.image-list-container {
+ background-color: var(--color-bg-panel);
+ flex-grow: 1;
+ padding: 0;
+ width: 100%;
+}
+
+.search-container {
+ flex-direction: row;
+ align-items: center;
+ margin-bottom: 20px;
+}
+
+.search-field {
+ flex-grow: 1;
+ height: 24px;
+ margin: 0;
+}
+
+.search-field .unity-text-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-s) var(--space-m);
+ min-height: 24px;
+ font-size: var(--font-size-body2);
+}
+
+.search-field:focus .unity-text-field__input {
+ border-color: var(--color-border-focus);
+}
+
+/* ============================================
+ Clear 버튼 (Clear Button) - UTKButton 스타일 오버라이드
+ ============================================ */
+
+.clear-button {
+ width: 16px;
+ height: 16px;
+ min-width: 16px;
+ min-height: 16px;
+ border-width: 0;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ right: 4px;
+ align-self: center;
+}
+
+.search-result-label {
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-label4);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ margin-bottom: 8px;
+ padding-left: 4px;
+ height: 16px;
+}
+
+#main-list-view {
+ flex-grow: 1;
+}
+
+#main-list-view .unity-list-view__item {
+ background-color: transparent;
+}
+
+#main-list-view .unity-list-view__item:hover {
+ background-color: transparent;
+}
+
+#main-list-view .unity-list-view__item:checked {
+ background-color: transparent;
+}
+
+#main-list-view .unity-list-view__item:selected {
+ background-color: transparent;
+}
+
+.image-list-row {
+ flex-direction: row;
+ justify-content: flex-start;
+ align-items: flex-start;
+ padding: 0 4px;
+ padding-top: 0;
+ padding-right: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+}
+
+.image-list-item {
+ flex-direction: column;
+ align-items: center;
+ justify-content: flex-start;
+ width: 120px;
+ height: 120px;
+ padding: 8px;
+ margin: 4px;
+ background-color: transparent;
+ border-width: 0;
+ transition-duration: 0.15s;
+ transition-property: background-color;
+ flex-shrink: 0;
+ margin-top: 2px;
+ margin-right: 2px;
+ margin-bottom: 4px;
+ margin-left: 2px;
+ padding-top: 0;
+ padding-right: 0;
+ padding-bottom: 0;
+ padding-left: 0;
+}
+
+.image-list-item:hover {
+ background-color: var(--color-collection-item-hover);
+}
+
+.image-list-item:checked {
+ background-color: var(--color-collection-item-selected);
+}
+
+.image-list-item:checked:hover {
+ background-color: var(--color-collection-item-selected-hover);
+}
+
+.image-list-item--hidden {
+ visibility: hidden;
+}
+
+.item-image {
+ width: 116px;
+ height: 87px;
+ min-width: 100px;
+ min-height: 75px;
+ background-color: var(--color-bg-input);
+ border-radius: var(--radius-m);
+ margin-bottom: 0;
+ -unity-background-scale-mode: scale-to-fit;
+ flex-shrink: 0;
+}
+
+.item-image-loading {
+ background-image: none;
+}
+
+.item-label {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label4);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ -unity-text-align: upper-left;
+ white-space: normal;
+ width: 100%;
+ max-width: 100px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ flex-shrink: 1;
+}
+
+.image-list-item:checked .item-label {
+ color: var(--color-base-01);
+}
+
+.drag-ghost {
+ position: absolute;
+ opacity: 0.7;
+ /* pointer-events: none; */ /* Unity USS does not support pointer-events */
+ width: 80px;
+ height: 60px;
+ background-color: transparent;
+ padding: 0;
+}
+
+.drag-ghost .item-image {
+ width: 80px;
+ height: 60px;
+ min-width: 80px;
+ min-height: 60px;
+ border-radius: 4px;
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKImageListUss.uss.meta b/Assets/Resources/UIToolkit/List/UTKImageListUss.uss.meta
new file mode 100644
index 00000000..ff8cbcfc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKImageListUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c23a2fd187fa1014c8fb969c6ec23122
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKListView.uss b/Assets/Resources/UIToolkit/List/UTKListView.uss
new file mode 100644
index 00000000..29a43221
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKListView.uss
@@ -0,0 +1,99 @@
+/*
+ * ===================================
+ * UTKListView.uss
+ * Unity ListView 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-listview {
+ flex-grow: 1;
+ background-color: var(--color-bg-secondary);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ Scroll View
+ =================================== */
+
+.utk-listview > .unity-scroll-view {
+ flex-grow: 1;
+}
+
+/* ===================================
+ List Items
+ =================================== */
+
+.utk-listview .unity-list-view__item {
+ padding-top: 0;
+ padding-bottom: 0;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ margin: 0;
+ background-color: transparent;
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+ font-size: var(--font-size-body2);
+ height: auto;
+ min-height: 24px;
+ -unity-text-align: middle-left;
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-listview .unity-list-view__item:last-child {
+ border-bottom-width: 0;
+} */
+
+.utk-listview .unity-list-view__item:hover {
+ background-color: var(--color-btn-hover);
+}
+
+/* Unity ListView uses unity-collection-view__item--selected class internally */
+.utk-listview .unity-collection-view__item--selected,
+.utk-listview .unity-list-view__item--selected {
+ background-color: var(--color-btn-primary);
+}
+
+.utk-listview .unity-collection-view__item--selected:hover,
+.utk-listview .unity-list-view__item--selected:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+/* ===================================
+ Item Label
+ =================================== */
+
+.utk-listview .unity-list-view__item .unity-label,
+.utk-listview .unity-list-view__item .unity-text-element {
+ font-size: var(--font-size-body2) ;
+ color: var(--color-text-primary) ;
+ -unity-text-align: middle-left ;
+ padding-top: 0 ;
+ padding-bottom: 0 ;
+}
+
+.utk-listview .unity-collection-view__item--selected .unity-label,
+.utk-listview .unity-collection-view__item--selected .unity-text-element,
+.utk-listview .unity-list-view__item--selected .unity-label,
+.utk-listview .unity-list-view__item--selected .unity-text-element {
+ color: var(--color-text-on-primary) ;
+}
+
+/* ===================================
+ Alternating Rows
+ =================================== */
+
+/* Note: Alternating rows must be handled in C# code
+ Unity USS does not support :nth-child() pseudo-class */
+
+/* ===================================
+ Empty State
+ =================================== */
+
+/* Unity USS does not support CSS pseudo-elements.
+ Empty state should be handled in C# code by adding a Label element. */
diff --git a/Assets/Resources/UIToolkit/List/UTKListView.uss.meta b/Assets/Resources/UIToolkit/List/UTKListView.uss.meta
new file mode 100644
index 00000000..48a080ed
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKListView.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6e3628d47dbfa294f8c3bc3a59f34ceb
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKMultiColumnListView.uss b/Assets/Resources/UIToolkit/List/UTKMultiColumnListView.uss
new file mode 100644
index 00000000..a584533e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKMultiColumnListView.uss
@@ -0,0 +1,133 @@
+/*
+ * ===================================
+ * UTKMultiColumnListView.uss
+ * Unity MultiColumnListView 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-multicolumn-listview {
+ flex-grow: 1;
+ background-color: var(--color-bg-secondary);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ Header
+ =================================== */
+
+.utk-multicolumn-listview .unity-multi-column-header {
+ background-color: var(--color-bg-elevated);
+ border-bottom-width: 1px;
+ border-bottom-color: var(--color-border);
+}
+
+.utk-multicolumn-listview .unity-multi-column-header__column {
+ padding: var(--space-s) var(--space-m);
+ background-color: transparent;
+ border-right-width: 1px;
+ border-right-color: var(--color-border-light);
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-multicolumn-listview .unity-multi-column-header__column:last-child {
+ border-right-width: 0;
+} */
+
+.utk-multicolumn-listview .unity-multi-column-header__column:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-multicolumn-listview .unity-multi-column-header__column-title {
+ font-size: var(--font-size-body2);
+ -unity-font-style: bold;
+ color: var(--color-text-primary) ;
+}
+
+.utk-multicolumn-listview .unity-multi-column-header__column .unity-text-element {
+ color: var(--color-text-primary) ;
+}
+
+/* ===================================
+ Column Resize Handle
+ =================================== */
+
+.utk-multicolumn-listview .unity-multi-column-header__column-resize-handle {
+ width: 4px;
+ background-color: transparent;
+}
+
+.utk-multicolumn-listview .unity-multi-column-header__column-resize-handle:hover {
+ background-color: var(--color-btn-primary);
+}
+
+/* ===================================
+ List Items
+ =================================== */
+
+.utk-multicolumn-listview .unity-list-view__item {
+ padding: 0;
+ background-color: transparent;
+ border-bottom-width: 1px;
+ border-bottom-color: var(--color-border-light);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+}
+
+.utk-multicolumn-listview .unity-list-view__item:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-multicolumn-listview .unity-list-view__item--selected {
+ background-color: var(--color-btn-primary);
+}
+
+.utk-multicolumn-listview .unity-list-view__item--selected:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+/* ===================================
+ Cell Content
+ =================================== */
+
+.utk-multicolumn-listview .unity-multi-column-view__cell {
+ padding: 0 var(--space-m);
+ border-right-width: 1px;
+ border-right-color: var(--color-border-light);
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-multicolumn-listview .unity-multi-column-view__cell:last-child {
+ border-right-width: 0;
+} */
+
+.utk-multicolumn-listview .unity-multi-column-view__cell > .unity-label {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ padding-top: 0;
+ padding-bottom: 0;
+}
+
+.utk-multicolumn-listview .unity-list-view__item--selected .unity-multi-column-view__cell > .unity-label {
+ color: var(--color-text-on-primary);
+}
+
+/* ===================================
+ Alternating Rows
+ =================================== */
+
+/* Note: Alternating rows must be handled in C# code
+ Unity USS does not support :nth-child() pseudo-class */
+
+/* ===================================
+ Sort Indicator
+ =================================== */
+
+.utk-multicolumn-listview .unity-multi-column-header__column-sort-indicator {
+ -unity-background-image-tint-color: var(--color-text-secondary);
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKMultiColumnListView.uss.meta b/Assets/Resources/UIToolkit/List/UTKMultiColumnListView.uss.meta
new file mode 100644
index 00000000..de95dd79
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKMultiColumnListView.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5ef1882bb2a54494282198832116277e
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKMultiColumnTreeView.uss b/Assets/Resources/UIToolkit/List/UTKMultiColumnTreeView.uss
new file mode 100644
index 00000000..6bbbbe09
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKMultiColumnTreeView.uss
@@ -0,0 +1,154 @@
+/*
+ * ===================================
+ * UTKMultiColumnTreeView.uss
+ * Unity MultiColumnTreeView 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-multicolumn-treeview {
+ flex-grow: 1;
+ background-color: var(--color-bg-secondary);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ Header
+ =================================== */
+
+.utk-multicolumn-treeview .unity-multi-column-header {
+ background-color: var(--color-bg-elevated);
+ border-bottom-width: 1px;
+ border-bottom-color: var(--color-border);
+}
+
+.utk-multicolumn-treeview .unity-multi-column-header__column {
+ padding: var(--space-s) var(--space-m);
+ background-color: transparent;
+ border-right-width: 1px;
+ border-right-color: var(--color-border-light);
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-multicolumn-treeview .unity-multi-column-header__column:last-child {
+ border-right-width: 0;
+} */
+
+.utk-multicolumn-treeview .unity-multi-column-header__column:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-multicolumn-treeview .unity-multi-column-header__column-title {
+ font-size: var(--font-size-body2);
+ -unity-font-style: bold;
+ color: var(--color-text-primary) ;
+}
+
+.utk-multicolumn-treeview .unity-multi-column-header__column .unity-text-element {
+ color: var(--color-text-primary) ;
+}
+
+/* ===================================
+ Column Resize Handle
+ =================================== */
+
+.utk-multicolumn-treeview .unity-multi-column-header__column-resize-handle {
+ width: 4px;
+ background-color: transparent;
+}
+
+.utk-multicolumn-treeview .unity-multi-column-header__column-resize-handle:hover {
+ background-color: var(--color-btn-primary);
+}
+
+/* ===================================
+ Tree Items
+ =================================== */
+
+.utk-multicolumn-treeview .unity-tree-view__item {
+ padding: 0;
+ background-color: transparent;
+ border-bottom-width: 1px;
+ border-bottom-color: var(--color-border-light);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+}
+
+.utk-multicolumn-treeview .unity-tree-view__item:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-multicolumn-treeview .unity-tree-view__item--selected {
+ background-color: var(--color-btn-primary);
+}
+
+.utk-multicolumn-treeview .unity-tree-view__item--selected:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+/* ===================================
+ Toggle (Expand/Collapse)
+ =================================== */
+
+.utk-multicolumn-treeview .unity-tree-view__item-toggle {
+ width: 16px;
+ height: 16px;
+ margin-right: var(--space-xs);
+ -unity-background-image-tint-color: var(--color-text-secondary) ;
+ transition-duration: var(--anim-fast);
+ transition-property: rotate;
+}
+
+.utk-multicolumn-treeview .unity-tree-view__item--selected .unity-tree-view__item-toggle {
+ -unity-background-image-tint-color: var(--color-text-on-primary) ;
+}
+
+/* ===================================
+ Indentation
+ =================================== */
+
+.utk-multicolumn-treeview .unity-tree-view__item-indents-container {
+ flex-direction: row;
+}
+
+.utk-multicolumn-treeview .unity-tree-view__item-indent {
+ width: 16px;
+}
+
+/* ===================================
+ Cell Content
+ =================================== */
+
+.utk-multicolumn-treeview .unity-multi-column-view__cell {
+ padding: 0 var(--space-m);
+ border-right-width: 1px;
+ border-right-color: var(--color-border-light);
+ align-self: center;
+}
+
+/* Unity USS does not support :last-child pseudo-class */
+/* .utk-multicolumn-treeview .unity-multi-column-view__cell:last-child {
+ border-right-width: 0;
+} */
+
+.utk-multicolumn-treeview .unity-multi-column-view__cell > .unity-label {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+}
+
+.utk-multicolumn-treeview .unity-tree-view__item--selected .unity-multi-column-view__cell > .unity-label {
+ color: var(--color-text-on-primary);
+}
+
+/* ===================================
+ Sort Indicator
+ =================================== */
+
+.utk-multicolumn-treeview .unity-multi-column-header__column-sort-indicator {
+ -unity-background-image-tint-color: var(--color-text-secondary);
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKMultiColumnTreeView.uss.meta b/Assets/Resources/UIToolkit/List/UTKMultiColumnTreeView.uss.meta
new file mode 100644
index 00000000..fee96a73
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKMultiColumnTreeView.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9512ad13c373364418bea8ea44f8a315
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKPropertyGroupHeader.uxml b/Assets/Resources/UIToolkit/List/UTKPropertyGroupHeader.uxml
new file mode 100644
index 00000000..0e70506c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKPropertyGroupHeader.uxml
@@ -0,0 +1,26 @@
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKPropertyGroupHeader.uxml.meta b/Assets/Resources/UIToolkit/List/UTKPropertyGroupHeader.uxml.meta
new file mode 100644
index 00000000..8dd99aa6
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKPropertyGroupHeader.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 25fa8d693a22bc249a06e7590195db6b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKPropertyList.uxml b/Assets/Resources/UIToolkit/List/UTKPropertyList.uxml
new file mode 100644
index 00000000..01c1f2a5
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKPropertyList.uxml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKPropertyList.uxml.meta b/Assets/Resources/UIToolkit/List/UTKPropertyList.uxml.meta
new file mode 100644
index 00000000..c33a4cdc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKPropertyList.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: ce54ec6394398ba489dba4a5f0f00073
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKPropertyListUss.uss b/Assets/Resources/UIToolkit/List/UTKPropertyListUss.uss
new file mode 100644
index 00000000..d676f907
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKPropertyListUss.uss
@@ -0,0 +1,205 @@
+/*
+ * ===================================
+ * UTKPropertyListUss.uss
+ * UTKPropertyList 컴포넌트 전용 스타일
+ * ===================================
+ *
+ * 이 파일은 UTKThemeManager의 테마 변수를 참조합니다.
+ * - 색상: var(--color-*)
+ * - 간격: var(--space-*)
+ * - 반지름: var(--radius-*)
+ *
+ * 관련 파일:
+ * - UTKPropertyList.uxml: 메인 레이아웃
+ * - UTKPropertyList.cs: 컴포넌트 로직
+ *
+ * 참고: PropertyItem View 스타일은 UTKPropertyItemViewCommonUss.uss 참조
+ */
+
+/* ===================================
+ Property List Container
+ =================================== */
+
+.utk-property-list {
+ flex-grow: 1;
+ background-color: var(--color-bg-panel);
+}
+
+/* ===================================
+ Search Container
+ =================================== */
+
+.utk-property-list__search-container {
+ flex-direction: row;
+ padding: var(--space-m) 0;
+}
+
+/* UTKInputField 검색 필드 스타일 */
+.utk-property-list__search-field {
+ flex-grow: 1;
+ height: 24px;
+ margin: 0;
+}
+
+.utk-property-list__search-field .unity-text-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-s) var(--space-m);
+ min-height: 24px;
+ font-size: var(--font-size-body2);
+}
+
+.utk-property-list__search-field:focus .unity-text-field__input {
+ border-color: var(--color-border-focus);
+}
+
+/* ============================================
+ Clear 버튼 (Clear Button) - UTKButton 스타일 오버라이드
+ ============================================ */
+.utk-property-list__search-field-clear-button {
+ width: 16px;
+ height: 16px;
+ min-width: 16px;
+ min-height: 16px;
+ border-width: 0;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ right: var(--space-s);
+ align-self: center;
+}
+
+/* ===================================
+ TreeView
+ =================================== */
+
+.utk-property-list__tree-view {
+ flex-grow: 1;
+ background-color: transparent;
+}
+
+.utk-property-list__tree-view .unity-tree-view__item {
+ padding: 0;
+ margin: 0;
+ background-color: transparent;
+}
+
+.utk-property-list__tree-view .unity-tree-view__item:hover {
+ background-color: transparent;
+}
+
+.utk-property-list__tree-view .unity-tree-view__item:checked {
+ background-color: transparent;
+}
+
+.utk-property-list__tree-view .unity-tree-view__item:hover:checked {
+ background-color: transparent;
+}
+
+.utk-property-list__tree-view .unity-collection-view__item {
+ background-color: transparent;
+}
+
+.utk-property-list__tree-view .unity-collection-view__item:hover {
+ background-color: transparent;
+}
+
+.utk-property-list__tree-view .unity-collection-view__item--selected {
+ background-color: transparent;
+}
+
+/* TreeView 기본 토글 버튼 숨기기 (커스텀 그룹 헤더 아이콘 사용) */
+.utk-property-list__tree-view .unity-tree-view__item-toggle {
+ display: none;
+}
+
+/* TreeView 들여쓰기 제거 */
+.utk-property-list__tree-view .unity-tree-view__item-indent {
+ width: 0;
+ min-width: 0;
+ max-width: 0;
+ flex-basis: 0;
+ flex-grow: 0;
+ flex-shrink: 0;
+}
+
+/* ===================================
+ Property Item Container
+ =================================== */
+
+.utk-property-item-container {
+ flex-grow: 1;
+}
+
+/* ===================================
+ Group Header
+ =================================== */
+
+.utk-property-group {
+ flex-direction: column;
+}
+
+.utk-property-group__header {
+ flex-direction: row;
+ align-items: center;
+ height: 32px;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ background-color: var(--color-bg-elevated);
+ border-bottom-width: var(--border-width);
+ border-bottom-color: var(--color-border);
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+.utk-property-group__header:hover {
+ background-color: var(--color-collection-item-hover);
+}
+
+/* UTKLabel 펼침 아이콘 스타일 */
+.utk-property-group__expand-icon {
+ width: 16px;
+ height: 16px;
+ margin-right: var(--space-s);
+ justify-content: center;
+ align-items: center;
+}
+
+.utk-property-group__expand-icon .utk-label__icon {
+ font-size: 16px;
+ color: var(--color-text-secondary);
+}
+
+.utk-property-group__header:hover .utk-property-group__expand-icon .utk-label__icon {
+ color: var(--color-text-primary);
+}
+
+/* UTKLabel 그룹 타이틀 스타일 */
+.utk-property-group__title {
+ flex-grow: 1;
+}
+
+.utk-property-group__title .utk-label__text {
+ font-size: var(--font-size-body2);
+ -unity-font-style: bold;
+ color: var(--color-text-primary);
+}
+
+/* UTKLabel 아이템 개수 스타일 */
+.utk-property-group__count {
+ margin-left: var(--space-m);
+}
+
+.utk-property-group__count .utk-label__text {
+ font-size: var(--font-size-label4);
+ color: var(--color-text-secondary);
+}
+
+.utk-property-group__content {
+ overflow: hidden;
+}
+
+.utk-property-group--collapsed .utk-property-group__content {
+ display: none;
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKPropertyListUss.uss.meta b/Assets/Resources/UIToolkit/List/UTKPropertyListUss.uss.meta
new file mode 100644
index 00000000..f45ec1ae
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKPropertyListUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0feefbfc0516b6b489c50fe891ebd9bd
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKReordableListItem.uxml b/Assets/Resources/UIToolkit/List/UTKReordableListItem.uxml
new file mode 100644
index 00000000..705deea6
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKReordableListItem.uxml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKReordableListItem.uxml.meta b/Assets/Resources/UIToolkit/List/UTKReordableListItem.uxml.meta
new file mode 100644
index 00000000..aa1f13b2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKReordableListItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 83ba2c4f240fbfb44a4ed4acd25aa5ce
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKReordableListItemUss.uss b/Assets/Resources/UIToolkit/List/UTKReordableListItemUss.uss
new file mode 100644
index 00000000..07e57528
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKReordableListItemUss.uss
@@ -0,0 +1,58 @@
+/*
+ * ===================================
+ * UTKReordableListItemUss.uss
+ * 재정렬 가능 리스트 아이템 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Item Container
+ =================================== */
+
+.reordable-list-item {
+ flex-direction: row;
+ align-items: center;
+ padding: var(--space-s) var(--space-m);
+ padding-left: 0;
+ min-height: 36px;
+ flex-grow: 1;
+}
+
+/* ===================================
+ Drag Handle
+ =================================== */
+
+.reordable-list-item__drag-handle {
+ width: 24px;
+ height: 24px;
+ -unity-font-definition: resource('Fonts/Icons/MaterialSymbolsOutlined');
+ font-size: 18px;
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+ flex-shrink: 0;
+ margin-right: var(--space-xs);
+ cursor: move;
+ padding: 0;
+}
+
+.reordable-list-item__drag-handle:hover {
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Checkbox
+ =================================== */
+
+.reordable-list-item__checkbox {
+ flex-shrink: 0;
+ margin-right: var(--space-s);
+}
+
+/* ===================================
+ Input Field
+ =================================== */
+
+.reordable-list-item__input {
+ flex-grow: 1;
+ min-width: 0;
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKReordableListItemUss.uss.meta b/Assets/Resources/UIToolkit/List/UTKReordableListItemUss.uss.meta
new file mode 100644
index 00000000..9858638b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKReordableListItemUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 18f971ae90e8e1c4bad0afcc31efe1d1
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKReordableListUss.uss b/Assets/Resources/UIToolkit/List/UTKReordableListUss.uss
new file mode 100644
index 00000000..baf67373
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKReordableListUss.uss
@@ -0,0 +1,61 @@
+/*
+ * ===================================
+ * UTKReordableListUss.uss
+ * 재정렬 가능 리스트 컨테이너 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.reordable-list {
+ background-color: var(--color-bg-secondary);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ padding-top: var(--space-s);
+ padding-bottom: var(--space-s);
+}
+
+/* ===================================
+ ListView 내부 여백 조정
+ =================================== */
+
+.reordable-list .utk-listview {
+ flex-grow: 1;
+ border-width: 0;
+ border-radius: 0;
+ background-color: transparent;
+}
+
+/* ===================================
+ 드래그 중 아이템 스타일 (Unity 내장 클래스)
+ =================================== */
+
+.reordable-list .unity-list-view__reorderable-item {
+ justify-content: center;
+}
+
+.reordable-list .unity-list-view__reorderable-item__container {
+ flex-direction: row;
+ align-items: center;
+ padding-left: 0;
+ padding-right: 0;
+}
+
+/* ===================================
+ 드래그 핸들 바 (Unity 내장 reorder handle)
+ 커스텀 드래그 핸들 사용하므로 기본 숨김
+ =================================== */
+
+.reordable-list .unity-list-view__reorderable-handle {
+ display: none;
+ width: 0;
+ min-width: 0;
+ max-width: 0;
+}
+
+.reordable-list .unity-list-view__reorderable-handle-bar {
+ display: none;
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKReordableListUss.uss.meta b/Assets/Resources/UIToolkit/List/UTKReordableListUss.uss.meta
new file mode 100644
index 00000000..ee0b66cc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKReordableListUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ebeda1896b5d02d489342ed0c4e45698
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss b/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss
new file mode 100644
index 00000000..1eb7052a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss
@@ -0,0 +1,44 @@
+/*
+ * ===================================
+ * UTKReordableTabListUss.uss
+ * 탭 기반 재정렬 가능 리스트 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.reordable-tab-list {
+ flex-grow: 1;
+ padding: 8px;
+ background-color: var(--color-bg-secondary);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ TabView 내부 스타일 오버라이드
+ 외부 utk-tabview--align-left 등 align 클래스가
+ descendant selector로 내부 TabView에 영향을 주지 않도록 리셋
+ =================================== */
+
+.reordable-tab-list > .utk-tabview {
+ flex-grow: 1;
+}
+
+.reordable-tab-list > .utk-tabview > .unity-tab-view__content-container {
+ padding: 0;
+ margin-top: var(--space-s);
+}
+
+/* ===================================
+ 탭 콘텐츠 내부 ReordableList 스타일 오버라이드
+ =================================== */
+
+.reordable-tab-list .reordable-list {
+ border-width: 0;
+ border-radius: 0;
+ background-color: transparent;
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss.meta b/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss.meta
new file mode 100644
index 00000000..d67ec83b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKReordableTabListUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5e72692fcb817e14e8fbcaaf9b4f6b17
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKShortcutList.uxml b/Assets/Resources/UIToolkit/List/UTKShortcutList.uxml
new file mode 100644
index 00000000..3fb58dbf
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKShortcutList.uxml
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKShortcutList.uxml.meta b/Assets/Resources/UIToolkit/List/UTKShortcutList.uxml.meta
new file mode 100644
index 00000000..0c38a658
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKShortcutList.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 009b695fb58d74b43a48be6fb5a00895
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKShortcutListItem.uxml b/Assets/Resources/UIToolkit/List/UTKShortcutListItem.uxml
new file mode 100644
index 00000000..1011d7ce
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKShortcutListItem.uxml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKShortcutListItem.uxml.meta b/Assets/Resources/UIToolkit/List/UTKShortcutListItem.uxml.meta
new file mode 100644
index 00000000..5cf4441b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKShortcutListItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 0d18cdf18ee19874aaf8decc2b8805ff
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKShortcutListUss.uss b/Assets/Resources/UIToolkit/List/UTKShortcutListUss.uss
new file mode 100644
index 00000000..93d4b59c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKShortcutListUss.uss
@@ -0,0 +1,262 @@
+/*
+ * ===================================
+ * UTKShortcutListUss.uss
+ * 단축키 설정 리스트 컴포넌트 전용 스타일
+ * ===================================
+ *
+ * 이 파일은 UTKThemeManager 의 CSS 변수를 참조합니다.
+ * - 색상 : var(--color-*)
+ * - 간격 : var(--space-*)
+ * - 반지름: var(--radius-*)
+ * - 폰트 : var(--font-size-*)
+ *
+ * 컬럼 너비 (컨테이너 · 헤더 · 아이템 공통으로 맞춤):
+ * command flex-grow:1 명령 이름 (나머지 공간 전부)
+ * modifier 52px Ctrl / Shift / Alt 체크박스 셀
+ * key 76px 주요 키 입력 셀
+ *
+ * 관련 파일:
+ * UTKShortcutList.uxml – 메인 레이아웃
+ * UTKShortcutListItem.uxml – 아이템 행 레이아웃
+ * UTKShortcutList.cs – 컴포넌트 로직
+ */
+
+/* =============================================
+ 루트 컨테이너
+ ============================================= */
+
+.utk-shortcut-list {
+ flex-grow: 1;
+ flex-direction: column;
+ background-color: var(--color-bg-panel);
+}
+
+.utk-shortcut-list-container {
+ flex-grow: 1;
+ flex-direction: column;
+}
+
+/* =============================================
+ 검색 영역 (검색 필드 + Clear 버튼)
+ ============================================= */
+
+.utk-shortcut-list__search-container {
+ position: relative;
+ margin: var(--space-m) var(--space-m) 0 var(--space-m);
+ justify-content: center;
+}
+
+.utk-shortcut-list__search {
+ flex-grow: 1;
+}
+
+/* 검색어 있을 때 텍스트가 버튼 뒤로 가리지 않도록 오른쪽 패딩 확보 */
+.utk-shortcut-list__search .unity-text-field__input {
+ padding-right: 28px;
+}
+
+.utk-shortcut-list__clear-btn {
+ width: 16px;
+ height: 16px;
+ min-width: 16px;
+ min-height: 16px;
+ border-width: 0;
+ margin: 0;
+ padding: 0;
+ align-self: center;
+ position: absolute;
+ right: 4px;
+}
+
+.utk-shortcut-list__search .unity-text-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-xs) var(--space-m);
+ font-size: var(--font-size-body2);
+ min-height: 28px;
+}
+
+.utk-shortcut-list__search:focus .unity-text-field__input {
+ border-color: var(--color-border-focus);
+}
+
+/* UTKInputField 내부 label 숨김 (placeholder 모드에서 label 없이 사용) */
+.utk-shortcut-list__search .unity-label {
+ display: none;
+ min-width: 0;
+ width: 0;
+ padding: 0;
+}
+
+/* =============================================
+ 컬럼 헤더 행
+ ============================================= */
+
+.utk-shortcut-list__header {
+ flex-direction: row;
+ align-items: center;
+ padding: var(--space-s) var(--space-m);
+ margin-top: var(--space-s);
+ border-bottom-width: 1px;
+ border-color: var(--color-border);
+}
+
+.utk-shortcut-list__header-command {
+ flex-grow: 1;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ -unity-font-style: bold;
+ overflow: hidden;
+ min-width: 0;
+}
+
+.utk-shortcut-list__header-modifier {
+ width: 52px;
+ flex-shrink: 0;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+ -unity-font-style: bold;
+}
+
+.utk-shortcut-list__header-key {
+ width: 90px;
+ flex-shrink: 0;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+ -unity-font-style: bold;
+}
+
+/* =============================================
+ UTKListView 컨테이너
+ ============================================= */
+
+.utk-shortcut-list__listview {
+ flex-grow: 1;
+ background-color: transparent;
+}
+
+/* ListView 자체의 테두리·배경 제거 (디자인 가이드: 패널 배경 사용) */
+.utk-shortcut-list__listview.utk-listview {
+ border-width: 0;
+ border-radius: 0;
+ background-color: transparent;
+}
+
+/* =============================================
+ 아이템 행 컨테이너
+ ============================================= */
+
+.utk-shortcut-list-item {
+ flex-direction: row;
+ align-items: center;
+ padding: 0 var(--space-m);
+ min-height: 36px;
+ flex-grow: 1;
+ border-bottom-width: 1px;
+ border-color: var(--color-border);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+}
+
+.utk-shortcut-list-item:hover {
+ background-color: var(--color-btn-hover);
+}
+
+/* =============================================
+ 아이템 – 명령 이름 레이블
+ ============================================= */
+
+.utk-shortcut-list-item__command {
+ flex-grow: 1;
+ min-width: 0;
+ overflow: hidden;
+}
+
+/* UTKLabel 내부 Label 텍스트 스타일 */
+.utk-shortcut-list-item__command .unity-label {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+}
+
+/* =============================================
+ 아이템 – 수정자 키 체크박스 (Ctrl / Shift / Alt)
+ ============================================= */
+
+.utk-shortcut-list-item__modifier {
+ width: 52px;
+ flex-shrink: 0;
+ justify-content: center;
+ align-items: center;
+ margin: 0;
+ padding: 0;
+}
+
+/* UTKCheckBox 내부 컨테이너를 중앙 정렬 */
+.utk-shortcut-list-item__modifier .utk-checkbox {
+ justify-content: center;
+ margin: 0;
+}
+
+/* 체크박스 레이블(텍스트) 숨김 – 헤더가 컬럼 레이블 역할을 담당 */
+.utk-shortcut-list-item__modifier .utk-checkbox__label {
+ display: none;
+}
+
+/* =============================================
+ 아이템 – 주요 키 입력 필드
+ ============================================= */
+
+.utk-shortcut-list-item__key {
+ width: 90px;
+ flex-shrink: 0;
+ margin: 0;
+ padding: 0;
+}
+
+/* UTKInputField label 숨김 */
+.utk-shortcut-list-item__key .unity-label {
+ display: none;
+ min-width: 0;
+ width: 0;
+ padding: 0;
+}
+
+/* 텍스트 입력 영역: 키 뱃지 스타일 */
+.utk-shortcut-list-item__key .unity-text-field__input {
+ background-color: var(--color-bg-secondary);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ -unity-text-align: middle-center;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ padding: 0 var(--space-s);
+ min-height: 24px;
+ cursor: link;
+ transition-duration: var(--anim-fast);
+ transition-property: border-color, background-color;
+}
+
+.utk-shortcut-list-item__key .unity-text-field__input:hover {
+ border-color: var(--color-border-focus);
+}
+
+/* 캡처 모드: 키 입력 대기 중 */
+.utk-shortcut-list-item__key--capturing .unity-text-field__input {
+ border-color: var(--color-border-focus);
+ background-color: var(--color-bg-input);
+ color: var(--color-text-secondary);
+}
+
+/* 텍스트 커서(caret) 숨김 – 읽기전용이므로 커서 불필요 */
+.utk-shortcut-list-item__key .unity-text-field__input > TextElement {
+ cursor: link;
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKShortcutListUss.uss.meta b/Assets/Resources/UIToolkit/List/UTKShortcutListUss.uss.meta
new file mode 100644
index 00000000..c71c8d73
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKShortcutListUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a9fafe6cd359d2c4899d36f1fb6ad99a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/List/UTKTreeListItem.uxml b/Assets/Resources/UIToolkit/List/UTKTreeListItem.uxml
new file mode 100644
index 00000000..7a986b38
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKTreeListItem.uxml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/List/UTKTreeListItem.uxml.meta b/Assets/Resources/UIToolkit/List/UTKTreeListItem.uxml.meta
new file mode 100644
index 00000000..15d51613
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKTreeListItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 87efc218ceca98347841e1e40ae18e7f
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/List/UTKTreeView.uss b/Assets/Resources/UIToolkit/List/UTKTreeView.uss
new file mode 100644
index 00000000..807fd62e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKTreeView.uss
@@ -0,0 +1,107 @@
+/*
+ * ===================================
+ * UTKTreeView.uss
+ * Unity TreeView 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-treeview {
+ flex-grow: 1;
+ background-color: var(--color-bg-secondary);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ Tree Items
+ =================================== */
+
+.utk-treeview .unity-tree-view__item {
+ padding: 0;
+ background-color: transparent;
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+}
+
+.utk-treeview .unity-tree-view__item:hover {
+ background-color: var(--color-btn-hover);
+}
+
+/* Unity TreeView uses unity-collection-view__item--selected class internally */
+.utk-treeview .unity-collection-view__item--selected,
+.utk-treeview .unity-tree-view__item--selected {
+ background-color: var(--color-btn-primary);
+}
+
+.utk-treeview .unity-collection-view__item--selected:hover,
+.utk-treeview .unity-tree-view__item--selected:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+/* ===================================
+ Toggle (Expand/Collapse)
+ =================================== */
+
+.utk-treeview .unity-tree-view__item-toggle {
+ width: 16px;
+ height: 16px;
+ -unity-background-image-tint-color: var(--color-text-secondary);
+ transition-duration: var(--anim-fast);
+ transition-property: rotate;
+}
+
+/* Override #unity-checkmark white color from UTKDefaultStyle.uss */
+.utk-treeview .unity-tree-view__item-toggle #unity-checkmark {
+ -unity-background-image-tint-color: var(--color-tree-checkmark);
+}
+
+.utk-treeview .unity-tree-view__item-toggle:hover #unity-checkmark {
+ -unity-background-image-tint-color: var(--color-tree-checkmark-hover);
+}
+
+.utk-treeview .unity-collection-view__item--selected .unity-tree-view__item-toggle,
+.utk-treeview .unity-tree-view__item--selected .unity-tree-view__item-toggle {
+ -unity-background-image-tint-color: var(--color-tree-checkmark-hover);
+}
+
+.utk-treeview .unity-collection-view__item--selected .unity-tree-view__item-toggle #unity-checkmark,
+.utk-treeview .unity-tree-view__item--selected .unity-tree-view__item-toggle #unity-checkmark {
+ -unity-background-image-tint-color: var(--color-tree-checkmark-hover);
+}
+
+/* ===================================
+ Indentation
+ =================================== */
+
+.utk-treeview .unity-tree-view__item-indents-container {
+ flex-direction: row;
+}
+
+.utk-treeview .unity-tree-view__item-indent {
+ width: 16px;
+}
+
+/* ===================================
+ Item Content
+ =================================== */
+
+.utk-treeview .unity-tree-view__item-content {
+ flex-direction: row;
+ align-items: center;
+ padding-right: var(--space-m);
+}
+
+.utk-treeview .unity-tree-view__item-content > .unity-label {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+}
+
+.utk-treeview .unity-collection-view__item--selected .unity-tree-view__item-content > .unity-label,
+.utk-treeview .unity-tree-view__item--selected .unity-tree-view__item-content > .unity-label {
+ color: var(--color-text-on-primary);
+}
diff --git a/Assets/Resources/UIToolkit/List/UTKTreeView.uss.meta b/Assets/Resources/UIToolkit/List/UTKTreeView.uss.meta
new file mode 100644
index 00000000..1b03c63f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/List/UTKTreeView.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7ef2b4606bf118044acc9a5234e19390
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Menu.meta b/Assets/Resources/UIToolkit/Menu.meta
new file mode 100644
index 00000000..6390afc7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 7f1d048442c47cc48ad2cb26f6cd97f4
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Menu/UTKMenuImageItem.uxml b/Assets/Resources/UIToolkit/Menu/UTKMenuImageItem.uxml
new file mode 100644
index 00000000..67592e23
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKMenuImageItem.uxml
@@ -0,0 +1,6 @@
+
+
+
diff --git a/Assets/Resources/UIToolkit/Menu/UTKMenuImageItem.uxml.meta b/Assets/Resources/UIToolkit/Menu/UTKMenuImageItem.uxml.meta
new file mode 100644
index 00000000..01641602
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKMenuImageItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6ffed7426014c8a4bb119007e0bbdae2
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Menu/UTKMenuImageItemUss.uss b/Assets/Resources/UIToolkit/Menu/UTKMenuImageItemUss.uss
new file mode 100644
index 00000000..ab44c0a8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKMenuImageItemUss.uss
@@ -0,0 +1,55 @@
+.menu-item {
+ padding-left: 0;
+ padding-right: 0;
+ width: 40px;
+ height: 40px;
+ border-width: 0;
+ background-color: transparent;
+ transition-property: background-color;
+ transition-duration: 0.2s;
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ margin: 0;
+}
+
+.menu-item:hover {
+ background-color: var(--color-bg-hover);
+}
+
+.menu-item:active {
+ background-color: var(--color-bg-active);
+}
+
+.menu-item:disabled {
+ opacity: 0.5;
+}
+
+.menu-item__icon {
+ -unity-font-style: normal;
+ font-size: 20px;
+ color: var(--color-text-primary);
+ -unity-text-align: middle-center;
+ flex-shrink: 0;
+}
+
+.menu-item__image {
+ width: 20px;
+ height: 20px;
+}
+
+.menu-item__arrow {
+ width: 0;
+ height: 0;
+ margin-left: auto;
+ border-left-width: 5px;
+ border-right-width: 5px;
+ border-top-width: 5px;
+ border-bottom-width: 5px;
+ border-left-color: var(--color-text-primary);
+ border-right-color: transparent;
+ border-top-color: transparent;
+ border-bottom-color: transparent;
+ flex-shrink: 0;
+ align-self: center;
+}
diff --git a/Assets/Resources/UIToolkit/Menu/UTKMenuImageItemUss.uss.meta b/Assets/Resources/UIToolkit/Menu/UTKMenuImageItemUss.uss.meta
new file mode 100644
index 00000000..172d3c45
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKMenuImageItemUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 62cac8dfd8f41d14b8bf1195de5e2cc8
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Menu/UTKMenuItem.uxml b/Assets/Resources/UIToolkit/Menu/UTKMenuItem.uxml
new file mode 100644
index 00000000..1ba90cc0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKMenuItem.uxml
@@ -0,0 +1,7 @@
+
+
+
diff --git a/Assets/Resources/UIToolkit/Menu/UTKMenuItem.uxml.meta b/Assets/Resources/UIToolkit/Menu/UTKMenuItem.uxml.meta
new file mode 100644
index 00000000..82603fb9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKMenuItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 18625630452b37a468a7deb385187c05
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Menu/UTKMenuItemUss.uss b/Assets/Resources/UIToolkit/Menu/UTKMenuItemUss.uss
new file mode 100644
index 00000000..e23e3bef
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKMenuItemUss.uss
@@ -0,0 +1,48 @@
+.menu-item {
+ padding-left: 12px;
+ padding-right: 12px;
+ height: 40px;
+ border-width: 0;
+ background-color: transparent;
+ transition-property: background-color;
+ transition-duration: 0.2s;
+ flex-direction: row;
+ align-items: center;
+ justify-content: flex-start;
+ margin: 0;
+}
+
+.menu-item:hover {
+ background-color: var(--color-bg-hover);
+}
+
+.menu-item:active {
+ background-color: var(--color-bg-active);
+}
+
+.menu-item:disabled {
+ opacity: 0.5;
+}
+
+.menu-item__label {
+ -unity-font-style: normal;
+ font-size: 14px;
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+.menu-item__arrow {
+ width: 0;
+ height: 0;
+ margin-left: auto;
+ border-left-width: 5px;
+ border-right-width: 5px;
+ border-top-width: 5px;
+ border-bottom-width: 5px;
+ border-left-color: var(--color-text-primary);
+ border-right-color: transparent;
+ border-top-color: transparent;
+ border-bottom-color: transparent;
+ flex-shrink: 0;
+ align-self: center;
+}
diff --git a/Assets/Resources/UIToolkit/Menu/UTKMenuItemUss.uss.meta b/Assets/Resources/UIToolkit/Menu/UTKMenuItemUss.uss.meta
new file mode 100644
index 00000000..1a35988c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKMenuItemUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6871fdccc61fab047bc39781b65546ac
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Menu/UTKSubMenuItem.uxml b/Assets/Resources/UIToolkit/Menu/UTKSubMenuItem.uxml
new file mode 100644
index 00000000..6b584606
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKSubMenuItem.uxml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/Assets/Resources/UIToolkit/Menu/UTKSubMenuItem.uxml.meta b/Assets/Resources/UIToolkit/Menu/UTKSubMenuItem.uxml.meta
new file mode 100644
index 00000000..033d1273
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKSubMenuItem.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: fd7d2115694c74b4ea118c851352ecb4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Menu/UTKSubMenuItemUss.uss b/Assets/Resources/UIToolkit/Menu/UTKSubMenuItemUss.uss
new file mode 100644
index 00000000..0d866ce8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKSubMenuItemUss.uss
@@ -0,0 +1,68 @@
+.submenu-item {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding-left: 16px;
+ padding-right: 16px;
+ padding-top: 8px;
+ padding-bottom: 8px;
+ min-width: 200px;
+ height: 32px;
+ border-width: 0;
+ background-color: var(--color-bg-primary);
+ margin: 0;
+}
+
+.submenu-item:hover {
+ background-color: var(--color-bg-hover);
+}
+
+.submenu-item:active {
+ background-color: var(--color-bg-active);
+}
+
+.submenu-item:disabled {
+ opacity: 0.5;
+}
+
+.submenu-item__label {
+ font-size: 14px;
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+ flex-shrink: 0;
+}
+
+.submenu-item__spacer {
+ flex-grow: 1;
+ min-width: 24px;
+}
+
+.submenu-item__shortcut {
+ font-size: 12px;
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-right;
+ flex-shrink: 0;
+}
+
+.submenu-item__arrow {
+ width: 0;
+ height: 0;
+ margin-left: 8px;
+ border-left-width: 5px;
+ border-right-width: 5px;
+ border-top-width: 5px;
+ border-bottom-width: 5px;
+ border-left-color: var(--color-text-primary);
+ border-right-color: transparent;
+ border-top-color: transparent;
+ border-bottom-color: transparent;
+ flex-shrink: 0;
+}
+
+/* 구분선 스타일 */
+.submenu-separator {
+ height: 1px;
+ background-color: var(--color-border);
+ margin-top: 4px;
+ margin-bottom: 4px;
+}
diff --git a/Assets/Resources/UIToolkit/Menu/UTKSubMenuItemUss.uss.meta b/Assets/Resources/UIToolkit/Menu/UTKSubMenuItemUss.uss.meta
new file mode 100644
index 00000000..e227c601
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKSubMenuItemUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: bf6082681da1aa34a84eb0ee95c92062
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Menu/UTKTopMenu.uxml b/Assets/Resources/UIToolkit/Menu/UTKTopMenu.uxml
new file mode 100644
index 00000000..5115ee81
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKTopMenu.uxml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/Assets/Resources/UIToolkit/Menu/UTKTopMenu.uxml.meta b/Assets/Resources/UIToolkit/Menu/UTKTopMenu.uxml.meta
new file mode 100644
index 00000000..1be112fc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKTopMenu.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 22005f651aee4e2449797387a6890b5a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Menu/UTKTopMenuUss.uss b/Assets/Resources/UIToolkit/Menu/UTKTopMenuUss.uss
new file mode 100644
index 00000000..60d802a0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKTopMenuUss.uss
@@ -0,0 +1,35 @@
+.top-menu {
+ position: relative;
+ flex-direction: column;
+ width: 100%;
+ height: 100%;
+ background-color: transparent;
+}
+
+.top-menu__items {
+ flex-direction: row;
+ height: 40px;
+ background-color: var(--color-bg-primary);
+ border-bottom-width: 1px;
+ border-bottom-color: var(--color-border);
+}
+
+/* 세로 정렬 메뉴 */
+.top-menu__items--vertical {
+ flex-direction: column;
+ height: auto;
+ width: auto;
+ background-color: var(--color-bg-primary);
+ border-right-width: 1px;
+ border-right-color: var(--color-border);
+}
+
+/* 하위 메뉴 컨테이너 스타일 */
+.submenu-container {
+ position: absolute;
+ background-color: var(--color-bg-primary);
+ border-width: 1px;
+ border-color: var(--color-border);
+ min-width: 200px;
+ padding: 4px 0;
+}
diff --git a/Assets/Resources/UIToolkit/Menu/UTKTopMenuUss.uss.meta b/Assets/Resources/UIToolkit/Menu/UTKTopMenuUss.uss.meta
new file mode 100644
index 00000000..9ec205e5
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Menu/UTKTopMenuUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 61573ee2ffda4e840b52e48e36d21206
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Modal.meta b/Assets/Resources/UIToolkit/Modal.meta
new file mode 100644
index 00000000..8cd3bc7c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6efcdba06c0bdaa43a85c917cbaf193c
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Modal/UTKAlert.uss b/Assets/Resources/UIToolkit/Modal/UTKAlert.uss
new file mode 100644
index 00000000..00af26cd
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKAlert.uss
@@ -0,0 +1,102 @@
+/*
+ * ===================================
+ * UTKAlert.uss
+ * Alert 팝업 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-alert {
+ flex-direction: column;
+ min-width: 280px;
+ max-width: 400px;
+ padding-top: var(--space-m);
+ padding-left: var(--space-xl);
+ padding-right: var(--space-xl);
+ padding-bottom: var(--space-xl);
+ background-color: var(--color-bg-modal);
+ border-radius: var(--radius-l);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ Title (상단 왼쪽)
+ =================================== */
+
+.utk-alert__title {
+ font-size: var(--font-size-h3);
+ color: var(--color-text-primary);
+ -unity-font-style: bold;
+ -unity-text-align: middle-left;
+ margin: 0;
+ padding: 0;
+ align-self: flex-start;
+}
+
+/* ===================================
+ Content (가운데)
+ =================================== */
+
+.utk-alert__content {
+ flex-direction: column;
+ align-items: stretch;
+ flex-grow: 1;
+ margin-top: var(--space-xxl);
+ margin-bottom: var(--space-xxl);
+}
+
+/* ===================================
+ Message (가운데)
+ =================================== */
+
+.utk-alert__message {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-left;
+ white-space: normal;
+}
+
+/* ===================================
+ Buttons
+ =================================== */
+
+.utk-alert__buttons {
+ flex-direction: row;
+ justify-content: flex-end;
+}
+
+.utk-alert__buttons .last-child {
+ margin-left: var(--space-s);
+}
+
+.utk-alert__btn {
+ min-width: 80px;
+}
+
+/* ===================================
+ Type Variants - Title Color
+ =================================== */
+
+.utk-alert--info .utk-alert__title {
+ color: var(--color-text-primary);
+}
+
+.utk-alert--success .utk-alert__title {
+ color: var(--color-state-success);
+}
+
+.utk-alert--warning .utk-alert__title {
+ color: var(--color-state-warning);
+}
+
+.utk-alert--error .utk-alert__title {
+ color: var(--color-state-error);
+}
+
+.utk-alert--confirm .utk-alert__title {
+ color: var(--color-text-primary);
+}
diff --git a/Assets/Resources/UIToolkit/Modal/UTKAlert.uss.meta b/Assets/Resources/UIToolkit/Modal/UTKAlert.uss.meta
new file mode 100644
index 00000000..42dabe36
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKAlert.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7abc80fd54e4cbe4b81e83c23a5de327
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uss b/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uss
new file mode 100644
index 00000000..90dd1071
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uss
@@ -0,0 +1,237 @@
+/* UTKColorPicker.uss - 컬러 피커 스타일 (테마 변수 사용) */
+
+/* ===================================
+ Root Container
+ =================================== */
+.utk-color-picker {
+ position: absolute;
+ background-color: var(--color-bg-modal);
+ border-radius: var(--radius-m);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ padding-top: var(--space-s);
+ padding-left: var(--space-l);
+ padding-right: var(--space-l);
+ padding-bottom: var(--space-l);
+ width: 320px;
+}
+
+/* ===================================
+ Header
+ =================================== */
+.utk-color-picker__header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: var(--space-l);
+ cursor: move;
+}
+
+.utk-color-picker__title {
+ font-size: var(--font-size-h3);
+ -unity-font-style: bold;
+ color: var(--color-text-primary);
+}
+
+.utk-color-picker__close-btn {
+ width: var(--size-icon-btn);
+ height: var(--size-icon-btn);
+ font-size: var(--font-size-body2);
+ background-color: transparent;
+ border-width: 0;
+ color: var(--color-text-secondary);
+ border-radius: var(--radius-full);
+ margin: 0;
+ padding: 10px;
+}
+
+.utk-color-picker__close-btn:hover {
+ color: var(--color-text-primary);
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+/* ===================================
+ Color Area
+ =================================== */
+.utk-color-picker__color-area {
+ flex-direction: row;
+ margin-bottom: 15px;
+}
+
+/* ===================================
+ SV Box (Saturation/Value)
+ =================================== */
+.utk-color-picker__sv-box {
+ width: 200px;
+ height: 200px;
+ margin-right: var(--space-m);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ /* 배경색은 C# 코드에서 동적으로 설정 */
+}
+
+.utk-color-picker__sv-indicator {
+ position: absolute;
+ width: 12px;
+ height: 12px;
+ border-radius: 6px;
+ border-width: 2px;
+ border-color: white;
+ background-color: transparent;
+}
+
+/* ===================================
+ Right Column (Hue + Preview)
+ =================================== */
+.utk-color-picker__right-column {
+ flex-grow: 1;
+ flex-direction: column;
+}
+
+/* ===================================
+ Hue Bar
+ =================================== */
+.utk-color-picker__hue-bar {
+ width: 25px;
+ height: 150px;
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ margin-bottom: var(--space-m);
+ /* 배경 텍스처는 C# 코드에서 동적으로 설정 */
+}
+
+.utk-color-picker__hue-indicator {
+ position: absolute;
+ left: -2px;
+ right: -2px;
+ height: 4px;
+ background-color: white;
+ border-radius: var(--radius-s);
+}
+
+/* ===================================
+ Preview Container
+ =================================== */
+.utk-color-picker__preview-container {
+ flex-direction: row;
+ height: 40px;
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+}
+
+.utk-color-picker__preview-current {
+ flex-grow: 1;
+ border-top-left-radius: 1px;
+ border-bottom-left-radius: 1px;
+}
+
+.utk-color-picker__preview-original {
+ flex-grow: 1;
+ border-top-right-radius: 1px;
+ border-bottom-right-radius: 1px;
+}
+
+/* ===================================
+ Slider Rows
+ =================================== */
+.utk-color-picker__slider-row {
+ flex-direction: row;
+ align-items: center;
+ margin-top: var(--space-s);
+}
+
+.utk-color-picker__slider-label {
+ width: 20px;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+}
+
+.utk-color-picker__slider {
+ flex-grow: 1;
+ margin-left: var(--space-s);
+ margin-right: var(--space-s);
+}
+
+/* Slider 트랙 스타일 */
+.utk-color-picker__slider .unity-base-slider__tracker {
+ background-color: var(--color-bg-input);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ height: 12px;
+ margin-top: -4px;
+}
+
+/* Slider 드래거 스타일 */
+.utk-color-picker__slider .unity-base-slider__dragger {
+ background-color: var(--color-btn-primary);
+ border-radius: var(--radius-s);
+}
+
+.utk-color-picker__slider .unity-base-slider__dragger:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+.utk-color-picker__slider-field {
+ width: 50px;
+ font-size: var(--font-size-body2);
+}
+
+/* IntegerField 내부 input 스타일 (Unity의 BaseField 구조) */
+.utk-color-picker__slider-field .unity-base-text-field__input {
+ background-color: var(--color-bg-input);
+ color: var(--color-text-primary);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ padding: 2px 4px;
+}
+
+/* ===================================
+ Hex Row
+ =================================== */
+.utk-color-picker__hex-row {
+ flex-direction: row;
+ align-items: center;
+ margin-top: var(--space-m);
+}
+
+.utk-color-picker__hex-label {
+ width: 40px;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+}
+
+.utk-color-picker__hex-field {
+ flex-grow: 1;
+}
+
+/* TextField 내부 input 스타일 (Unity의 BaseField 구조) */
+.utk-color-picker__hex-field .unity-base-text-field__input {
+ background-color: var(--color-bg-input);
+ color: var(--color-text-primary);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ padding: 2px 6px;
+}
+
+/* ===================================
+ Button Row
+ =================================== */
+.utk-color-picker__button-row {
+ flex-direction: row;
+ justify-content: flex-end;
+ margin-top: 15px;
+}
+
+/* UTKButton은 자체 스타일을 가지므로 마진/크기만 설정 */
+.utk-color-picker__cancel-btn {
+ margin-right: var(--space-m);
+}
+
+.utk-color-picker__confirm-btn {
+ /* UTKButton Primary 스타일 사용 */
+}
diff --git a/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uss.meta b/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uss.meta
new file mode 100644
index 00000000..97d98182
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7ae6523e61765d84caaec92e84dcc017
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uxml b/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uxml
new file mode 100644
index 00000000..dec789e7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uxml
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uxml.meta b/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uxml.meta
new file mode 100644
index 00000000..74aa8e75
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKColorPicker.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 40262d70405954948964edafa2ed92c6
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Modal/UTKDatePicker.uss b/Assets/Resources/UIToolkit/Modal/UTKDatePicker.uss
new file mode 100644
index 00000000..4de20a9a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKDatePicker.uss
@@ -0,0 +1,346 @@
+/*
+ * ===================================
+ * UTKDatePicker.uss
+ * 날짜 피커 모달 스타일
+ * ===================================
+ *
+ * 테마 변수를 사용하여 Light/Dark 테마를 지원합니다.
+ * 색상 변수는 UTKThemeDark.uss / UTKThemeLight.uss에서 정의됩니다.
+ */
+
+/* ===================================
+ Root Container
+ =================================== */
+
+.utk-date-picker {
+ position: absolute;
+ background-color: var(--color-bg-modal);
+ border-radius: var(--radius-l);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ padding-top: var(--space-s);
+ padding-left: var(--space-l);
+ padding-right: var(--space-l);
+ padding-bottom: var(--space-l);
+ min-width: 300px;
+}
+
+/* ===================================
+ Header
+ =================================== */
+
+.utk-date-picker__header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: var(--space-l);
+ cursor: move;
+}
+
+.utk-date-picker__title {
+ font-size: var(--font-size-h3);
+ -unity-font-style: bold;
+ color: var(--color-text-primary);
+}
+
+.utk-date-picker__close-btn {
+ width: var(--size-icon-btn);
+ height: var(--size-icon-btn);
+ font-size: var(--font-size-body2);
+ background-color: transparent;
+ border-width: 0;
+ color: var(--color-text-secondary);
+ border-radius: var(--radius-full);
+ margin: 0;
+ padding: 10px;
+}
+
+.utk-date-picker__close-btn:hover {
+ color: var(--color-text-primary);
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+/* ===================================
+ Navigation Row
+ =================================== */
+
+.utk-date-picker__nav-row {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: var(--space-m);
+}
+
+.utk-date-picker__nav-group {
+ flex-direction: row;
+}
+
+.utk-date-picker__nav-btn {
+ width: var(--size-nav-btn);
+ height: var(--size-nav-btn);
+ background-color: var(--color-btn-normal);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ color: var(--color-text-primary);
+ font-size: var(--font-size-h2);
+}
+
+.utk-date-picker__nav-btn:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-date-picker__nav-btn:active {
+ background-color: var(--color-btn-pressed);
+}
+
+.utk-date-picker__nav-btn--prev-year {
+ margin-right: var(--space-s);
+}
+
+.utk-date-picker__nav-btn--next-year {
+ margin-left: var(--space-s);
+}
+
+.utk-date-picker__year-month-label {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-body1);
+ -unity-text-align: middle-center;
+ -unity-font-style: bold;
+}
+
+/* ===================================
+ Weekday Header
+ =================================== */
+
+.utk-date-picker__day-names {
+ flex-direction: row;
+ margin-bottom: var(--space-s);
+ padding-bottom: var(--space-s);
+ border-bottom-width: var(--border-width);
+ border-bottom-color: var(--color-border);
+}
+
+.utk-date-picker__day-name {
+ flex-grow: 1;
+ flex-basis: 0;
+ -unity-text-align: middle-center;
+ font-size: var(--font-size-label3);
+ color: var(--color-text-secondary);
+}
+
+.utk-date-picker__day-name--sunday {
+ color: var(--color-calendar-sunday);
+}
+
+.utk-date-picker__day-name--saturday {
+ color: var(--color-calendar-saturday);
+}
+
+/* ===================================
+ Calendar Grid
+ =================================== */
+
+.utk-date-picker__calendar-row {
+ flex-direction: row;
+}
+
+.utk-date-picker__day-btn {
+ flex-grow: 1;
+ flex-basis: 0;
+ height: 28px;
+ margin-top: 1px;
+ margin-bottom: 1px;
+ font-size: var(--font-size-body2);
+ border-width: 0;
+ border-radius: var(--radius-s);
+ background-color: transparent;
+ color: var(--color-text-primary);
+}
+
+.utk-date-picker__day-btn:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+.utk-date-picker__day-btn:disabled {
+ color: var(--color-text-disabled);
+}
+
+.utk-date-picker__day-btn--sunday {
+ color: var(--color-calendar-sunday);
+}
+
+.utk-date-picker__day-btn--saturday {
+ color: var(--color-calendar-saturday);
+}
+
+.utk-date-picker__day-btn--today {
+ color: var(--color-calendar-today);
+ -unity-font-style: bold;
+}
+
+.utk-date-picker__day-btn--selected {
+ background-color: var(--color-calendar-selected);
+ color: var(--color-text-on-primary);
+ -unity-font-style: bold;
+}
+
+.utk-date-picker__day-btn--selected:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+.utk-date-picker__day-btn--other-month {
+ color: var(--color-text-disabled);
+}
+
+/* ===================================
+ Date Range Selection Styles
+ =================================== */
+
+.utk-date-picker__day-btn--range-start {
+ background-color: var(--color-calendar-selected);
+ color: var(--color-text-on-primary);
+ -unity-font-style: bold;
+ border-top-left-radius: var(--radius-s);
+ border-bottom-left-radius: var(--radius-s);
+ border-top-right-radius: 0;
+ border-bottom-right-radius: 0;
+}
+
+.utk-date-picker__day-btn--range-start:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+.utk-date-picker__day-btn--range-end {
+ background-color: var(--color-calendar-selected);
+ color: var(--color-text-on-primary);
+ -unity-font-style: bold;
+ border-top-left-radius: 0;
+ border-bottom-left-radius: 0;
+ border-top-right-radius: var(--radius-s);
+ border-bottom-right-radius: var(--radius-s);
+}
+
+.utk-date-picker__day-btn--range-end:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+/* 시작일과 종료일이 같은 경우 */
+.utk-date-picker__day-btn--range-start.utk-date-picker__day-btn--range-end {
+ border-radius: var(--radius-s);
+}
+
+.utk-date-picker__day-btn--in-range {
+ background-color: var(--color-calendar-range);
+ color: var(--color-text-primary);
+ border-radius: 0;
+}
+
+.utk-date-picker__day-btn--in-range:hover {
+ background-color: var(--color-calendar-range-hover);
+}
+
+/* ===================================
+ Range Info Label
+ =================================== */
+
+.utk-date-picker__range-info {
+ margin-top: var(--space-l);
+ padding-top: var(--space-l);
+ border-top-width: var(--border-width);
+ border-top-color: var(--color-border);
+ background-color: var(--color-bg-secondary);
+ border-radius: var(--radius-s);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+}
+
+/* ===================================
+ Time Picker Row
+ =================================== */
+
+.utk-date-picker__time-row {
+ flex-direction: row;
+ align-items: center;
+ justify-content: center;
+ margin-top: var(--space-l);
+ padding-top: var(--space-l);
+ border-top-width: var(--border-width);
+ border-top-color: var(--color-border);
+}
+
+.utk-date-picker__time-label {
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-body2);
+ margin-right: var(--space-m);
+}
+
+.utk-date-picker__time-stepper {
+ width: 70px;
+ height: var(--size-input-height);
+}
+
+.utk-date-picker__time-separator {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-body2);
+ margin-left: 5px;
+ margin-right: 5px;
+}
+
+/* ===================================
+ Button Row
+ =================================== */
+
+.utk-date-picker__button-row {
+ flex-direction: row;
+ justify-content: flex-end;
+ margin-top: 22px;
+}
+
+.utk-date-picker__cancel-btn {
+ margin-right: var(--space-m);
+ width: var(--size-btn-min-width);
+ height: var(--size-btn-height);
+ font-size: var(--font-size-body2);
+ background-color: var(--color-btn-normal);
+ color: var(--color-text-primary);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+}
+
+.utk-date-picker__cancel-btn:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-date-picker__confirm-btn {
+ width: var(--size-btn-min-width);
+ height: var(--size-btn-height);
+ font-size: var(--font-size-body2);
+ background-color: var(--color-btn-primary);
+ color: var(--color-text-on-primary);
+ border-width: 0;
+ border-radius: var(--radius-s);
+}
+
+.utk-date-picker__confirm-btn:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+.utk-date-picker__today-btn {
+ margin-right: auto;
+ width: 60px;
+ height: var(--size-btn-height);
+ background-color: transparent;
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-m);
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-label3);
+}
+
+.utk-date-picker__today-btn:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+ color: var(--color-text-primary);
+}
diff --git a/Assets/Resources/UIToolkit/Modal/UTKDatePicker.uss.meta b/Assets/Resources/UIToolkit/Modal/UTKDatePicker.uss.meta
new file mode 100644
index 00000000..ad090f4c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKDatePicker.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cbbed4896e3757b45b89e62ac9df576e
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss b/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss
new file mode 100644
index 00000000..925f6b9c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss
@@ -0,0 +1,16 @@
+/*
+ * ===================================
+ * UTKLoadingUss.uss
+ * 회전 로딩 스피너 스타일
+ * ===================================
+ *
+ * 색상은 C#에서 CustomStyleResolvedEvent로 --color-primary 값을 읽어 처리합니다.
+ * 두께/크기는 C# 속성(Thickness, Size) 또는 UXML 태그(thickness, size)로 설정하세요.
+ */
+
+.utk-loading {
+ align-items: center;
+ justify-content: center;
+ flex-shrink: 0;
+ overflow: hidden;
+}
diff --git a/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss.meta b/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss.meta
new file mode 100644
index 00000000..774739d3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKLoadingUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 21b7e91639030834c94d38263ad773ae
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Modal/UTKModal.uss b/Assets/Resources/UIToolkit/Modal/UTKModal.uss
new file mode 100644
index 00000000..64e832fd
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKModal.uss
@@ -0,0 +1,126 @@
+/*
+ * ===================================
+ * UTKModal.uss
+ * 모달 창 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-modal {
+ flex-direction: column;
+ background-color: var(--color-bg-modal);
+ border-radius: var(--radius-l);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ overflow: hidden;
+}
+
+/* ===================================
+ Size Variants
+ =================================== */
+
+.utk-modal--small {
+ width: 320px;
+ max-height: 400px;
+}
+
+.utk-modal--medium {
+ width: 480px;
+ max-height: 600px;
+}
+
+.utk-modal--large {
+ width: 800px;
+ height: 600px;
+ max-height: 800px;
+}
+
+.utk-modal--fullscreen {
+ width: 90%;
+ height: 90%;
+ max-width: none;
+ max-height: none;
+}
+
+/* ===================================
+ Header
+ =================================== */
+
+.utk-modal__header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: var(--space-m) var(--space-l);
+ border-bottom-width: var(--border-width);
+ border-bottom-color: var(--color-border);
+}
+
+/* ===================================
+ Title
+ =================================== */
+
+.utk-modal__title {
+ font-size: var(--font-size-h3);
+ color: var(--color-text-primary);
+ -unity-font-style: bold;
+}
+
+/* ===================================
+ Close Button
+ =================================== */
+
+.utk-modal__close-btn {
+ width: var(--size-icon-btn);
+ height: var(--size-icon-btn);
+ background-color: transparent;
+ border-width: 0;
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-body2);
+ border-radius: var(--radius-s);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color, color;
+}
+
+.utk-modal__close-btn:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Content
+ =================================== */
+
+.utk-modal__content {
+ flex-grow: 1;
+ padding: var(--space-l);
+ overflow: scroll;
+}
+
+.utk-modal__content {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-body1);
+}
+
+/* ===================================
+ Footer
+ =================================== */
+
+.utk-modal__footer {
+ flex-direction: row;
+ justify-content: flex-end;
+ align-items: center;
+ padding: var(--space-m) var(--space-l);
+ border-top-width: 0;
+ border-top-color: var(--color-border);
+}
+
+.utk-modal__footer--has-children {
+ border-top-width: var(--border-width);
+}
+
+.utk-modal__footer .last-child {
+ margin-left: var(--space-s);
+}
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Modal/UTKModal.uss.meta b/Assets/Resources/UIToolkit/Modal/UTKModal.uss.meta
new file mode 100644
index 00000000..640f73c6
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKModal.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dea65574cc82b744db024a1db4622c80
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Modal/UTKModalBlocker.uss b/Assets/Resources/UIToolkit/Modal/UTKModalBlocker.uss
new file mode 100644
index 00000000..49fa10a9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKModalBlocker.uss
@@ -0,0 +1,12 @@
+/* UTKModalBlocker.uss - 모달 블로커 스타일 */
+
+.utk-modal-blocker {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ background-color: rgba(0, 0, 0, 0.7);
+ transition-duration: 200ms;
+ transition-property: background-color;
+}
diff --git a/Assets/Resources/UIToolkit/Modal/UTKModalBlocker.uss.meta b/Assets/Resources/UIToolkit/Modal/UTKModalBlocker.uss.meta
new file mode 100644
index 00000000..7ef3beb2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKModalBlocker.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c5a92ce2e45c3854f92c937cff83bed6
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Modal/UTKNotification.uss b/Assets/Resources/UIToolkit/Modal/UTKNotification.uss
new file mode 100644
index 00000000..3a846328
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKNotification.uss
@@ -0,0 +1,137 @@
+/*
+ * ===================================
+ * UTKNotification.uss
+ * 알림 창 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-notification {
+ flex-direction: column;
+ width: 320px;
+ padding: var(--space-m);
+ background-color: var(--color-bg-modal);
+ border-radius: var(--radius-m);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ Type Variants
+ =================================== */
+
+.utk-notification--info {
+ border-left-width: 4px;
+ border-left-color: var(--color-state-info);
+}
+
+.utk-notification--success {
+ border-left-width: 4px;
+ border-left-color: var(--color-state-success);
+}
+
+.utk-notification--warning {
+ border-left-width: 4px;
+ border-left-color: var(--color-state-warning);
+}
+
+.utk-notification--error {
+ border-left-width: 4px;
+ border-left-color: var(--color-state-error);
+}
+
+/* ===================================
+ Header
+ =================================== */
+
+.utk-notification__header {
+ flex-direction: row;
+ align-items: center;
+ margin-bottom: var(--space-s);
+}
+
+/* ===================================
+ Icon
+ =================================== */
+
+.utk-notification__icon {
+ width: 20px;
+ height: 20px;
+ margin-right: var(--space-s);
+ font-size: 14px;
+ -unity-text-align: middle-center;
+}
+
+.utk-notification--info .utk-notification__icon {
+ color: var(--color-state-info);
+}
+
+.utk-notification--success .utk-notification__icon {
+ color: var(--color-state-success);
+}
+
+.utk-notification--warning .utk-notification__icon {
+ color: var(--color-state-warning);
+}
+
+.utk-notification--error .utk-notification__icon {
+ color: var(--color-state-error);
+}
+
+/* ===================================
+ Title
+ =================================== */
+
+.utk-notification__title {
+ flex-grow: 1;
+ font-size: var(--font-size-body1);
+ color: var(--color-text-primary);
+ -unity-font-style: bold;
+}
+
+/* ===================================
+ Close Button
+ =================================== */
+
+.utk-notification__close-btn {
+ width: 16px;
+ height: 16px;
+ background-color: transparent;
+ border-width: 0;
+ color: var(--color-text-secondary);
+ font-size: 10px;
+ border-radius: var(--radius-s);
+}
+
+.utk-notification__close-btn:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Message
+ =================================== */
+
+.utk-notification__message {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ white-space: normal;
+ margin-bottom: var(--space-s);
+}
+
+/* ===================================
+ Actions
+ =================================== */
+
+.utk-notification__actions {
+ flex-direction: row;
+ justify-content: flex-end;
+ margin-top: var(--space-s);
+}
+
+.utk-notification__actions .last-child {
+ margin-left: var(--space-s);
+}
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Modal/UTKNotification.uss.meta b/Assets/Resources/UIToolkit/Modal/UTKNotification.uss.meta
new file mode 100644
index 00000000..a1241e7f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKNotification.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 54de9d31de2dc2e4ab6f6937f4563a4b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Modal/UTKPanel.uss b/Assets/Resources/UIToolkit/Modal/UTKPanel.uss
new file mode 100644
index 00000000..cb678cdc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKPanel.uss
@@ -0,0 +1,138 @@
+/*
+ * ===================================
+ * UTKPanel.uss
+ * 패널 컨테이너 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-panel {
+ flex-direction: column;
+ background-color: var(--color-bg-panel);
+ border-radius: var(--radius-m);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ overflow: hidden;
+}
+
+/* ===================================
+ Variants
+ =================================== */
+
+.utk-panel--default {
+ background-color: var(--color-bg-panel);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+.utk-panel--elevated {
+ background-color: var(--color-bg-panel);
+ border-width: var(--border-width);
+ border-color: var(--color-border-light);
+ /* Unity USS는 box-shadow 미지원, 테두리로 입체감 표현 */
+ border-right-width: 2px;
+ border-bottom-width: 2px;
+ border-right-color: rgba(0, 0, 0, 0.4);
+ border-bottom-color: rgba(0, 0, 0, 0.4);
+
+}
+
+.utk-panel--outlined {
+ background-color: transparent;
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+.utk-panel--flat {
+ background-color: transparent;
+ border-width: 0;
+}
+
+/* ===================================
+ Header
+ =================================== */
+
+.utk-panel__header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: var(--space-m) var(--space-l);
+ border-bottom-width: var(--border-width);
+ border-bottom-color: var(--color-border);
+}
+
+.utk-panel--flat .utk-panel__header {
+ border-bottom-width: 0;
+}
+
+.utk-panel--collapsible .utk-panel__header {
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+.utk-panel--collapsible .utk-panel__header:hover {
+ background-color: rgba(255, 255, 255, 0.05);
+}
+
+/* ===================================
+ Title
+ =================================== */
+
+.utk-panel__title {
+ font-size: var(--font-size-label1);
+ color: var(--color-text-primary);
+ -unity-font-style: bold;
+ flex-grow: 1;
+}
+
+/* ===================================
+ Header Actions
+ =================================== */
+
+.utk-panel__header-actions {
+ flex-direction: row;
+ align-items: center;
+}
+
+/* ===================================
+ Content
+ =================================== */
+
+.utk-panel__content {
+ flex-grow: 1;
+ padding: var(--space-l);
+}
+
+/* Content 내부 Label 텍스트 스타일 */
+.utk-panel__content-label {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary);
+ margin-bottom: var(--space-s);
+}
+
+.utk-panel--collapsed .utk-panel__content {
+ display: none;
+}
+
+/* ===================================
+ Footer
+ =================================== */
+
+.utk-panel__footer {
+ flex-direction: row;
+ justify-content: flex-end;
+ align-items: center;
+ padding: var(--space-m) var(--space-l);
+ border-top-width: var(--border-width);
+ border-top-color: var(--color-border);
+}
+
+.utk-panel--flat .utk-panel__footer {
+ border-top-width: 0;
+}
+
+.utk-panel--collapsed .utk-panel__footer {
+ display: none;
+}
diff --git a/Assets/Resources/UIToolkit/Modal/UTKPanel.uss.meta b/Assets/Resources/UIToolkit/Modal/UTKPanel.uss.meta
new file mode 100644
index 00000000..a3d73b84
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKPanel.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 2c1cfb237fa5a2b448b6cb4f272a918d
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Modal/UTKToast.uss b/Assets/Resources/UIToolkit/Modal/UTKToast.uss
new file mode 100644
index 00000000..62efd084
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKToast.uss
@@ -0,0 +1,72 @@
+/*
+ * ===================================
+ * UTKToast.uss
+ * 토스트 알림 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-toast {
+ flex-direction: row;
+ align-items: center;
+ padding: var(--space-m) var(--space-l);
+ background-color: var(--color-bg-tooltip);
+ border-radius: var(--radius-m);
+ min-width: 200px;
+ max-width: 400px;
+}
+
+/* ===================================
+ Type Variants - Message Color
+ Toast는 항상 어두운 배경을 사용하므로 밝은 색상 직접 지정
+ =================================== */
+
+.utk-toast--info .utk-toast__message {
+ color: #FFFFFF;
+}
+
+.utk-toast--success .utk-toast__message {
+ color: #4CAF50;
+}
+
+.utk-toast--warning .utk-toast__message {
+ color: #FFB74D;
+}
+
+.utk-toast--error .utk-toast__message {
+ color: #EF5350;
+}
+
+/* ===================================
+ Message
+ =================================== */
+
+.utk-toast__message {
+ flex-grow: 1;
+ font-size: var(--font-size-body2);
+ color: #FFFFFF;
+ white-space: normal;
+}
+
+/* ===================================
+ Close Button
+ =================================== */
+
+.utk-toast__close-btn {
+ width: 16px;
+ height: 16px;
+ margin-left: var(--space-m);
+ background-color: transparent;
+ border-width: 0;
+ color: var(--color-text-secondary);
+ font-size: 10px;
+ border-radius: var(--radius-s);
+}
+
+.utk-toast__close-btn:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+ color: var(--color-text-primary);
+}
diff --git a/Assets/Resources/UIToolkit/Modal/UTKToast.uss.meta b/Assets/Resources/UIToolkit/Modal/UTKToast.uss.meta
new file mode 100644
index 00000000..116c0b0c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Modal/UTKToast.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9248b856a8f7b9d4f9bccbb6e7ca5df6
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property.meta b/Assets/Resources/UIToolkit/Property.meta
new file mode 100644
index 00000000..2d69f621
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: eeaca9ed10799e14790c67f788530585
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Property/Views.meta b/Assets/Resources/UIToolkit/Property/Views.meta
new file mode 100644
index 00000000..2746d6c7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 74e5838a31947554e89b6fc883475108
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemView.uxml
new file mode 100644
index 00000000..e7f7eb15
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemView.uxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemView.uxml.meta
new file mode 100644
index 00000000..2fa755e8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 8540488a78729f94eb298368c77df2e2
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemViewUss.uss
new file mode 100644
index 00000000..1ed8a7eb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemViewUss.uss
@@ -0,0 +1,28 @@
+/*
+ * UTKBoolPropertyItemViewUss.uss
+ * Bool PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--bool {
+ /* Bool View 전용 스타일 */
+}
+
+/* 기본 상태: Toggle 표시, state-label 숨김 */
+.utk-property-item-view--bool .utk-property-item-view__toggle {
+ flex-grow: 0;
+ display: flex;
+}
+
+.utk-property-item-view--bool .utk-property-item-view__state-label {
+ flex-grow: 1;
+ display: none;
+}
+
+/* ReadOnly 상태: Toggle 숨김, state-label 표시 */
+.utk-property-item-view--bool.utk-property-item-view--readonly .utk-property-item-view__toggle {
+ display: none;
+}
+
+.utk-property-item-view--bool.utk-property-item-view--readonly .utk-property-item-view__state-label {
+ display: flex;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..b84db226
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKBoolPropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7b3aa21b75ff66945bc3813ca86d6154
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemView.uxml
new file mode 100644
index 00000000..336994eb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemView.uxml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemView.uxml.meta
new file mode 100644
index 00000000..f6e050e7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: d9772db144ccd284ea63c1b71dae6711
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemViewUss.uss
new file mode 100644
index 00000000..67010e87
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemViewUss.uss
@@ -0,0 +1,23 @@
+/*
+ * UTKButtonItemViewUss.uss
+ * Button PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--button {
+ /* Button View 전용 스타일 */
+}
+
+.utk-property-item-view--button .utk-property-item-view__button {
+ flex-grow: 1;
+ margin-left: 0;
+ margin-right: 0;
+}
+
+/* 라벨이 없는 경우 - 버튼이 전체 너비 사용 */
+.utk-property-item-view--button-no-label .utk-property-item-view__label {
+ display: none;
+}
+
+.utk-property-item-view--button-no-label .utk-property-item-view__value {
+ flex-grow: 1;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemViewUss.uss.meta
new file mode 100644
index 00000000..072ee221
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKButtonItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 98488360e849b8c4b91bba3629e93b50
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemView.uxml
new file mode 100644
index 00000000..e892abc2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemView.uxml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemView.uxml.meta
new file mode 100644
index 00000000..83351991
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 8150d934df659094494bd7f959d09a9c
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemViewUss.uss
new file mode 100644
index 00000000..a252cd44
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemViewUss.uss
@@ -0,0 +1,23 @@
+/*
+ * UTKColorPropertyItemViewUss.uss
+ * Color PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--color {
+ /* Color View 전용 스타일 */
+}
+
+.utk-property-item-view--color .utk-property-item-view__color-preview {
+ width: 24px;
+ height: 24px;
+ border-radius: 4px;
+ border-width: 1px;
+ border-color: rgba(255, 255, 255, 0.2);
+ margin-right: 8px;
+}
+
+.utk-property-item-view--color .utk-property-item-view__picker-btn {
+ min-width: 28px;
+ max-width: 28px;
+ margin-left: 4px;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..4d21578c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKColorPropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d099b3ff24a56534aa66b7dea2493309
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemView.uxml
new file mode 100644
index 00000000..f98cf2f9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemView.uxml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemView.uxml.meta
new file mode 100644
index 00000000..155f4fb7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 98c1f62795b74eb4392e321d7ffdbfcb
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemViewUss.uss
new file mode 100644
index 00000000..73a44966
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemViewUss.uss
@@ -0,0 +1,27 @@
+/*
+ * UTKColorStatePropertyItemViewUss.uss
+ * ColorState PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--color-state {
+ /* ColorState View 전용 스타일 */
+}
+
+.utk-property-item-view--color-state .utk-property-item-view__state-label {
+ flex-grow: 1;
+ margin-right: 8px;
+}
+
+.utk-property-item-view--color-state .utk-property-item-view__color-preview {
+ width: 24px;
+ height: 24px;
+ border-radius: 4px;
+ border-width: 1px;
+ border-color: rgba(255, 255, 255, 0.2);
+ margin-right: 0;
+}
+
+.utk-property-item-view--color-state .utk-property-item-view__picker-btn {
+ min-width: 28px;
+ max-width: 28px;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..8019226f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKColorStatePropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 49461717c77f24a4f94821f2572366da
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemView.uxml
new file mode 100644
index 00000000..02f77857
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemView.uxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemView.uxml.meta
new file mode 100644
index 00000000..aefe2d4c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 05cd1b1857da84e4787bd2ebe9456b64
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemViewUss.uss
new file mode 100644
index 00000000..06819185
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemViewUss.uss
@@ -0,0 +1,18 @@
+/*
+ * UTKDatePropertyItemViewUss.uss
+ * Date PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--date {
+ /* Date View 전용 스타일 */
+}
+
+.utk-property-item-view--date .utk-property-item-view__field {
+ flex-grow: 1;
+}
+
+.utk-property-item-view--date .utk-property-item-view__picker-btn {
+ min-width: 28px;
+ max-width: 28px;
+ margin-left: 4px;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..7547562f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDatePropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1388d60be75ad764295f57d51159d2c1
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemView.uxml
new file mode 100644
index 00000000..07146cba
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemView.uxml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemView.uxml.meta
new file mode 100644
index 00000000..971f9922
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 67b7b78ec3fa59d46a90effb2adc3055
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemViewUss.uss
new file mode 100644
index 00000000..852c48fb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemViewUss.uss
@@ -0,0 +1,24 @@
+/*
+ * UTKDateRangePropertyItemViewUss.uss
+ * DateRange PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--date-range {
+ /* DateRange View 전용 스타일 */
+}
+
+.utk-property-item-view--date-range .utk-property-item-view__field {
+ flex-grow: 1;
+}
+
+.utk-property-item-view--date-range .utk-property-item-view__picker-btn {
+ min-width: 28px;
+ max-width: 28px;
+ margin-left: 4px;
+}
+
+.utk-property-item-view--date-range .utk-property-item-view__range-separator {
+ margin: 0 8px;
+ justify-content: center;
+ -unity-text-align: middle-center;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..d38e49b8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateRangePropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3e9baceadec39a54bb43ecfe5d7847fa
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemView.uxml
new file mode 100644
index 00000000..ee046a0b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemView.uxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemView.uxml.meta
new file mode 100644
index 00000000..064d5281
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: df60d0fdb4e4cf34883bf2a850a4f77f
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemViewUss.uss
new file mode 100644
index 00000000..45c7b0bf
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemViewUss.uss
@@ -0,0 +1,18 @@
+/*
+ * UTKDateTimePropertyItemViewUss.uss
+ * DateTime PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--datetime {
+ /* DateTime View 전용 스타일 */
+}
+
+.utk-property-item-view--datetime .utk-property-item-view__field {
+ flex-grow: 1;
+}
+
+.utk-property-item-view--datetime .utk-property-item-view__picker-btn {
+ min-width: 28px;
+ max-width: 28px;
+ margin-left: 4px;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..c73df6f6
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimePropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3f7e0fd8161f2524da443a8762d3b56b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemView.uxml
new file mode 100644
index 00000000..a6395c05
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemView.uxml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemView.uxml.meta
new file mode 100644
index 00000000..b74eddc0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: b1dfe16d3290d424eae3282ce9eff2cd
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemViewUss.uss
new file mode 100644
index 00000000..00c7c0e3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemViewUss.uss
@@ -0,0 +1,24 @@
+/*
+ * UTKDateTimeRangePropertyItemViewUss.uss
+ * DateTimeRange PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--datetime-range {
+ /* DateTimeRange View 전용 스타일 */
+}
+
+.utk-property-item-view--datetime-range .utk-property-item-view__field {
+ flex-grow: 1;
+}
+
+.utk-property-item-view--datetime-range .utk-property-item-view__picker-btn {
+ min-width: 28px;
+ max-width: 28px;
+ margin-left: 4px;
+}
+
+.utk-property-item-view--datetime-range .utk-property-item-view__range-separator {
+ margin: 0 8px;
+ justify-content: center;
+ -unity-text-align: middle-center;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..d4a0d331
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDateTimeRangePropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 85aee0d50ac66c94f94cc91c39d0ac5a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemView.uxml
new file mode 100644
index 00000000..0568192a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemView.uxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemView.uxml.meta
new file mode 100644
index 00000000..cc59ac25
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c6e678cb199a76e44a636a6386d015df
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemViewUss.uss
new file mode 100644
index 00000000..414596b9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemViewUss.uss
@@ -0,0 +1,20 @@
+/*
+ * UTKDropdownPropertyItemViewUss.uss
+ * Dropdown PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--dropdown {
+ /* Dropdown View 전용 스타일 */
+}
+
+.utk-property-item-view--dropdown .utk-property-item-view__dropdown {
+ flex-grow: 1;
+ margin-left: 0;
+ margin-right: 0;
+}
+
+#readonly-field {
+ flex-grow: 1;
+ margin-left: 0;
+ margin-right: 0;
+}
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..22f9f7b1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKDropdownPropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0f0eb107017f0d4489e371343613901b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemView.uxml
new file mode 100644
index 00000000..0ad342cb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemView.uxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemView.uxml.meta
new file mode 100644
index 00000000..302cdd97
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: ff74cbe64be16d9489e027edf3bdb849
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemViewUss.uss
new file mode 100644
index 00000000..2c7ea121
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemViewUss.uss
@@ -0,0 +1,20 @@
+/*
+ * UTKEnumPropertyItemViewUss.uss
+ * Enum PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--enum {
+ /* Enum View 전용 스타일 */
+}
+
+.utk-property-item-view--enum .utk-property-item-view__dropdown {
+ flex-grow: 1;
+ margin-left: 0;
+ margin-right: 0;
+}
+
+#readonly-field {
+ flex-grow: 1;
+ margin-left: 0;
+ margin-right: 0;
+}
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..803b2a99
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKEnumPropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 063d376b36cef8c4b9e67dd5381f4902
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemView.uxml
new file mode 100644
index 00000000..d69277ae
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemView.uxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemView.uxml.meta
new file mode 100644
index 00000000..818fd9c6
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: d18bd23679149a241aebfeb54061818f
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemViewUss.uss
new file mode 100644
index 00000000..d1e6a62c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemViewUss.uss
@@ -0,0 +1,56 @@
+/*
+ * ===================================
+ * UTKFloatDropdownPropertyItemView.uss
+ * Float + Dropdown Composite View
+ * ===================================
+ */
+
+/* ===================================
+ Root
+ =================================== */
+
+.utk-property-item-view--float-dropdown .utk-property-item-view__value {
+ flex-direction: row;
+ align-items: stretch;
+}
+
+/* ===================================
+ Float Field
+ =================================== */
+
+.utk-float-dropdown-view__float-field {
+ flex-grow: 1;
+ flex-basis: 0;
+ margin-right: var(--space-xs);
+}
+
+/* ===================================
+ Float Stepper
+ =================================== */
+
+.utk-float-dropdown-view__stepper {
+ flex-grow: 1;
+ flex-basis: 0;
+ margin-right: var(--space-xs);
+}
+
+/* ===================================
+ Dropdown
+ =================================== */
+
+.utk-float-dropdown-view__dropdown {
+ flex-grow: 1;
+ flex-basis: 0;
+ margin-left: 4px;
+ margin-right: 0;
+}
+
+/* ===================================
+ ReadOnly Field
+ =================================== */
+
+.utk-float-dropdown-view__readonly-field {
+ flex-grow: 1;
+ margin-left: 0;
+ margin-right: 0;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..5dc27770
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatDropdownPropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cdc7ac16146263844be31b4bb9ef85b4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemView.uxml
new file mode 100644
index 00000000..d260c0c8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemView.uxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemView.uxml.meta
new file mode 100644
index 00000000..4e96c7be
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6d351d358cb46114183ae33c6464191b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemViewUss.uss
new file mode 100644
index 00000000..7435ec95
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemViewUss.uss
@@ -0,0 +1,57 @@
+/*
+ * UTKFloatPropertyItemViewUss.uss
+ * Float PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--float {
+ /* Float View 전용 스타일 */
+}
+
+.utk-property-item-view--float .utk-property-item-view__value {
+ flex-direction: row;
+ flex-grow: 1;
+}
+
+/* 기본 상태: Slider 숨김, Field만 표시 */
+.utk-property-item-view--float .utk-property-item-view__slider {
+ display: none;
+ flex-grow: 1;
+ margin-right: 8px;
+}
+
+.utk-property-item-view--float .utk-property-item-view__field {
+ display: flex;
+ flex-grow: 1;
+}
+
+.utk-property-item-view--float .utk-property-item-view__stepper {
+ display: flex;
+ flex-grow: 1;
+ margin-left: 0;
+}
+
+
+
+/* UseSlider 상태: Slider + Field 모두 표시 */
+.utk-property-item-view--float.utk-property-item-view--slider .utk-property-item-view__slider {
+ display: flex;
+ flex-grow: 1;
+}
+
+.utk-property-item-view--float.utk-property-item-view--slider .utk-property-item-view__field {
+ flex-grow: 0.25;
+}
+
+.utk-property-item-view--float.utk-property-item-view--slider .utk-property-item-view__stepper {
+ flex-grow: 0.25;
+ width: 50px;
+}
+
+/* ReadOnly 상태: Slider 숨김 */
+.utk-property-item-view--float.utk-property-item-view--readonly .utk-property-item-view__slider {
+ display: none;
+}
+
+.utk-property-item-view--float.utk-property-item-view--readonly .utk-property-item-view__field {
+ flex-grow: 1;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..5f36a310
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatPropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: a75bf4beee8786b44b6d7869458791db
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemView.uxml
new file mode 100644
index 00000000..51ce5bbd
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemView.uxml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemView.uxml.meta
new file mode 100644
index 00000000..fc653b7a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 57a595e805126e4498d6b2857faacb2a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemViewUss.uss
new file mode 100644
index 00000000..f4f96407
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemViewUss.uss
@@ -0,0 +1,26 @@
+/*
+ * UTKFloatRangePropertyItemViewUss.uss
+ * FloatRange PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--float-range {
+ /* FloatRange View 전용 스타일 */
+}
+
+.utk-property-item-view--float-range .utk-property-item-view__field {
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-basis: 0;
+}
+
+.utk-property-item-view--float-range .utk-property-item-view__range-separator {
+ margin: 0 8px;
+ -unity-text-align: middle-center;
+}
+
+.utk-property-item-view--float-range .utk-property-item-view__stepper {
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-basis: 0;
+ margin-left: 0;
+}
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..13f66084
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKFloatRangePropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 50bc1148c6bdb4a418fd95a5382ee0e8
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemView.uxml
new file mode 100644
index 00000000..b2232fd1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemView.uxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemView.uxml.meta
new file mode 100644
index 00000000..11d789d0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: ec0830fedc3c34a4ea655fbd740f0378
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemViewUss.uss
new file mode 100644
index 00000000..81b6e16e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemViewUss.uss
@@ -0,0 +1,93 @@
+/*
+ * UTKIntPropertyItemViewUss.uss
+ * Int PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--int {
+ /* Int View 전용 스타일 */
+}
+
+.utk-property-item-view--int .utk-property-item-view__value {
+ flex-direction: row;
+ flex-grow: 1;
+ align-items: center;
+}
+
+/* 기본 상태: Slider, Stepper 숨김, Field만 표시 */
+.utk-property-item-view--int .utk-property-item-view__slider {
+ display: none;
+ flex-grow: 1;
+ margin-right: 8px;
+ margin-left: 0;
+}
+
+.utk-property-item-view--int .utk-property-item-view__stepper {
+ display: none;
+ flex-grow: 1;
+}
+
+.utk-property-item-view--int .utk-property-item-view__field {
+ display: flex;
+ flex-grow: 1;
+ margin-bottom: 0;
+}
+
+/* UseSlider 상태: Slider + Field 모두 표시, Stepper 숨김 */
+.utk-property-item-view--int.utk-property-item-view--slider .utk-property-item-view__slider {
+ display: flex;
+ flex-grow: 1;
+}
+
+.utk-property-item-view--int.utk-property-item-view--slider .utk-property-item-view__field {
+ flex-grow: 0.25;
+}
+
+.utk-property-item-view--int.utk-property-item-view--slider .utk-property-item-view__stepper {
+ display: none;
+}
+
+/* UseStepper 상태: Stepper만 표시, Field/Slider 숨김 */
+.utk-property-item-view--int.utk-property-item-view--stepper .utk-property-item-view__stepper {
+ display: flex;
+ flex-grow: 1;
+ margin-left: 0;
+}
+
+.utk-property-item-view--int.utk-property-item-view--stepper .utk-property-item-view__field {
+ display: none;
+}
+
+.utk-property-item-view--int.utk-property-item-view--stepper .utk-property-item-view__slider {
+ display: none;
+}
+
+/* UseSlider + UseStepper 상태: Slider + Stepper 모두 표시, Field 숨김 */
+.utk-property-item-view--int.utk-property-item-view--slider.utk-property-item-view--stepper .utk-property-item-view__slider {
+ display: flex;
+ flex-grow: 1;
+}
+
+.utk-property-item-view--int.utk-property-item-view--slider.utk-property-item-view--stepper .utk-property-item-view__stepper {
+ display: flex;
+ flex-grow: 0.25;
+ width: 50px;
+}
+
+.utk-property-item-view--int.utk-property-item-view--slider.utk-property-item-view--stepper .utk-property-item-view__field {
+ display: none;
+}
+
+/* ReadOnly 상태: Slider/Stepper 숨김, Field만 표시 (flex-grow: 1) */
+.utk-property-item-view--int.utk-property-item-view--readonly .utk-property-item-view__slider {
+ display: none;
+}
+
+.utk-property-item-view--int.utk-property-item-view--readonly .utk-property-item-view__stepper {
+ display: none;
+}
+
+.utk-property-item-view--int.utk-property-item-view--readonly .utk-property-item-view__field {
+ display: flex;
+ flex-grow: 1;
+ margin-bottom: 0;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..ca7f16bc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKIntPropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c12c86d736c04224fa62af9fbbd52f85
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemView.uxml
new file mode 100644
index 00000000..e3b67ac4
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemView.uxml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemView.uxml.meta
new file mode 100644
index 00000000..f1cd1323
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 5f6379c3c29e9284788f893f1b95cfdc
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemViewUss.uss
new file mode 100644
index 00000000..20568360
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemViewUss.uss
@@ -0,0 +1,26 @@
+/*
+ * UTKIntRangePropertyItemViewUss.uss
+ * IntRange PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--int-range {
+ /* IntRange View 전용 스타일 */
+}
+
+.utk-property-item-view--int-range .utk-property-item-view__field {
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-basis: 0;
+}
+
+.utk-property-item-view--int-range .utk-property-item-view__stepper {
+ flex-grow: 1;
+ flex-shrink: 1;
+ flex-basis: 0;
+ margin-left: 0;
+}
+
+.utk-property-item-view--int-range .utk-property-item-view__range-separator {
+ margin: 0 8px;
+ -unity-text-align: middle-center;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..93fcea74
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKIntRangePropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 72838658832a79b4fa9d0e89f9534d69
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemView.uxml
new file mode 100644
index 00000000..e11f08e7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemView.uxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemView.uxml.meta
new file mode 100644
index 00000000..ca576387
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: a7bd219f87024f5448d8a67d962d52bf
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemViewUss.uss
new file mode 100644
index 00000000..4b996c72
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemViewUss.uss
@@ -0,0 +1,20 @@
+/*
+ * UTKMultiSelectDropdownPropertyItemViewUss.uss
+ * MultiSelectDropdown PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--multiselect-dropdown {
+ /* MultiSelectDropdown View 전용 스타일 */
+}
+
+.utk-property-item-view--multiselect-dropdown .utk-property-item-view__multiselect-dropdown {
+ flex-grow: 1;
+ margin-left: 0;
+ margin-right: 0;
+}
+
+#readonly-field {
+ flex-grow: 1;
+ margin-left: 0;
+ margin-right: 0;
+}
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..013d6b50
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKMultiSelectDropdownPropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: ff5637017b4f4ba499070014ab8ba603
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKPropertyItemViewCommonUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKPropertyItemViewCommonUss.uss
new file mode 100644
index 00000000..73b8e01c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKPropertyItemViewCommonUss.uss
@@ -0,0 +1,408 @@
+/*
+ * ===================================
+ * UTKPropertyItemViewCommonUss.uss
+ * PropertyItem View 공통 스타일
+ * ===================================
+ *
+ * 이 파일은 UTKThemeManager의 테마 변수를 참조합니다.
+ * - 색상: var(--color-*)
+ * - 간격: var(--space-*)
+ * - 반지름: var(--radius-*)
+ */
+
+/* ===================================
+ 기본 컨테이너
+ =================================== */
+
+.utk-property-item-view {
+ flex-direction: row;
+ align-items: center;
+ min-height: 28px;
+ padding-top: 3px;
+ padding-bottom: 3px;
+ padding-left: var(--space-m);
+ padding-right: 0;
+ border-bottom-width: var(--border-width);
+ border-bottom-color: var(--color-border);
+}
+
+/* .utk-property-item-view:hover {
+ background-color: var(--color-collection-item-hover);
+} */
+
+.utk-property-item-view TemplateContainer {
+ flex-grow: 1;
+ min-height: 28px;
+}
+
+/* ===================================
+ Property Item Container
+ =================================== */
+
+.utk-property-item-view-container {
+ flex-grow: 1;
+ flex-direction: row;
+}
+
+
+
+/* ===================================
+ 읽기 전용 상태
+ =================================== */
+
+.utk-property-item-view--readonly {
+ opacity: 0.6;
+}
+
+.utk-property-item-view--readonly .utk-property-item-view__field {
+ flex-grow: 1;
+}
+
+/* ===================================
+ 숨김 상태
+ =================================== */
+
+.utk-property-item-view--hidden {
+ display: none;
+}
+
+/* ===================================
+ 라벨 스타일
+ =================================== */
+
+.utk-property-item-view__label {
+ width: 120px;
+ min-width: 120px;
+ max-width: 200px;
+ flex-shrink: 0;
+ color: var(--color-text-primary);
+ font-size: var(--font-size-body2);
+ overflow: hidden;
+ text-overflow: ellipsis;
+ -unity-text-overflow-position: end;
+ white-space: nowrap;
+ -unity-text-align: middle-left;
+ padding-right: 10px;
+ align-items: center;
+ justify-content: center;
+}
+
+/* ===================================
+ 값 컨테이너
+ =================================== */
+
+.utk-property-item-view__value {
+ flex-grow: 1;
+ flex-direction: row;
+ align-items: stretch;
+ align-self: center;
+}
+
+/* ===================================
+ 공통 필드 스타일
+ =================================== */
+
+.utk-property-item-view__field {
+ flex-grow: 1;
+ min-width: 60px;
+}
+
+/* ===================================
+ TextField 공통
+ =================================== */
+
+.utk-property-item-view TextField,
+.utk-property-item-view IntegerField,
+.utk-property-item-view FloatField {
+ flex-grow: 1;
+}
+
+.utk-property-item-view TextField .unity-text-field__input,
+.utk-property-item-view IntegerField .unity-integer-field__input,
+.utk-property-item-view FloatField .unity-float-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ color: var(--color-text-primary);
+ padding: 3px var(--space-m);
+ min-height: 22px;
+}
+
+.utk-property-item-view TextField:focus .unity-text-field__input,
+.utk-property-item-view IntegerField:focus .unity-integer-field__input,
+.utk-property-item-view FloatField:focus .unity-float-field__input {
+ border-color: var(--color-border-focus);
+}
+
+/* ===================================
+ Toggle
+ =================================== */
+
+.utk-property-item-view Toggle {
+ flex-grow: 0;
+}
+
+.utk-property-item-view Toggle .unity-toggle__checkmark {
+ width: 18px;
+ height: 18px;
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+}
+
+.utk-property-item-view Toggle:checked .unity-toggle__checkmark {
+ background-color: var(--color-btn-primary);
+ border-color: var(--color-btn-primary-hover);
+}
+
+/* ===================================
+ 슬라이더 스타일
+ =================================== */
+
+.utk-property-item-view__slider {
+ flex-grow: 1;
+ margin-right: 8px;
+}
+
+.utk-property-item-view__field--with-slider {
+ flex-grow: 0;
+ min-width: 60px;
+ max-width: 80px;
+}
+
+.utk-property-item-view Slider {
+ flex-grow: 1;
+ margin-left: var(--space-m);
+ margin-right: var(--space-m);
+}
+
+.utk-property-item-view Slider .unity-base-slider__dragger {
+ width: 12px;
+ height: 12px;
+ border-radius: var(--radius-full);
+ background-color: var(--color-base-05);
+ margin-top: -4px;
+}
+
+.utk-property-item-view Slider .unity-base-slider__tracker {
+ height: 4px;
+ background-color: var(--color-base-12);
+ border-radius: var(--radius-s);
+}
+
+/* ===================================
+ SliderInt
+ =================================== */
+
+.utk-property-item-view SliderInt {
+ flex-grow: 1;
+ margin-left: var(--space-m);
+ margin-right: var(--space-m);
+}
+
+.utk-property-item-view SliderInt .unity-base-slider__dragger {
+ width: 12px;
+ height: 12px;
+ border-radius: var(--radius-full);
+ background-color: var(--color-base-05);
+ margin-top: -4px;
+}
+
+.utk-property-item-view SliderInt .unity-base-slider__tracker {
+ height: 4px;
+ background-color: var(--color-base-12);
+ border-radius: var(--radius-s);
+}
+
+/* ===================================
+ 슬라이더 모드 공통
+ =================================== */
+
+.utk-property-item-view--slider .utk-property-item-view__value {
+ flex-direction: row;
+ flex-grow: 1;
+}
+
+.utk-property-item-view--slider .utk-property-item-view__slider {
+ flex-grow: 1;
+}
+
+.utk-property-item-view--slider .utk-property-item-view__number-field {
+ width: 60px;
+ margin-left: 10px;
+}
+
+/* ===================================
+ Dropdown
+ =================================== */
+
+.utk-property-item-view DropdownField {
+ flex-grow: 1;
+}
+
+.utk-property-item-view DropdownField .unity-base-popup-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: 3px var(--space-m);
+ min-height: 22px;
+}
+
+/* ===================================
+ Button (Color/Date Picker 열기)
+ =================================== */
+
+.utk-property-item-view__picker-btn {
+ width: 24px;
+ min-width: 24px;
+ height: 24px;
+ margin-left: var(--space-m);
+ background-color: var(--color-btn-normal);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: 0;
+}
+
+.utk-property-item-view__picker-btn:hover {
+ background-color: var(--color-btn-hover);
+}
+
+/* ===================================
+ Color Preview
+ =================================== */
+
+.utk-property-item-view__color-preview {
+ width: 22px;
+ height: 22px;
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ margin-right: var(--space-s);
+}
+
+/* ===================================
+ Vector 필드
+ =================================== */
+
+.utk-property-item-view--vector2 .utk-property-item-view__value,
+.utk-property-item-view--vector3 .utk-property-item-view__value {
+ flex-direction: row;
+}
+
+.utk-property-item-view__vector-field {
+ flex-grow: 1;
+ margin-right: var(--space-m);
+}
+
+.utk-property-item-view__vector-label {
+ width: 12px;
+ font-size: var(--font-size-label4);
+ color: var(--color-text-secondary);
+ -unity-text-align: middle-center;
+}
+
+/* Vector label colors */
+.utk-vector-label--x {
+ color: var(--color-vector-x);
+}
+
+.utk-vector-label--y {
+ color: var(--color-vector-y);
+}
+
+.utk-vector-label--z {
+ color: var(--color-vector-z);
+}
+
+/* ===================================
+ State label
+ =================================== */
+
+.utk-property-item-view__state-label {
+ flex-grow: 1;
+ -unity-text-align: middle-left;
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Range 필드
+ =================================== */
+
+.utk-property-item-view__range-separator {
+ color: var(--color-text-secondary);
+ margin-left: var(--space-m);
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+}
+
+/* ===================================
+ Description 영역
+ =================================== */
+
+.utk-property-item-view__description {
+ font-size: var(--font-size-label4);
+ color: var(--color-text-secondary);
+ margin-top: var(--space-xs);
+}
+
+/* ===================================
+ 라벨 없는 상태 (ShowLabel=false)
+ =================================== */
+
+.utk-property-item-view--no-label .utk-property-item-view__label {
+ display: none;
+}
+
+.utk-property-item-view--no-label .utk-property-item-view__value {
+ flex-grow: 1;
+}
+
+/* ===================================
+ Stepper 스타일 (Float용)
+ =================================== */
+
+.utk-property-item-view__stepper {
+ flex-direction: column;
+ margin-left: 4px;
+ flex-shrink: 0;
+}
+
+.utk-property-item-view__stepper-btn {
+ width: 16px;
+ height: 11px;
+ min-height: 11px;
+ padding: 0;
+ margin: 0;
+ background-color: var(--color-btn-normal);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ font-size: 10px;
+ -unity-text-align: middle-center;
+}
+
+.utk-property-item-view__stepper-btn:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-property-item-view__stepper-btn:active {
+ background-color: var(--color-btn-active);
+}
+
+.utk-property-item-view__stepper-btn--up {
+ border-top-left-radius: var(--radius-s);
+ border-top-right-radius: var(--radius-s);
+ border-bottom-width: 0;
+}
+
+.utk-property-item-view__stepper-btn--down {
+ border-bottom-left-radius: var(--radius-s);
+ border-bottom-right-radius: var(--radius-s);
+}
+
+.utk-property-item-view__field--with-stepper {
+ flex-grow: 1;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKPropertyItemViewCommonUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKPropertyItemViewCommonUss.uss.meta
new file mode 100644
index 00000000..f9fb6356
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKPropertyItemViewCommonUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 9342ecce34055144da2460a82d5a85a6
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemView.uxml
new file mode 100644
index 00000000..482517d3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemView.uxml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemView.uxml.meta
new file mode 100644
index 00000000..6506b6c3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 8f1b70e1330e7f64d8cd4eaca1a8c473
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemViewUss.uss
new file mode 100644
index 00000000..83725b3f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemViewUss.uss
@@ -0,0 +1,24 @@
+/*
+ * UTKRadioPropertyItemViewUss.uss
+ * Radio PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--radio {
+ /* Radio View 전용 스타일 */
+}
+
+.utk-property-item-view--radio .utk-property-item-view__radio-container {
+ flex-direction: column;
+ flex-wrap: wrap;
+ flex-grow: 1;
+}
+
+.utk-property-item-view--radio .utk-property-item-view__radio {
+ margin-right: 12px;
+}
+
+#readonly-field {
+ flex-grow: 1;
+ margin-left: 0;
+ margin-right: 0;
+}
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..cd78307f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKRadioPropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 04099a9990ef95442b43b4c36f035720
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemView.uxml
new file mode 100644
index 00000000..7d3b5406
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemView.uxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemView.uxml.meta
new file mode 100644
index 00000000..1d0eedfb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: cf69ac587b5ae3246a5f7ed1df6d207f
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemViewUss.uss
new file mode 100644
index 00000000..fa052d03
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemViewUss.uss
@@ -0,0 +1,27 @@
+/*
+ * UTKStringPropertyItemViewUss.uss
+ * String PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--string {
+ /* String View 전용 스타일 */
+}
+
+.utk-property-item-view--string .utk-property-item-view__field {
+ flex-grow: 1;
+}
+
+/* ActionButton 스타일 */
+.utk-property-item-view--string .utk-property-item-view__action-button {
+ margin-left: 4px;
+ flex-shrink: 0;
+ height: 24px;
+}
+
+.utk-property-item-view--string .utk-property-item-view__action-button-icon {
+ margin-left: 4px;
+ flex-shrink: 0;
+ min-width: 24px;
+ max-width: 24px;
+ height: 24px;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..250ce7ad
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKStringPropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 471c97aa48f76cf40886f6c0af3312bc
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemView.uxml
new file mode 100644
index 00000000..4df05fe4
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemView.uxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemView.uxml.meta
new file mode 100644
index 00000000..218c5241
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e381444705453634a8afa78518e211c3
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemViewUss.uss
new file mode 100644
index 00000000..468844ae
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemViewUss.uss
@@ -0,0 +1,12 @@
+/*
+ * UTKVector2PropertyItemViewUss.uss
+ * Vector2 PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--vector2 {
+ /* Vector2 View 전용 스타일 */
+}
+
+.utk-property-item-view--vector2 .utk-property-item-view__vector-field {
+ flex-grow: 1;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..2b53e1f3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKVector2PropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 1196d676b51949742b06dbed181f4c76
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemView.uxml b/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemView.uxml
new file mode 100644
index 00000000..08efde1c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemView.uxml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemView.uxml.meta b/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemView.uxml.meta
new file mode 100644
index 00000000..463086a8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemView.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e4ebf0d3c38abe645bd4171a173dc4a2
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemViewUss.uss b/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemViewUss.uss
new file mode 100644
index 00000000..a97d3c7f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemViewUss.uss
@@ -0,0 +1,12 @@
+/*
+ * UTKVector3PropertyItemViewUss.uss
+ * Vector3 PropertyItem View 전용 스타일
+ */
+
+.utk-property-item-view--vector3 {
+ /* Vector3 View 전용 스타일 */
+}
+
+.utk-property-item-view--vector3 .utk-property-item-view__vector-field {
+ flex-grow: 1;
+}
diff --git a/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemViewUss.uss.meta b/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemViewUss.uss.meta
new file mode 100644
index 00000000..0de1091d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Property/Views/UTKVector3PropertyItemViewUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4cd630be78c9f2f46ad8f1e1c279471e
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample.meta b/Assets/Resources/UIToolkit/Sample.meta
new file mode 100644
index 00000000..3ac18e33
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5cd9bd6d5b687884c8fdbf24bcf70d8e
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Button.meta b/Assets/Resources/UIToolkit/Sample/Button.meta
new file mode 100644
index 00000000..626e3d1e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5f4ffddd9a542104db7833232dc195a3
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uss b/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uss
new file mode 100644
index 00000000..de830080
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uss
@@ -0,0 +1,8 @@
+/*
+ * ===================================
+ * UTKButtonSample.uss
+ * Button Sample Specific Styles
+ * ===================================
+ */
+
+/* Additional button sample specific styles can be added here */
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uss.meta
new file mode 100644
index 00000000..6a2d82a8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 0a09b83f4e42cb04e9e2779190e3a5a8
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uxml b/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uxml
new file mode 100644
index 00000000..3a6d9f4b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uxml
@@ -0,0 +1,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uxml.meta
new file mode 100644
index 00000000..6e5a6e1a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKButtonSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 34978706eb0e4c544b32876bec047e9a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKCheckBoxSample.uxml b/Assets/Resources/UIToolkit/Sample/Button/UTKCheckBoxSample.uxml
new file mode 100644
index 00000000..d6bea536
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKCheckBoxSample.uxml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKCheckBoxSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Button/UTKCheckBoxSample.uxml.meta
new file mode 100644
index 00000000..0fa39fa9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKCheckBoxSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: de315d9017f24f340ab4d7e317e7d43e
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKRadioButtonSample.uxml b/Assets/Resources/UIToolkit/Sample/Button/UTKRadioButtonSample.uxml
new file mode 100644
index 00000000..970c78bf
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKRadioButtonSample.uxml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKRadioButtonSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Button/UTKRadioButtonSample.uxml.meta
new file mode 100644
index 00000000..4c281c73
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKRadioButtonSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 88cadd91ceaaf3544942f6166250b63d
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKToggleButtonGroupSample.uxml b/Assets/Resources/UIToolkit/Sample/Button/UTKToggleButtonGroupSample.uxml
new file mode 100644
index 00000000..525ac66e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKToggleButtonGroupSample.uxml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKToggleButtonGroupSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Button/UTKToggleButtonGroupSample.uxml.meta
new file mode 100644
index 00000000..38eba917
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKToggleButtonGroupSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 63c1c592c6c73cb4c8d47acedbd1e7a6
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKToggleSample.uxml b/Assets/Resources/UIToolkit/Sample/Button/UTKToggleSample.uxml
new file mode 100644
index 00000000..e5bf25c6
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKToggleSample.uxml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Button/UTKToggleSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Button/UTKToggleSample.uxml.meta
new file mode 100644
index 00000000..c20d53af
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Button/UTKToggleSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 873a8769199d3d442a91e23cd5fd7485
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Card.meta b/Assets/Resources/UIToolkit/Sample/Card.meta
new file mode 100644
index 00000000..f9d19869
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Card.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: eeb8b759e2653114ba08f548a850ecdf
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uss b/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uss
new file mode 100644
index 00000000..df4f76f1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uss
@@ -0,0 +1,14 @@
+/*
+ * ===================================
+ * UTKCardSample.uss
+ * Card Sample Specific Styles
+ * ===================================
+ */
+
+.utk-sample-card {
+ width: 200px;
+}
+
+.utk-sample-panel {
+ width: 300px;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uss.meta
new file mode 100644
index 00000000..0178bca7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f246df85cf52a774d9b761254cf9793b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uxml b/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uxml
new file mode 100644
index 00000000..a3f234fa
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uxml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uxml.meta
new file mode 100644
index 00000000..353afd00
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Card/UTKCardSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 4cd1e0fe1aa260a4a96ae462f82f2b92
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Card/UTKPanelSample.uxml b/Assets/Resources/UIToolkit/Sample/Card/UTKPanelSample.uxml
new file mode 100644
index 00000000..2edc165e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Card/UTKPanelSample.uxml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Card/UTKPanelSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Card/UTKPanelSample.uxml.meta
new file mode 100644
index 00000000..61da5265
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Card/UTKPanelSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3b09f207589c6e04ba9d97b38789474b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Dropdown.meta b/Assets/Resources/UIToolkit/Sample/Dropdown.meta
new file mode 100644
index 00000000..c7f89e8b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Dropdown.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 6766c73083f11b345adfdb8db84ecfb6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Dropdown/UTKDropdownSample.uxml b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKDropdownSample.uxml
new file mode 100644
index 00000000..c54cf824
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKDropdownSample.uxml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Dropdown/UTKDropdownSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKDropdownSample.uxml.meta
new file mode 100644
index 00000000..f7cb84fd
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKDropdownSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 0c7eba4e992ceaa498bc024531f51c16
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Dropdown/UTKEnumDropDownSample.uxml b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKEnumDropDownSample.uxml
new file mode 100644
index 00000000..e791dac9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKEnumDropDownSample.uxml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Dropdown/UTKEnumDropDownSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKEnumDropDownSample.uxml.meta
new file mode 100644
index 00000000..0a24979f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKEnumDropDownSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c3373cb0b5ef8254daefea32911a4fdc
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Dropdown/UTKMultiSelectDropdownSample.uxml b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKMultiSelectDropdownSample.uxml
new file mode 100644
index 00000000..b1986a21
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKMultiSelectDropdownSample.uxml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Dropdown/UTKMultiSelectDropdownSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKMultiSelectDropdownSample.uxml.meta
new file mode 100644
index 00000000..ae3e9f73
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Dropdown/UTKMultiSelectDropdownSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3f8a9c2d7e1b4f6a9d5c8e2b1a4f7c9e
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Icon.meta b/Assets/Resources/UIToolkit/Sample/Icon.meta
new file mode 100644
index 00000000..3c3d89f0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Icon.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 28b417029abb76e43a8a639d11fb4f1d
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Icon/UTKIconSample.uss b/Assets/Resources/UIToolkit/Sample/Icon/UTKIconSample.uss
new file mode 100644
index 00000000..61ecfbd1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Icon/UTKIconSample.uss
@@ -0,0 +1,77 @@
+/*
+ * ===================================
+ * UTKIconSample.uss
+ * Icon Sample Specific Styles
+ * ===================================
+ */
+
+.utk-sample-icon-count {
+ margin-bottom: 10px;
+ color: rgba(153, 153, 153, 1);
+}
+
+.utk-sample-search-field {
+ width: 300px;
+}
+
+.utk-sample-icon-grid-container {
+ flex-grow: 1;
+ max-height: 500px;
+}
+
+.utk-sample-icon-item {
+ width: 80px;
+ height: 80px;
+ margin-right: 4px;
+ margin-bottom: 4px;
+ align-items: center;
+ justify-content: center;
+ background-color: rgba(38, 38, 38, 0.5);
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.utk-sample-icon-item:hover {
+ background-color: rgba(64, 64, 64, 0.8);
+}
+
+.utk-sample-icon-label {
+ color: white;
+ margin-bottom: 4px;
+}
+
+.utk-sample-icon-name {
+ font-size: 8px;
+ color: rgba(179, 179, 179, 1);
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 76px;
+ -unity-text-align: middle-center;
+}
+
+.utk-sample-image-icon-item {
+ width: 100px;
+ height: 100px;
+ margin-right: 8px;
+ margin-bottom: 8px;
+ align-items: center;
+ justify-content: center;
+ background-color: rgba(38, 38, 38, 0.5);
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+}
+
+.utk-sample-image-icon-item:hover {
+ background-color: rgba(64, 64, 64, 0.8);
+}
+
+.utk-sample-image-icon-image {
+ width: 32px;
+ height: 32px;
+ margin-bottom: 4px;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Icon/UTKIconSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Icon/UTKIconSample.uss.meta
new file mode 100644
index 00000000..242c42d1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Icon/UTKIconSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c9fb1130efb7f8e4db35e60765917ece
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Icon/UTKImageIconsSample.uxml b/Assets/Resources/UIToolkit/Sample/Icon/UTKImageIconsSample.uxml
new file mode 100644
index 00000000..fb9dc089
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Icon/UTKImageIconsSample.uxml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Icon/UTKImageIconsSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Icon/UTKImageIconsSample.uxml.meta
new file mode 100644
index 00000000..a80e734e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Icon/UTKImageIconsSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: a798bb7e417deb041ae65c92ec27eae6
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Icon/UTKImageSample.uxml b/Assets/Resources/UIToolkit/Sample/Icon/UTKImageSample.uxml
new file mode 100644
index 00000000..31815f7f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Icon/UTKImageSample.uxml
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Icon/UTKImageSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Icon/UTKImageSample.uxml.meta
new file mode 100644
index 00000000..9d0596c8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Icon/UTKImageSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 612e11de59244f2449472bd88619f4df
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Icon/UTKMaterialIconsSample.uxml b/Assets/Resources/UIToolkit/Sample/Icon/UTKMaterialIconsSample.uxml
new file mode 100644
index 00000000..8e3ac73b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Icon/UTKMaterialIconsSample.uxml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Icon/UTKMaterialIconsSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Icon/UTKMaterialIconsSample.uxml.meta
new file mode 100644
index 00000000..755ef5b2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Icon/UTKMaterialIconsSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 5661938a3cf91d64f815ccfd9186ecd6
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input.meta b/Assets/Resources/UIToolkit/Sample/Input.meta
new file mode 100644
index 00000000..b6a422d3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e151ad7022fcb224fa05643b2a8d82d7
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKBoundsFieldSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKBoundsFieldSample.uxml
new file mode 100644
index 00000000..6a447474
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKBoundsFieldSample.uxml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKBoundsFieldSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKBoundsFieldSample.uxml.meta
new file mode 100644
index 00000000..ea43f2d9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKBoundsFieldSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 58b4556141fd8ef4ea265e05145be88d
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKDoubleFieldSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKDoubleFieldSample.uxml
new file mode 100644
index 00000000..74f8b62b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKDoubleFieldSample.uxml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKDoubleFieldSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKDoubleFieldSample.uxml.meta
new file mode 100644
index 00000000..1b02f8be
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKDoubleFieldSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3d45df5f0948b75428740e11fdb621a7
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKFloatFieldSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatFieldSample.uxml
new file mode 100644
index 00000000..048c527f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatFieldSample.uxml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKFloatFieldSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatFieldSample.uxml.meta
new file mode 100644
index 00000000..6e8bf5e1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatFieldSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 79d9ca4a0cbe66044952b1e88c841a99
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uss b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uss
new file mode 100644
index 00000000..cce8962b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uss
@@ -0,0 +1,10 @@
+/*
+ * ===================================
+ * UTKFloatStepperSample.uss
+ * Float Stepper Sample Specific Styles
+ * ===================================
+ */
+
+.utk-sample-stepper {
+ width: 150px;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uss.meta
new file mode 100644
index 00000000..97140d97
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f2dcdd47a630b394ea19ea8b91f61d01
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uxml
new file mode 100644
index 00000000..f4fd2df0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uxml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uxml.meta
new file mode 100644
index 00000000..16ce2ee5
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKFloatStepperSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 908e94035af6fc5419bdf2246bc903fd
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uss b/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uss
new file mode 100644
index 00000000..3af722df
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uss
@@ -0,0 +1,14 @@
+/*
+ * ===================================
+ * UTKInputFieldSample.uss
+ * Input Field Sample Specific Styles
+ * ===================================
+ */
+
+.utk-sample-input-field {
+ width: 250px;
+}
+
+.utk-sample-input-field--narrow {
+ width: 200px;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uss.meta
new file mode 100644
index 00000000..151f362e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 6db431c1a11483943b4f68d3e57e9a4a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uxml
new file mode 100644
index 00000000..1518b753
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uxml
@@ -0,0 +1,71 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uxml.meta
new file mode 100644
index 00000000..e3673cf1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKInputFieldSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 7987d56d01158c54ea332b1b2c49fd5d
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uss b/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uss
new file mode 100644
index 00000000..e292a4af
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uss
@@ -0,0 +1,10 @@
+/*
+ * ===================================
+ * UTKIntStepperSample.uss
+ * Number Stepper Sample Specific Styles
+ * ===================================
+ */
+
+.utk-sample-stepper {
+ width: 150px;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uss.meta
new file mode 100644
index 00000000..0543e27e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d95dfd14b14380546a59b0d14ab94818
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uxml
new file mode 100644
index 00000000..1696c8e7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uxml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uxml.meta
new file mode 100644
index 00000000..3a5cfb20
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKIntStepperSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: cde67583f4f12ee45808ea0b9e2e79ef
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKIntegerFieldSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKIntegerFieldSample.uxml
new file mode 100644
index 00000000..32b4a085
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKIntegerFieldSample.uxml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKIntegerFieldSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKIntegerFieldSample.uxml.meta
new file mode 100644
index 00000000..39e2bb00
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKIntegerFieldSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 80c6032849f5bdc4b9ec54d8a99a07e5
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKLongFieldSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKLongFieldSample.uxml
new file mode 100644
index 00000000..a2aee3d3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKLongFieldSample.uxml
@@ -0,0 +1,55 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKLongFieldSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKLongFieldSample.uxml.meta
new file mode 100644
index 00000000..6cc6d8d4
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKLongFieldSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: d7b2f0c3d38d4534fa954d1a9e10ad07
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKRectFieldSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKRectFieldSample.uxml
new file mode 100644
index 00000000..b1d8e37c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKRectFieldSample.uxml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKRectFieldSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKRectFieldSample.uxml.meta
new file mode 100644
index 00000000..5012ae7d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKRectFieldSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 4c566ffc57ba33a4c9327bed1b632844
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKVector2FieldSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKVector2FieldSample.uxml
new file mode 100644
index 00000000..f623fcfb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKVector2FieldSample.uxml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKVector2FieldSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKVector2FieldSample.uxml.meta
new file mode 100644
index 00000000..0447c0eb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKVector2FieldSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: bc5d57bf0edb08c42a5198bf9e3f67a9
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKVector3FieldSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKVector3FieldSample.uxml
new file mode 100644
index 00000000..b40ae70a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKVector3FieldSample.uxml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKVector3FieldSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKVector3FieldSample.uxml.meta
new file mode 100644
index 00000000..e26a0f95
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKVector3FieldSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 9b0085e185736434c920abf38e7a6be7
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKVector4FieldSample.uxml b/Assets/Resources/UIToolkit/Sample/Input/UTKVector4FieldSample.uxml
new file mode 100644
index 00000000..37c3f142
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKVector4FieldSample.uxml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKVector4FieldSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKVector4FieldSample.uxml.meta
new file mode 100644
index 00000000..b1db592a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKVector4FieldSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: bd3f48a7687519e4fa0d4b0b7b5bdad7
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKVectorFieldSample.uss b/Assets/Resources/UIToolkit/Sample/Input/UTKVectorFieldSample.uss
new file mode 100644
index 00000000..5c48596a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKVectorFieldSample.uss
@@ -0,0 +1,26 @@
+/*
+ * ===================================
+ * UTKVectorFieldSample.uss
+ * Vector Field Sample Specific Styles
+ * ===================================
+ */
+
+.utk-sample-vector2-field {
+ width: 250px;
+}
+
+.utk-sample-vector3-field {
+ width: 300px;
+}
+
+.utk-sample-vector4-field {
+ width: 350px;
+}
+
+.utk-sample-rect-field {
+ width: 300px;
+}
+
+.utk-sample-bounds-field {
+ width: 350px;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Input/UTKVectorFieldSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Input/UTKVectorFieldSample.uss.meta
new file mode 100644
index 00000000..83acb8aa
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Input/UTKVectorFieldSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 14adcd09b88b748489f4368ab3768ae0
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Label.meta b/Assets/Resources/UIToolkit/Sample/Label.meta
new file mode 100644
index 00000000..d16fcff0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Label.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4a8f39572c2fc634ca1c060e9f44690a
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Label/UTKHelpBoxSample.uxml b/Assets/Resources/UIToolkit/Sample/Label/UTKHelpBoxSample.uxml
new file mode 100644
index 00000000..ce4d8d7d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Label/UTKHelpBoxSample.uxml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Label/UTKHelpBoxSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Label/UTKHelpBoxSample.uxml.meta
new file mode 100644
index 00000000..68938331
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Label/UTKHelpBoxSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: e6e39895eeba53a4c9361d1175c32060
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uss b/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uss
new file mode 100644
index 00000000..66f9d8fd
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uss
@@ -0,0 +1,8 @@
+/*
+ * ===================================
+ * UTKLabelSample.uss
+ * Label Sample Specific Styles
+ * ===================================
+ */
+
+/* Additional label sample specific styles can be added here */
diff --git a/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uss.meta
new file mode 100644
index 00000000..550049d6
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 31288bb604abfb545bea9e80d61eea51
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uxml b/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uxml
new file mode 100644
index 00000000..ef17f937
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uxml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uxml.meta
new file mode 100644
index 00000000..7a98eb59
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Label/UTKLabelSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 6564351f49702674483471bd109f95b8
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/List.meta b/Assets/Resources/UIToolkit/Sample/List.meta
new file mode 100644
index 00000000..e6f4b003
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 88181e7dc2f8e5447b61150be465ee33
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKFoldoutSample.uxml b/Assets/Resources/UIToolkit/Sample/List/UTKFoldoutSample.uxml
new file mode 100644
index 00000000..42181ae5
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKFoldoutSample.uxml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKFoldoutSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/List/UTKFoldoutSample.uxml.meta
new file mode 100644
index 00000000..2ea50358
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKFoldoutSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 7b0dcd8d51f68354b91889b20f928e03
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKListSample.uss b/Assets/Resources/UIToolkit/Sample/List/UTKListSample.uss
new file mode 100644
index 00000000..476076fc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKListSample.uss
@@ -0,0 +1,36 @@
+/*
+ * ===================================
+ * UTKListSample.uss
+ * List Sample Specific Styles
+ * ===================================
+ */
+
+.utk-sample-listview {
+ height: 200px;
+ width: 300px;
+}
+
+.utk-sample-treeview {
+ height: 200px;
+ width: 300px;
+}
+
+.utk-sample-multicolumn-listview {
+ height: 200px;
+ width: 450px;
+}
+
+.utk-sample-multicolumn-treeview {
+ height: 220px;
+ width: 450px;
+}
+
+.utk-sample-scrollview {
+ height: 150px;
+ width: 200px;
+}
+
+.utk-sample-shortcut-list {
+ height: 320px;
+ width: 620px;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKListSample.uss.meta b/Assets/Resources/UIToolkit/Sample/List/UTKListSample.uss.meta
new file mode 100644
index 00000000..f36e76c8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKListSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 7f1277911d8979640b90119cc52649e6
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKListViewSample.uxml b/Assets/Resources/UIToolkit/Sample/List/UTKListViewSample.uxml
new file mode 100644
index 00000000..0aa5f4ae
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKListViewSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKListViewSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/List/UTKListViewSample.uxml.meta
new file mode 100644
index 00000000..cd7f0796
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKListViewSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 2d68b51000ac86a4eb0a88ca96123f57
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnListViewSample.uxml b/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnListViewSample.uxml
new file mode 100644
index 00000000..b1f7adbc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnListViewSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnListViewSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnListViewSample.uxml.meta
new file mode 100644
index 00000000..7aa44977
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnListViewSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 16a79c08898ab9d489b0451eb74d8f52
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnTreeViewSample.uxml b/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnTreeViewSample.uxml
new file mode 100644
index 00000000..c4b82791
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnTreeViewSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnTreeViewSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnTreeViewSample.uxml.meta
new file mode 100644
index 00000000..4ebb4ddc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKMultiColumnTreeViewSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 1c0586e083d2ee748834b2462bbe4d7e
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKReordableListSample.uxml b/Assets/Resources/UIToolkit/Sample/List/UTKReordableListSample.uxml
new file mode 100644
index 00000000..3523d296
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKReordableListSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKReordableListSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/List/UTKReordableListSample.uxml.meta
new file mode 100644
index 00000000..73c8db89
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKReordableListSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: cb106aca3db68c845acaa7b480de76e7
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKReordableTabListSample.uxml b/Assets/Resources/UIToolkit/Sample/List/UTKReordableTabListSample.uxml
new file mode 100644
index 00000000..795a2f28
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKReordableTabListSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKReordableTabListSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/List/UTKReordableTabListSample.uxml.meta
new file mode 100644
index 00000000..da87fcde
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKReordableTabListSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c0ae1e70887e1a4429de0c54e6d69c18
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKScrollViewSample.uxml b/Assets/Resources/UIToolkit/Sample/List/UTKScrollViewSample.uxml
new file mode 100644
index 00000000..4d497d00
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKScrollViewSample.uxml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKScrollViewSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/List/UTKScrollViewSample.uxml.meta
new file mode 100644
index 00000000..811e4215
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKScrollViewSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 25ea0aad4b59aff45ad24e4d8e777ad3
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKShortcutListSample.uxml b/Assets/Resources/UIToolkit/Sample/List/UTKShortcutListSample.uxml
new file mode 100644
index 00000000..ca0ebcc8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKShortcutListSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKShortcutListSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/List/UTKShortcutListSample.uxml.meta
new file mode 100644
index 00000000..0e3d008f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKShortcutListSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: db17838bfbe1351449a155173abfc075
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKTreeViewSample.uxml b/Assets/Resources/UIToolkit/Sample/List/UTKTreeViewSample.uxml
new file mode 100644
index 00000000..96db94db
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKTreeViewSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/List/UTKTreeViewSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/List/UTKTreeViewSample.uxml.meta
new file mode 100644
index 00000000..0e87399d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/List/UTKTreeViewSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c54d2d248c5696441888adcb8ad34555
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Menu.meta b/Assets/Resources/UIToolkit/Sample/Menu.meta
new file mode 100644
index 00000000..757f49fb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Menu.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 91c1ca31501570048823ba41e18c9a7b
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uss b/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uss
new file mode 100644
index 00000000..b1fe8ff1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uss
@@ -0,0 +1,30 @@
+/*
+ * ===================================
+ * UTKTopMenuSample.uss
+ * Styles for UTKTopMenu sample
+ * ===================================
+ */
+
+.utk-menu-sample-container {
+ min-height: 44px;
+ background-color: var(--color-bg-secondary);
+ border-radius: 6px;
+ padding: 0;
+ overflow: visible;
+}
+
+.utk-menu-sample-container--vertical {
+ min-height: 180px;
+ max-width: 160px;
+}
+
+.utk-menu-sample-result {
+ font-size: 12px;
+ color: var(--color-text-secondary);
+ margin-top: 8px;
+ padding: 8px 12px;
+ background-color: var(--color-bg-secondary);
+ border-radius: 4px;
+ min-height: 20px;
+ white-space: normal;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uss.meta
new file mode 100644
index 00000000..6f33e16c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c11c996b7b7032549a2d8039bce83f85
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uxml b/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uxml
new file mode 100644
index 00000000..6e75ed06
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uxml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uxml.meta
new file mode 100644
index 00000000..9ef55704
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Menu/UTKTopMenuSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 50dc639c380919a4884c8f844748f8f1
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Modal.meta b/Assets/Resources/UIToolkit/Sample/Modal.meta
new file mode 100644
index 00000000..5fb4b715
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 02730e562994334488d08f88d58e8831
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKAlertSample.uxml b/Assets/Resources/UIToolkit/Sample/Modal/UTKAlertSample.uxml
new file mode 100644
index 00000000..782d10f6
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKAlertSample.uxml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKAlertSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Modal/UTKAlertSample.uxml.meta
new file mode 100644
index 00000000..42afa2ac
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKAlertSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 7d47aac67f766d14aa58e505f18eae87
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKLoadingSample.uxml b/Assets/Resources/UIToolkit/Sample/Modal/UTKLoadingSample.uxml
new file mode 100644
index 00000000..451be130
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKLoadingSample.uxml
@@ -0,0 +1,52 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKLoadingSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Modal/UTKLoadingSample.uxml.meta
new file mode 100644
index 00000000..979b40a3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKLoadingSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 99a140d3bee776941b1e6c197b653811
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKModalSample.uxml b/Assets/Resources/UIToolkit/Sample/Modal/UTKModalSample.uxml
new file mode 100644
index 00000000..d9c37522
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKModalSample.uxml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKModalSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Modal/UTKModalSample.uxml.meta
new file mode 100644
index 00000000..e7cdacd2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKModalSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 0cf3905be994d1247b02ebefc1beb32f
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKNotificationSample.uxml b/Assets/Resources/UIToolkit/Sample/Modal/UTKNotificationSample.uxml
new file mode 100644
index 00000000..56c482c1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKNotificationSample.uxml
@@ -0,0 +1,41 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKNotificationSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Modal/UTKNotificationSample.uxml.meta
new file mode 100644
index 00000000..e8cc5d8c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKNotificationSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: ee2d341bdf4a1e24890200aae4cc279a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKToastSample.uxml b/Assets/Resources/UIToolkit/Sample/Modal/UTKToastSample.uxml
new file mode 100644
index 00000000..f8871b77
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKToastSample.uxml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKToastSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Modal/UTKToastSample.uxml.meta
new file mode 100644
index 00000000..183e64b9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKToastSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 16b2e4c7815da7b44a06f24024a88d20
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKTooltipSample.uxml b/Assets/Resources/UIToolkit/Sample/Modal/UTKTooltipSample.uxml
new file mode 100644
index 00000000..9b10ebb8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKTooltipSample.uxml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Modal/UTKTooltipSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Modal/UTKTooltipSample.uxml.meta
new file mode 100644
index 00000000..14a7ccb0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Modal/UTKTooltipSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 047afd13aa949d64e92a370a8f574bd3
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Picker.meta b/Assets/Resources/UIToolkit/Sample/Picker.meta
new file mode 100644
index 00000000..29252ddd
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Picker.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 16f2e078ac0b99c4ebc779919d086fb2
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Picker/UTKColorPickerSample.uxml b/Assets/Resources/UIToolkit/Sample/Picker/UTKColorPickerSample.uxml
new file mode 100644
index 00000000..6c8342e6
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Picker/UTKColorPickerSample.uxml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Picker/UTKColorPickerSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Picker/UTKColorPickerSample.uxml.meta
new file mode 100644
index 00000000..5965c8e2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Picker/UTKColorPickerSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: daef6e61e809ee743a9737ae89f49a25
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Picker/UTKDatePickerSample.uxml b/Assets/Resources/UIToolkit/Sample/Picker/UTKDatePickerSample.uxml
new file mode 100644
index 00000000..00ab53a8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Picker/UTKDatePickerSample.uxml
@@ -0,0 +1,69 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Picker/UTKDatePickerSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Picker/UTKDatePickerSample.uxml.meta
new file mode 100644
index 00000000..b033d13e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Picker/UTKDatePickerSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 28c79f87e64f6794ca1a62c48db9de85
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Picker/UTKPickerSample.uss b/Assets/Resources/UIToolkit/Sample/Picker/UTKPickerSample.uss
new file mode 100644
index 00000000..92afa99b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Picker/UTKPickerSample.uss
@@ -0,0 +1,22 @@
+/*
+ * ===================================
+ * UTKPickerSample.uss
+ * Picker Sample Specific Styles
+ * ===================================
+ */
+
+.utk-sample-color-preview {
+ width: 60px;
+ height: 30px;
+ background-color: white;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ border-bottom-left-radius: 4px;
+ border-bottom-right-radius: 4px;
+ border-top-width: 1px;
+ border-bottom-width: 1px;
+ border-left-width: 1px;
+ border-right-width: 1px;
+ border-color: rgba(102, 102, 102, 1);
+ margin-right: 10px;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Picker/UTKPickerSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Picker/UTKPickerSample.uss.meta
new file mode 100644
index 00000000..65b5b1fb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Picker/UTKPickerSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c02c4b9cecc43344d8bb1133ab3a5ec1
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Slider.meta b/Assets/Resources/UIToolkit/Sample/Slider.meta
new file mode 100644
index 00000000..8cd33a75
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 4dac5d84b00a81c449eca2b213df87be
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Slider/UTKMinMaxSliderSample.uxml b/Assets/Resources/UIToolkit/Sample/Slider/UTKMinMaxSliderSample.uxml
new file mode 100644
index 00000000..fcad3a82
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider/UTKMinMaxSliderSample.uxml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Slider/UTKMinMaxSliderSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Slider/UTKMinMaxSliderSample.uxml.meta
new file mode 100644
index 00000000..ee218786
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider/UTKMinMaxSliderSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 2e32c28f4286c234489481ec92c00fef
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Slider/UTKProgressBarSample.uxml b/Assets/Resources/UIToolkit/Sample/Slider/UTKProgressBarSample.uxml
new file mode 100644
index 00000000..78f884a1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider/UTKProgressBarSample.uxml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Slider/UTKProgressBarSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Slider/UTKProgressBarSample.uxml.meta
new file mode 100644
index 00000000..37891a37
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider/UTKProgressBarSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3c87ecf76a8c9fd4486ed612975878e8
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderIntSample.uxml b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderIntSample.uxml
new file mode 100644
index 00000000..234be90f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderIntSample.uxml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderIntSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderIntSample.uxml.meta
new file mode 100644
index 00000000..12789eb8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderIntSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: d647ca71fcaf1504fa87105a50b10a57
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uss b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uss
new file mode 100644
index 00000000..811244f2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uss
@@ -0,0 +1,14 @@
+/*
+ * ===================================
+ * UTKSliderSample.uss
+ * Slider Sample Specific Styles
+ * ===================================
+ */
+
+.utk-sample-slider {
+ width: 250px;
+}
+
+.utk-sample-progress {
+ width: 250px;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uss.meta
new file mode 100644
index 00000000..7d0c2cdc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b10ff404f6698a543900814712142233
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uxml b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uxml
new file mode 100644
index 00000000..b45ab210
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uxml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uxml.meta
new file mode 100644
index 00000000..de460240
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Slider/UTKSliderSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 5a2d3be3657876944b80edcec88cad28
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Tab.meta b/Assets/Resources/UIToolkit/Sample/Tab.meta
new file mode 100644
index 00000000..83af7b8c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Tab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: b5ac57ff7b7e19b4a8021714103017e1
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uss b/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uss
new file mode 100644
index 00000000..da6031a4
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uss
@@ -0,0 +1,14 @@
+/*
+ * ===================================
+ * UTKTabViewSample.uss
+ * TabView Sample Specific Styles
+ * ===================================
+ */
+
+.utk-sample-tabview-container {
+ width: 100%;
+ min-height: 220px;
+ margin-bottom: var(--space-m);
+ align-items: flex-start;
+ justify-content: flex-start;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uss.meta
new file mode 100644
index 00000000..85f05df7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: cef011fd6d018d642867ac34b6742c3f
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uxml b/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uxml
new file mode 100644
index 00000000..14a48550
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uxml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uxml.meta
new file mode 100644
index 00000000..ee982965
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Tab/UTKTabViewSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 5985002d7c7475a48b1da7c7004514e5
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/ToolBar.meta b/Assets/Resources/UIToolkit/Sample/ToolBar.meta
new file mode 100644
index 00000000..30b08424
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/ToolBar.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 13901de85d1af3e448f1317374f2e7da
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uss b/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uss
new file mode 100644
index 00000000..57a151bf
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uss
@@ -0,0 +1,44 @@
+/*
+ * ===================================
+ * UTKToolBarSample.uss
+ * Styles for UTKToolBar sample
+ * ===================================
+ */
+
+.utk-toolbar-sample-container {
+ min-height: 48px;
+ background-color: var(--color-bg-secondary);
+ border-radius: 6px;
+ padding: 4px;
+ overflow: visible;
+ align-items: center;
+ align-self: flex-start;
+}
+
+.utk-toolbar-sample-container--vertical {
+ min-height: 240px;
+ max-width: 52px;
+}
+
+.utk-toolbar-sample-result {
+ font-size: 12px;
+ color: var(--color-text-secondary);
+ margin-top: 8px;
+ padding: 8px 12px;
+ background-color: var(--color-bg-secondary);
+ border-radius: 4px;
+ min-height: 20px;
+ white-space: normal;
+}
+
+.utk-toolbar-sample-log {
+ font-size: 11px;
+ color: var(--color-text-secondary);
+ padding: 8px 12px;
+ background-color: var(--color-bg-secondary);
+ border-radius: 4px;
+ min-height: 60px;
+ max-height: 120px;
+ white-space: normal;
+ overflow: hidden;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uss.meta b/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uss.meta
new file mode 100644
index 00000000..64ffa941
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3c7e537449067fd41b2caeec2ea6eedb
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uxml b/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uxml
new file mode 100644
index 00000000..5d159e4b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uxml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uxml.meta
new file mode 100644
index 00000000..6e705fba
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/ToolBar/UTKToolBarSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: a3d648b54b5194f4d9577a6de6dd703a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/UTKSampleCommon.uss b/Assets/Resources/UIToolkit/Sample/UTKSampleCommon.uss
new file mode 100644
index 00000000..c068d503
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/UTKSampleCommon.uss
@@ -0,0 +1,102 @@
+/*
+ * ===================================
+ * UTKSampleCommon.uss
+ * Common styles for UTK component samples
+ * ===================================
+ */
+
+/* ===================================
+ Sample Container
+ =================================== */
+
+.utk-sample-container {
+ flex-direction: column;
+ padding: 24px;
+}
+
+/* ===================================
+ Description
+ =================================== */
+
+.utk-sample-desc {
+ font-size: 13px;
+ color: var(--color-text-secondary);
+ margin-bottom: 20px;
+ padding: 12px 16px;
+ background-color: var(--color-bg-secondary);
+ border-radius: 6px;
+}
+
+/* ===================================
+ Section
+ =================================== */
+
+.utk-sample-section {
+ margin-bottom: 24px;
+}
+
+.utk-sample-section__title {
+ font-size: 14px;
+ -unity-font-style: bold;
+ color: var(--color-text-secondary);
+ margin-bottom: 12px;
+ padding-bottom: 8px;
+ border-bottom-width: 1px;
+ border-bottom-color: var(--color-border-light);
+}
+
+/* ===================================
+ Row
+ =================================== */
+
+.utk-sample-row {
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: center;
+ margin-top: 8px;
+}
+
+.utk-sample-row > * {
+ margin-right: 12px;
+ margin-bottom: 8px;
+}
+
+/* ===================================
+ Column
+ =================================== */
+
+.utk-sample-column {
+ flex-direction: column;
+ margin-top: 8px;
+}
+
+.utk-sample-column > * {
+ margin-bottom: 8px;
+}
+
+/* ===================================
+ Field Row (Label + Input)
+ =================================== */
+
+.utk-sample-field-row {
+ flex-direction: row;
+ align-items: center;
+ margin-bottom: 12px;
+}
+
+.utk-sample-field-row > Label {
+ min-width: 100px;
+ font-size: 13px;
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Caption
+ =================================== */
+
+.utk-sample-caption {
+ font-size: 11px;
+ color: var(--color-text-secondary);
+ margin-top: 4px;
+ -unity-text-align: middle-center;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/UTKSampleCommon.uss.meta b/Assets/Resources/UIToolkit/Sample/UTKSampleCommon.uss.meta
new file mode 100644
index 00000000..8ff8725d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/UTKSampleCommon.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: c2e4c4a14c2281f41af55d83d60b26e5
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/UTKStyleGuideSample.uss b/Assets/Resources/UIToolkit/Sample/UTKStyleGuideSample.uss
new file mode 100644
index 00000000..6c9ab0f9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/UTKStyleGuideSample.uss
@@ -0,0 +1,326 @@
+/*
+ * ===================================
+ * UTKStyleGuideSample.uss
+ * Style Guide Sample Theme-aware Styles
+ * ===================================
+ *
+ * Uses theme variables for Light/Dark theme support.
+ * Color variables are defined in UTKThemeDark.uss / UTKThemeLight.uss.
+ */
+
+/* ===================================
+ Main Container
+ =================================== */
+
+.utk-sample-main {
+ flex-direction: column;
+ background-color: var(--color-bg-base);
+ flex-grow: 1;
+}
+
+/* ===================================
+ Header
+ =================================== */
+
+.utk-sample-header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: 16px 24px;
+ background-color: var(--color-bg-elevated);
+ border-bottom-width: 1px;
+ border-bottom-color: var(--color-border);
+}
+
+.utk-sample-title {
+ font-size: 24px;
+ -unity-font-style: bold;
+ color: var(--color-text-primary);
+}
+
+.utk-sample-theme-area {
+ flex-direction: row;
+ align-items: center;
+}
+
+.utk-sample-theme-label {
+ font-size: 14px;
+ color: var(--color-text-secondary);
+ margin-right: 16px;
+}
+
+/* ===================================
+ Content (Sidebar + Preview)
+ =================================== */
+
+.utk-sample-content {
+ flex-direction: row;
+ flex-grow: 1;
+}
+
+/* ===================================
+ Sidebar
+ =================================== */
+
+.utk-sample-sidebar {
+ width: 280px;
+ min-width: 280px;
+ background-color: var(--color-bg-secondary);
+ border-right-width: 1px;
+ border-right-color: var(--color-border);
+}
+
+.utk-sample-sidebar-scroll {
+ flex-grow: 1;
+ padding: 16px;
+}
+
+.utk-sample-sidebar-scroll > .utk-foldout {
+ margin-bottom: 8px;
+}
+
+/* ===================================
+ Control Item (in sidebar)
+ =================================== */
+
+.utk-sample-control-item {
+ padding: 8px 12px;
+ margin: 2px 0;
+ border-radius: 4px;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+ transition-duration: 0.15s;
+ transition-property: background-color;
+}
+
+.utk-sample-control-item:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-sample-control-item--selected {
+ background-color: var(--color-btn-primary);
+}
+
+.utk-sample-control-item--selected:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+.utk-sample-control-item > Label {
+ font-size: 13px;
+ color: var(--color-text-primary);
+}
+
+.utk-sample-control-item--selected > Label {
+ color: var(--color-text-on-primary);
+}
+
+/* ===================================
+ Preview Area
+ =================================== */
+
+.utk-sample-preview {
+ flex-grow: 1;
+ flex-direction: column;
+ background-color: var(--color-bg-base);
+}
+
+.utk-sample-preview-title {
+ font-size: 20px;
+ -unity-font-style: bold;
+ color: var(--color-text-primary);
+ padding: 20px 24px;
+ background-color: var(--color-bg-elevated);
+ border-bottom-width: 1px;
+ border-bottom-color: var(--color-border);
+}
+
+.utk-sample-preview-scroll {
+ flex-grow: 1;
+ padding: 24px;
+}
+
+.utk-sample-preview-content {
+ flex-direction: column;
+}
+
+/* ===================================
+ Section (in preview)
+ =================================== */
+
+.utk-sample-section {
+ margin-bottom: 24px;
+}
+
+.utk-sample-section__title {
+ font-size: 14px;
+ -unity-font-style: bold;
+ color: var(--color-text-secondary);
+ margin-bottom: 12px;
+ padding-bottom: 8px;
+ border-bottom-width: 1px;
+ border-bottom-color: var(--color-border-light);
+}
+
+.utk-sample-section__desc {
+ font-size: 13px;
+ color: var(--color-text-secondary);
+ margin-bottom: 20px;
+ padding: 12px 16px;
+ background-color: var(--color-bg-secondary);
+ border-radius: 6px;
+}
+
+/* ===================================
+ Row (horizontal layout)
+ =================================== */
+
+.utk-sample-row {
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: center;
+ margin-top: 8px;
+}
+
+.utk-sample-row > * {
+ margin-right: 12px;
+ margin-bottom: 8px;
+}
+
+/* ===================================
+ Legacy Styles (backward compatibility)
+ =================================== */
+
+.utk-sample-stepper-row {
+ flex-direction: row;
+ align-items: center;
+ margin-bottom: 15px;
+}
+
+.utk-sample-stepper-label {
+ width: 100px;
+ font-size: 13px;
+ color: var(--color-text-primary);
+}
+
+.utk-sample-button-row {
+ flex-direction: row;
+ flex-wrap: wrap;
+ align-items: center;
+ margin-bottom: 15px;
+}
+
+.utk-sample-button-row > * {
+ margin-right: 10px;
+ margin-bottom: 5px;
+}
+
+.utk-sample-slider-row {
+ flex-direction: row;
+ align-items: center;
+ margin-bottom: 15px;
+}
+
+.utk-sample-slider-row > Label {
+ min-width: 80px;
+}
+
+.utk-sample-card-row {
+ flex-direction: row;
+ flex-wrap: wrap;
+}
+
+.utk-sample-card-row > * {
+ margin-right: 15px;
+ margin-bottom: 10px;
+}
+
+/* ===================================
+ Icon Slot (for UTKMaterialIcons & UTKImageIcons)
+ =================================== */
+
+.utk-icon-slot {
+ background-color: var(--color-bg-secondary);
+ transition-duration: 0.15s;
+ transition-property: background-color;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+.utk-icon-slot:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-icon-slot__icon {
+ color: var(--color-text-primary);
+}
+
+.utk-icon-slot__name {
+ color: var(--color-text-secondary);
+}
+
+.utk-icon-slot__image {
+ /* 이미지 아이콘은 원본 색상 유지 */
+}
+
+/* ===================================
+ Code Block
+ =================================== */
+
+.utk-code-block {
+ background-color: var(--color-bg-secondary);
+ border-radius: 6px;
+ margin-bottom: 12px;
+ overflow: hidden;
+}
+
+.utk-code-block__header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ padding: 8px 12px;
+ background-color: var(--color-bg-elevated);
+ border-bottom-width: 1px;
+ border-bottom-color: var(--color-border-light);
+}
+
+.utk-code-block__title {
+ font-size: 11px;
+ -unity-font-style: bold;
+ color: var(--color-text-secondary);
+}
+
+.utk-code-block__copy-btn {
+ padding: 2px 8px;
+ height: 22px;
+}
+
+.utk-code-block__content {
+ padding: 12px;
+}
+
+.utk-code-block__code {
+ background-color: transparent;
+ border-width: 0;
+ padding: 0;
+ margin: 0;
+ flex-grow: 1;
+}
+
+.utk-code-block__code > .unity-base-text-field__input {
+ background-color: transparent;
+ border-width: 0;
+ padding: 0;
+ margin: 0;
+ font-size: 12px;
+ color: var(--color-text-primary);
+ white-space: pre-wrap;
+ -unity-text-align: upper-left;
+ overflow: visible;
+}
+
+.utk-code-sample-container {
+ margin-top: 16px;
+ margin-bottom: 8px;
+}
+
+.utk-code-sample-container > .utk-code-block {
+ margin-bottom: 8px;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/UTKStyleGuideSample.uss.meta b/Assets/Resources/UIToolkit/Sample/UTKStyleGuideSample.uss.meta
new file mode 100644
index 00000000..e8a53d05
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/UTKStyleGuideSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 75552633a0e64384894930c530fe73e1
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Sample/Window.meta b/Assets/Resources/UIToolkit/Sample/Window.meta
new file mode 100644
index 00000000..1ba71336
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a5464101e260c7c47924298006864957
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKAccordionListWindowSample.uxml b/Assets/Resources/UIToolkit/Sample/Window/UTKAccordionListWindowSample.uxml
new file mode 100644
index 00000000..9b277175
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKAccordionListWindowSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKAccordionListWindowSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Window/UTKAccordionListWindowSample.uxml.meta
new file mode 100644
index 00000000..e59c4b08
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKAccordionListWindowSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: d73f28c7e05421d4092bae5eff8c041a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKComponentListWindowSample.uxml b/Assets/Resources/UIToolkit/Sample/Window/UTKComponentListWindowSample.uxml
new file mode 100644
index 00000000..800b2d03
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKComponentListWindowSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKComponentListWindowSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Window/UTKComponentListWindowSample.uxml.meta
new file mode 100644
index 00000000..2efb10a9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKComponentListWindowSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 25afcb79f01aa7f4ba3c5cb0105332f8
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKComponentTabListWindowSample.uxml b/Assets/Resources/UIToolkit/Sample/Window/UTKComponentTabListWindowSample.uxml
new file mode 100644
index 00000000..fafd56e4
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKComponentTabListWindowSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKComponentTabListWindowSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Window/UTKComponentTabListWindowSample.uxml.meta
new file mode 100644
index 00000000..0fa6954b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKComponentTabListWindowSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 35ee99024ae0d734184ea6faf770fd30
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKImageListWindowSample.uxml b/Assets/Resources/UIToolkit/Sample/Window/UTKImageListWindowSample.uxml
new file mode 100644
index 00000000..72d74ef1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKImageListWindowSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKImageListWindowSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Window/UTKImageListWindowSample.uxml.meta
new file mode 100644
index 00000000..4710b10a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKImageListWindowSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 500d626a4cd6fa3468ecb877e41f84d2
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml b/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml
new file mode 100644
index 00000000..6cf80f86
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml.meta
new file mode 100644
index 00000000..197d20d0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKPropertyListWindowSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 54e937514ef603843a1767c5aebbea66
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKTreeListWindowSample.uxml b/Assets/Resources/UIToolkit/Sample/Window/UTKTreeListWindowSample.uxml
new file mode 100644
index 00000000..b658cbb5
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKTreeListWindowSample.uxml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKTreeListWindowSample.uxml.meta b/Assets/Resources/UIToolkit/Sample/Window/UTKTreeListWindowSample.uxml.meta
new file mode 100644
index 00000000..56b2edec
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKTreeListWindowSample.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: f7ffda55e7f57d14cbfa736a81e6edb4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKWindowSample.uss b/Assets/Resources/UIToolkit/Sample/Window/UTKWindowSample.uss
new file mode 100644
index 00000000..145fcc4e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKWindowSample.uss
@@ -0,0 +1,23 @@
+/*
+ * ===================================
+ * UTKWindowSample.uss
+ * Styles for UTK Window component samples
+ * ===================================
+ */
+
+/* ===================================
+ Window Sample Container
+ =================================== */
+
+.utk-window-sample-container {
+ width: 300px;
+ height: 400px;
+ border-width: 1px;
+ border-color: var(--color-border-light);
+ border-radius: 8px;
+ overflow: hidden;
+}
+
+.utk-window-sample-container > * {
+ flex-grow: 1;
+}
diff --git a/Assets/Resources/UIToolkit/Sample/Window/UTKWindowSample.uss.meta b/Assets/Resources/UIToolkit/Sample/Window/UTKWindowSample.uss.meta
new file mode 100644
index 00000000..d2bbb627
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Sample/Window/UTKWindowSample.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f29f5250983c71746a3384dd4af8a5c4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Slider.meta b/Assets/Resources/UIToolkit/Slider.meta
new file mode 100644
index 00000000..1d69bb81
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Slider.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5666d26c279afab4daa7aecba33758fe
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Slider/UTKMinMaxSlider.uss b/Assets/Resources/UIToolkit/Slider/UTKMinMaxSlider.uss
new file mode 100644
index 00000000..caaead0e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Slider/UTKMinMaxSlider.uss
@@ -0,0 +1,121 @@
+/*
+ * ===================================
+ * UTKMinMaxSlider.uss
+ * Unity MinMaxSlider 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-minmax-slider {
+ flex-direction: row;
+ align-items: center;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-minmax-slider > .unity-label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Slider Container
+ =================================== */
+
+.utk-minmax-slider > .unity-min-max-slider__input {
+ flex-grow: 1;
+ height: 20px;
+ align-items: center;
+}
+
+/* ===================================
+ Tracker (Background)
+ =================================== */
+
+.utk-minmax-slider .unity-min-max-slider__tracker {
+ height: 6px;
+ border-radius: 3px;
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ Dragger (Fill between min and max)
+ =================================== */
+
+.utk-minmax-slider .unity-min-max-slider__dragger {
+ height: 6px;
+ background-color: var(--color-btn-primary);
+ border-radius: 0px;
+ border-width: 0;
+ margin-left: -1px;
+ margin-right: -1px;
+}
+
+/* ===================================
+ Min/Max Thumbs
+ =================================== */
+
+.utk-minmax-slider .unity-min-max-slider__min-thumb,
+.utk-minmax-slider .unity-min-max-slider__max-thumb {
+ width: 16px;
+ height: 16px;
+ min-height: 16px;
+ margin-top: -6px;
+ border-radius: var(--radius-full);
+ background-color: var(--color-btn-primary);
+ border-width: 0;
+ transition-duration: var(--anim-fast);
+ transition-property: scale;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+.utk-minmax-slider .unity-min-max-slider__min-thumb:hover,
+.utk-minmax-slider .unity-min-max-slider__max-thumb:hover {
+ scale: 1.1;
+}
+
+.utk-minmax-slider:active .unity-min-max-slider__min-thumb,
+.utk-minmax-slider:active .unity-min-max-slider__max-thumb {
+ scale: 1.2;
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-minmax-slider--disabled {
+ cursor: arrow;
+}
+
+.utk-minmax-slider--disabled .unity-min-max-slider__tracker {
+ background-color: var(--color-btn-disabled);
+}
+
+.utk-minmax-slider--disabled .unity-min-max-slider__dragger {
+ background-color: var(--color-text-disabled);
+}
+
+.utk-minmax-slider--disabled .unity-min-max-slider__min-thumb,
+.utk-minmax-slider--disabled .unity-min-max-slider__max-thumb {
+ background-color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-minmax-slider--disabled .unity-min-max-slider__min-thumb:hover,
+.utk-minmax-slider--disabled .unity-min-max-slider__max-thumb:hover {
+ scale: 1;
+}
+
+.utk-minmax-slider--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Slider/UTKMinMaxSlider.uss.meta b/Assets/Resources/UIToolkit/Slider/UTKMinMaxSlider.uss.meta
new file mode 100644
index 00000000..8d74a23f
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Slider/UTKMinMaxSlider.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 08c62bbc8840c124892da594b126302d
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Slider/UTKProgressBar.uss b/Assets/Resources/UIToolkit/Slider/UTKProgressBar.uss
new file mode 100644
index 00000000..e3991787
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Slider/UTKProgressBar.uss
@@ -0,0 +1,132 @@
+/*
+ * ===================================
+ * UTKProgressBar.uss
+ * Unity ProgressBar 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-progress {
+ flex-direction: column;
+}
+
+/* ===================================
+ Title (Label)
+ =================================== */
+
+.utk-progress > .unity-progress-bar__title {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ margin-bottom: var(--space-s);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Container (Track)
+ =================================== */
+
+.utk-progress > .unity-progress-bar__container {
+ height: 14px;
+ min-height: 14px;
+ border-radius: 7px;
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ overflow: visible;
+}
+
+/* ===================================
+ Title Container
+ =================================== */
+
+.utk-progress .unity-progress-bar__title-container {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+ justify-content: center;
+ align-items: center;
+ overflow: visible;
+}
+
+.utk-progress .unity-progress-bar__title {
+ font-size: var(--font-size-label4);
+ -unity-font-style: bold;
+ color: var(--color-text-primary);
+ -unity-text-align: middle-center;
+ overflow: visible;
+}
+
+/* ===================================
+ Background (Track Background)
+ =================================== */
+
+.utk-progress .unity-progress-bar__background {
+ background-color: transparent;
+ border-radius: 7px;
+ border-width: 0;
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ Progress (Fill)
+ =================================== */
+
+.utk-progress .unity-progress-bar__progress {
+ height: 100%;
+ background-color: var(--color-btn-primary);
+ border-radius: 7px;
+ transition-duration: var(--anim-normal);
+ transition-property: width;
+ margin: 0;
+}
+
+/* ===================================
+ Variants
+ =================================== */
+
+.utk-progress--default .unity-progress-bar__progress {
+ background-color: var(--color-btn-primary);
+}
+
+.utk-progress--success .unity-progress-bar__progress {
+ background-color: var(--color-state-success);
+}
+
+.utk-progress--warning .unity-progress-bar__progress {
+ background-color: var(--color-state-warning);
+}
+
+.utk-progress--error .unity-progress-bar__progress {
+ background-color: var(--color-state-error);
+}
+
+/* ===================================
+ Indeterminate Animation
+ =================================== */
+
+/* Unity USS does not support CSS animations (@keyframes, animation-* properties) */
+/* Indeterminate progress bar animation must be implemented in C# code using DOTween or similar */
+/* .utk-progress--indeterminate .unity-progress-bar__progress {
+ width: 30%;
+ animation-name: indeterminate-slide;
+ animation-duration: 1.5s;
+ animation-iteration-count: infinite;
+ animation-timing-function: ease-in-out;
+}
+
+@keyframes indeterminate-slide {
+ 0% {
+ translate: -100% 0;
+ }
+ 50% {
+ translate: 200% 0;
+ }
+ 100% {
+ translate: -100% 0;
+ }
+} */
diff --git a/Assets/Resources/UIToolkit/Slider/UTKProgressBar.uss.meta b/Assets/Resources/UIToolkit/Slider/UTKProgressBar.uss.meta
new file mode 100644
index 00000000..d5fe70b0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Slider/UTKProgressBar.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d6980efdd46b2a8479bf3210ecd3980e
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Slider/UTKSlider.uss b/Assets/Resources/UIToolkit/Slider/UTKSlider.uss
new file mode 100644
index 00000000..1a6b1f48
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Slider/UTKSlider.uss
@@ -0,0 +1,183 @@
+/*
+ * ===================================
+ * UTKSlider.uss
+ * Unity Slider 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-slider {
+ flex-direction: row;
+ align-items: center;
+}
+
+/* ===================================
+ Label
+ =================================== */
+
+.utk-slider > .unity-label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+/* ===================================
+ Slider Container
+ =================================== */
+
+.utk-slider > .unity-slider__input {
+ flex-grow: 1;
+ flex-direction: row;
+ align-items: center;
+}
+
+/* ===================================
+ Track Container
+ =================================== */
+
+.utk-slider .unity-base-slider__tracker {
+ height: 6px;
+ border-radius: 3px;
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+/* ===================================
+ Drag Container
+ =================================== */
+
+.utk-slider .unity-base-slider__drag-container {
+ height: 6px;
+}
+
+/* ===================================
+ Dragger (Fill + Thumb)
+ =================================== */
+
+.utk-slider .unity-base-slider__dragger {
+ width: 16px;
+ height: 16px;
+ margin-top: -8px;
+ border-radius: var(--radius-full);
+ background-color: var(--color-btn-primary);
+ border-width: 0;
+ transition-duration: var(--anim-fast);
+ transition-property: scale;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+.utk-slider .unity-base-slider__dragger:hover {
+ scale: 1.1;
+}
+
+.utk-slider:active .unity-base-slider__dragger {
+ scale: 1.2;
+}
+
+/* ===================================
+ Disabled State
+ =================================== */
+
+.utk-slider--disabled {
+ cursor: arrow;
+}
+
+.utk-slider--disabled .unity-base-slider__tracker {
+ background-color: var(--color-btn-disabled);
+}
+
+.utk-slider--disabled .unity-base-slider__dragger {
+ background-color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-slider--disabled .unity-base-slider__dragger:hover {
+ scale: 1;
+}
+
+.utk-slider--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
+
+/* ===================================
+ SliderInt 스타일 (UTKSliderInt)
+ =================================== */
+
+.utk-slider-int {
+ flex-direction: row;
+ align-items: center;
+}
+
+.utk-slider-int > .unity-label {
+ min-width: 60px;
+ margin-right: var(--space-m);
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+}
+
+.utk-slider-int > .unity-slider-int__input {
+ flex-grow: 1;
+ flex-direction: row;
+ align-items: center;
+}
+
+.utk-slider-int .unity-base-slider__tracker {
+ height: 6px;
+ border-radius: 3px;
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+.utk-slider-int .unity-base-slider__drag-container {
+ height: 6px;
+}
+
+.utk-slider-int .unity-base-slider__dragger {
+ width: 16px;
+ height: 16px;
+ margin-top: -8px;
+ border-radius: var(--radius-full);
+ background-color: var(--color-btn-primary);
+ border-width: 0;
+ transition-duration: var(--anim-fast);
+ transition-property: scale;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+.utk-slider-int .unity-base-slider__dragger:hover {
+ scale: 1.1;
+}
+
+.utk-slider-int:active .unity-base-slider__dragger {
+ scale: 1.2;
+}
+
+/* SliderInt Disabled State */
+.utk-slider-int.utk-slider--disabled {
+ cursor: arrow;
+}
+
+.utk-slider-int.utk-slider--disabled .unity-base-slider__tracker {
+ background-color: var(--color-btn-disabled);
+}
+
+.utk-slider-int.utk-slider--disabled .unity-base-slider__dragger {
+ background-color: var(--color-text-disabled);
+ cursor: arrow;
+}
+
+.utk-slider-int.utk-slider--disabled .unity-base-slider__dragger:hover {
+ scale: 1;
+}
+
+.utk-slider-int.utk-slider--disabled > .unity-label {
+ color: var(--color-text-disabled);
+}
diff --git a/Assets/Resources/UIToolkit/Slider/UTKSlider.uss.meta b/Assets/Resources/UIToolkit/Slider/UTKSlider.uss.meta
new file mode 100644
index 00000000..65df49ee
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Slider/UTKSlider.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 20f7efed694845b4c8825157749996f9
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Style.meta b/Assets/Resources/UIToolkit/Style.meta
new file mode 100644
index 00000000..5e0b9a76
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a825db9fef7d0b444add478047ac30ff
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Style/UTKComponents.uss b/Assets/Resources/UIToolkit/Style/UTKComponents.uss
new file mode 100644
index 00000000..9ed27299
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKComponents.uss
@@ -0,0 +1,422 @@
+/*
+ * ===================================
+ * UTKComponents.uss
+ * 재사용 가능한 컴포넌트 클래스 정의
+ * ===================================
+ *
+ * 이 파일은 C# 인라인 스타일을 대체하는 USS 클래스를 정의합니다.
+ * 모든 색상은 테마 변수를 참조하여 테마 전환 시 자동 반영됩니다.
+ *
+ * 네이밍 컨벤션:
+ * - .utk-{component} : 컴포넌트 루트
+ * - .utk-{component}__{element} : 자식 요소
+ * - .utk-{component}--{modifier} : 상태/변형
+ */
+
+
+/* ===================================
+ Modal / Panel Base
+ =================================== */
+
+.utk-modal {
+ position: absolute;
+ background-color: var(--color-bg-modal);
+ border-radius: var(--radius-l);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ min-width: var(--size-modal-min-width);
+}
+
+.utk-modal--draggable {
+ /* 드래그 가능한 모달 */
+}
+
+.utk-panel {
+ background-color: var(--color-bg-panel);
+ border-radius: var(--radius-m);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+}
+
+.utk-overlay {
+ position: absolute;
+ left: 0;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ background-color: var(--color-bg-overlay);
+}
+
+
+/* ===================================
+ Header
+ =================================== */
+
+.utk-header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ height: 32px;
+ padding-left: var(--space-l);
+ padding-right: var(--space-s);
+ background-color: var(--color-bg-elevated);
+ border-bottom-width: var(--border-width);
+ border-bottom-color: var(--color-border);
+}
+
+.utk-header--rounded {
+ border-top-left-radius: var(--radius-l);
+ border-top-right-radius: var(--radius-l);
+}
+
+.utk-header__title {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-body1);
+ -unity-font-style: bold;
+}
+
+.utk-header__subtitle {
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-body2);
+}
+
+
+/* ===================================
+ Buttons
+ =================================== */
+
+.utk-btn {
+ height: var(--size-btn-height);
+ min-width: var(--size-btn-min-width);
+ padding-left: var(--space-l);
+ padding-right: var(--space-l);
+ background-color: var(--color-btn-normal);
+ border-width: 0;
+ border-radius: var(--radius-m);
+ color: var(--color-text-primary);
+ font-size: var(--font-size-body2);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+}
+
+.utk-btn:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.utk-btn:active {
+ background-color: var(--color-btn-pressed);
+}
+
+.utk-btn:disabled {
+ background-color: var(--color-btn-disabled);
+ color: var(--color-text-disabled);
+}
+
+.utk-btn--primary {
+ background-color: var(--color-btn-primary);
+ color: var(--color-base-01);
+}
+
+.utk-btn--primary:hover {
+ background-color: var(--color-btn-primary-hover);
+}
+
+.utk-btn--secondary {
+ background-color: var(--color-btn-secondary);
+}
+
+.utk-btn--secondary:hover {
+ background-color: var(--color-btn-secondary-hover);
+}
+
+.utk-btn--ghost {
+ background-color: transparent;
+ border-width: 0;
+}
+
+.utk-btn--ghost:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+}
+
+.utk-btn--icon {
+ width: var(--size-icon-btn);
+ height: var(--size-icon-btn);
+ min-width: var(--size-icon-btn);
+ padding: 0;
+ background-color: transparent;
+ border-width: 0;
+}
+
+.utk-btn--icon:hover {
+ background-color: rgba(255, 255, 255, 0.1);
+ border-radius: var(--radius-m);
+}
+
+.utk-btn--close {
+ width: 24px;
+ height: 24px;
+ min-width: 24px;
+ padding: 0;
+ background-color: transparent;
+ border-width: 0;
+ color: var(--color-text-secondary);
+ font-size: 14px;
+}
+
+.utk-btn--close:hover {
+ color: var(--color-text-primary);
+ background-color: rgba(255, 255, 255, 0.1);
+ border-radius: var(--radius-m);
+}
+
+
+/* ===================================
+ Text / Labels
+ =================================== */
+
+.utk-text--primary {
+ color: var(--color-text-primary);
+}
+
+.utk-text--secondary {
+ color: var(--color-text-secondary);
+}
+
+.utk-text--disabled {
+ color: var(--color-text-disabled);
+}
+
+.utk-text--placeholder {
+ color: var(--color-text-placeholder);
+}
+
+.utk-text--error {
+ color: var(--color-state-error);
+}
+
+.utk-text--success {
+ color: var(--color-state-success);
+}
+
+.utk-text--warning {
+ color: var(--color-state-warning);
+}
+
+.utk-text--h1 {
+ font-size: var(--font-size-h1);
+ -unity-font-style: bold;
+}
+
+.utk-text--h2 {
+ font-size: var(--font-size-h2);
+ -unity-font-style: bold;
+}
+
+.utk-text--body1 {
+ font-size: var(--font-size-body1);
+}
+
+.utk-text--body2 {
+ font-size: var(--font-size-body2);
+}
+
+.utk-text--label {
+ font-size: var(--font-size-label2);
+}
+
+
+/* ===================================
+ Input Fields
+ =================================== */
+
+.utk-input {
+ height: var(--size-input-height);
+ color: var(--color-text-primary);
+ font-size: var(--font-size-body1);
+}
+
+.utk-input:focus {
+ border-color: var(--color-border-focus);
+}
+
+.utk-input--error {
+ border-color: var(--color-border-error);
+}
+
+
+/* ===================================
+ Vector Fields (X, Y, Z)
+ =================================== */
+
+.utk-vector-label--x {
+ color: var(--color-vector-x);
+ min-width: 16px;
+ -unity-text-align: middle-center;
+}
+
+.utk-vector-label--y {
+ color: var(--color-vector-y);
+ min-width: 16px;
+ -unity-text-align: middle-center;
+}
+
+.utk-vector-label--z {
+ color: var(--color-vector-z);
+ min-width: 16px;
+ -unity-text-align: middle-center;
+}
+
+
+/* ===================================
+ Tooltip
+ =================================== */
+
+.utk-tooltip {
+ position: absolute;
+ background-color: var(--color-bg-tooltip);
+ border-radius: var(--radius-m);
+ padding: var(--space-s) var(--space-m);
+ max-width: 300px;
+}
+
+.utk-tooltip__text {
+ color: var(--color-base-01);
+ font-size: var(--font-size-body2);
+ white-space: normal;
+}
+
+
+/* ===================================
+ Drag Ghost
+ =================================== */
+
+.utk-drag-ghost {
+ position: absolute;
+ opacity: 0.8;
+ background-color: var(--color-drag-ghost-bg);
+ border-radius: var(--radius-m);
+}
+
+
+/* ===================================
+ State Indicators
+ =================================== */
+
+.utk-state--success {
+ background-color: var(--color-state-success);
+}
+
+.utk-state--warning {
+ background-color: var(--color-state-warning);
+}
+
+.utk-state--error {
+ background-color: var(--color-state-error);
+}
+
+.utk-state--info {
+ background-color: var(--color-state-info);
+}
+
+
+/* ===================================
+ Calendar
+ =================================== */
+
+.utk-calendar__day--sunday {
+ color: var(--color-calendar-sunday);
+}
+
+.utk-calendar__day--saturday {
+ color: var(--color-calendar-saturday);
+}
+
+.utk-calendar__day--today {
+ background-color: var(--color-calendar-today);
+ border-radius: var(--radius-m);
+}
+
+.utk-calendar__day--selected {
+ background-color: var(--color-calendar-selected);
+ border-radius: var(--radius-m);
+}
+
+
+/* ===================================
+ Divider / Separator
+ =================================== */
+
+.utk-divider {
+ height: var(--border-width);
+ background-color: var(--color-border);
+ margin-top: var(--space-m);
+ margin-bottom: var(--space-m);
+}
+
+.utk-divider--vertical {
+ width: var(--border-width);
+ height: auto;
+ margin-left: var(--space-m);
+ margin-right: var(--space-m);
+}
+
+
+/* ===================================
+ Spacing Utilities
+ =================================== */
+
+.utk-p-xs { padding: var(--space-xs); }
+.utk-p-s { padding: var(--space-s); }
+.utk-p-m { padding: var(--space-m); }
+.utk-p-l { padding: var(--space-l); }
+.utk-p-xl { padding: var(--space-xl); }
+
+.utk-m-xs { margin: var(--space-xs); }
+.utk-m-s { margin: var(--space-s); }
+.utk-m-m { margin: var(--space-m); }
+.utk-m-l { margin: var(--space-l); }
+.utk-m-xl { margin: var(--space-xl); }
+
+.utk-gap-xs { margin-bottom: var(--space-xs); }
+.utk-gap-s { margin-bottom: var(--space-s); }
+.utk-gap-m { margin-bottom: var(--space-m); }
+.utk-gap-l { margin-bottom: var(--space-l); }
+
+
+/* ===================================
+ Layout Utilities
+ =================================== */
+
+.utk-row {
+ flex-direction: row;
+}
+
+.utk-col {
+ flex-direction: column;
+}
+
+.utk-center {
+ justify-content: center;
+ align-items: center;
+}
+
+.utk-space-between {
+ justify-content: space-between;
+}
+
+.utk-flex-grow {
+ flex-grow: 1;
+}
+
+.utk-flex-shrink {
+ flex-shrink: 1;
+}
+
+/* ===================================
+ Border Radius Utilities
+ =================================== */
+
+.utk-rounded-s { border-radius: var(--radius-s); }
+.utk-rounded-m { border-radius: var(--radius-m); }
+.utk-rounded-l { border-radius: var(--radius-l); }
+.utk-rounded-full { border-radius: var(--radius-full); }
diff --git a/Assets/Resources/UIToolkit/Style/UTKComponents.uss.meta b/Assets/Resources/UIToolkit/Style/UTKComponents.uss.meta
new file mode 100644
index 00000000..04d767e7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKComponents.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 8891f6df576b60f4698429e0dcbe8095
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Style/UTKDefaultRuntimeTheme.tss b/Assets/Resources/UIToolkit/Style/UTKDefaultRuntimeTheme.tss
new file mode 100644
index 00000000..e5b81c12
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKDefaultRuntimeTheme.tss
@@ -0,0 +1,13 @@
+@import url("unity-theme://default");
+
+@import url("UTKVariables.uss");
+@import url("UTKComponents.uss");
+@import url("UTKDefaultStyle.uss");
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Style/UTKDefaultRuntimeTheme.tss.meta b/Assets/Resources/UIToolkit/Style/UTKDefaultRuntimeTheme.tss.meta
new file mode 100644
index 00000000..462b0192
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKDefaultRuntimeTheme.tss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 3658c4df19569594295f511142185317
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12388, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Style/UTKDefaultStyle.uss b/Assets/Resources/UIToolkit/Style/UTKDefaultStyle.uss
new file mode 100644
index 00000000..db5fe94c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKDefaultStyle.uss
@@ -0,0 +1,474 @@
+/*
+ * ===================================
+ * UTKDefaultStyle.uss
+ * Unity 기본 UI 요소 스타일 오버라이드
+ * ===================================
+ *
+ * 이 파일은 Unity의 기본 UI 요소들을 커스터마이징합니다.
+ * 변수 정의는 하지 않으며, 테마 파일의 변수를 참조합니다.
+ *
+ * [변수 정의 위치]
+ * - UTKVariables.uss : 레이아웃 변수 (spacing, radius, font-size 등)
+ * - UTKThemeDark.uss / UTKThemeLight.uss : 색상 변수
+ *
+ * [주요 스타일]
+ * 1. 드롭다운 팝업 스타일
+ * 2. TreeView 항목 스타일
+ * 3. 컬렉션 뷰 항목 스타일 (선택, 호버)
+ * 4. 수직/수평 스크롤바 스타일
+ */
+
+/* ===================================
+드롭다운 팝업 아이템 스타일
+- DropdownField의 팝업 메뉴 항목 스타일
+- UTKComponents.uss에서 전역 스타일 정의됨
+=================================== */
+
+/* 여기서 변수 선언 하는 이유는 Dropdown의 팝업에 테마가 적용되지 않기에
+ 별도로 지정하기 위함입니다. */
+.unity-base-dropdown * {
+ --color-base-01: #FFFFFF;
+ --color-base-02: #F8F8F8;
+ --color-border: #D0D0D0;
+ --color-collection-item-hover: #004578;
+ --color-item-selected-bg: #004578;
+ --color-item-selected-bg-hover: ##003F6E;
+ --color-text-primary: #222222;
+ --color-text-primary-hover: #1C1C1C;
+}
+
+/* 드롭다운 최외곽 컨테이너 - border-radius 및 border 적용
+ UTKComponents.uss에도 정의되어 있지만, Unity 기본 스타일시트가 나중에 로드되어
+ 덮어쓰기 때문에를 사용하여 강제로 오버라이드합니다.
+ border와 border-radius를 같은 요소에 적용하여 코너 렌더링 문제 방지. */
+.unity-base-dropdown__container-outer {
+ border-radius: var(--radius-s) ;
+ border-width: 1px ;
+ border-color: var(--color-border) ;
+ overflow: hidden ;
+}
+
+/* 드롭다운 내부 컨테이너 - 패딩 제거 */
+.unity-base-dropdown__container-inner {
+ padding: 0px;
+ background-color: var(--color-base-01) ;
+}
+
+/* 드롭다운 항목 hover 스타일 - Unity 기본 스타일 오버라이드
+ 다크 테마에 적합한 어두운 회색(#333333)으로 설정.
+ Unity의 기본 cyan 계열 hover 색상을 덮어쓰기 위해 사용.
+ :enabled 의사 클래스는 Unity 기본 스타일과 동일한 specificity 확보용. */
+.unity-base-dropdown__item:hover:enabled {
+ background-color: var(--color-collection-item-hover) ;
+ color: var(--color-text-primary);
+}
+
+/* 드롭다운 항목 콘텐츠 */
+.unity-base-dropdown__item-content {
+ flex-direction: row;
+ align-items: center;
+}
+
+.unity-base-dropdown__item:hover:enabled .unity-base-dropdown__item-content {
+ background-color: var(--color-collection-item-hover) ;
+}
+
+.unity-base-dropdown__item:checked {
+ background-color: var(--color-item-selected-bg);
+ color: #ffffff;
+}
+
+.unity-base-dropdown__item:checked:hover {
+ background-color: var(--color-item-selected-bg-hover);
+}
+
+.unity-base-dropdown__item:checked .unity-base-dropdown__item-content {
+ background-color: var(--color-item-selected-bg);
+}
+
+.unity-base-dropdown__item:checked:hover .unity-base-dropdown__item-content {
+ background-color: var(--color-item-selected-bg-hover);
+}
+
+.unity-base-dropdown__item:checked .unity-base-dropdown__label {
+ color: var(--color-base-01);
+}
+
+/* 드롭다운 호버 시 텍스트 색상 */
+.unity-base-dropdown__item:hover .unity-base-dropdown__label {
+ color: var(--color-text-primary-hover);
+}
+
+.unity-base-dropdown__item:checked:hover .unity-base-dropdown__label {
+ color: var(--color-text-primary);
+}
+
+/* 드롭다운 체크마크 크기 오버라이드
+ Unity 런타임 테마의 체크마크 스타일(.unity-base-dropdown__item > .unity-base-dropdown__item-content > .unity-base-dropdown__checkmark)을
+ 덮어쓰기 위해 동일한 specificity + 순서 우선 또는 더 높은 specificity 사용 */
+.unity-base-dropdown__item > .unity-base-dropdown__item-content > .unity-base-dropdown__checkmark {
+ width: 16px;
+ height: 16px;
+ min-width: 16px;
+ min-height: 16px;
+ -unity-background-image-tint-color: var(--color-base-01);
+}
+
+.unity-base-dropdown__item {
+ height: 28px;
+ padding-left: var(--space-m);
+ padding-right: var(--space-m);
+ padding-top: var(--space-xs);
+ padding-bottom: var(--space-xs);
+ background-color: transparent;
+ border-radius: 0;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+/* 드롭다운 라벨 스타일 오버라이드 */
+.unity-base-dropdown__item .unity-base-dropdown__label {
+ font-size: 12px;
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+ padding-left: 0;
+ padding-right: 0;
+ padding-top: 0;
+ padding-bottom: 0;
+ margin-left: 0;
+ margin-right: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+}
+
+
+/* ===================================
+ListView/TreeView 항목 텍스트 스타일
+- Unity 기본 스타일 오버라이드
+=================================== */
+
+/* ListView 항목 컨테이너 자체에 색상 지정 */
+.unity-collection-view__item,
+.unity-list-view__item {
+ color: var(--color-text-primary) ;
+}
+
+/* ListView 항목 텍스트 색상 및 크기 - 다크 테마용 */
+.unity-collection-view__item .unity-label,
+.unity-collection-view__item .unity-text-element,
+.unity-list-view__item .unity-label,
+.unity-list-view__item .unity-text-element {
+ color: var(--color-text-primary) ;
+ font-size: var(--font-size-body2) ;
+ margin: 0;
+}
+
+.unity-collection-view__item--selected,
+.unity-list-view__item--selected {
+ color: var(--color-base-01) ;
+}
+
+.unity-collection-view__item--selected .unity-label,
+.unity-collection-view__item--selected .unity-text-element,
+.unity-list-view__item--selected .unity-label,
+.unity-list-view__item--selected .unity-text-element {
+ color: var(--color-base-01) ;
+}
+
+.unity-tree-view__item-content {
+ align-self: center;
+ flex-direction: row;
+}
+
+/* TreeView 항목 텍스트 색상 */
+.unity-tree-view__item .unity-label,
+.unity-tree-view__item .unity-text-element {
+ color: var(--color-text-primary) ;
+ -unity-text-align: middle-left;
+ padding: 0;
+ margin: 0;
+}
+
+.unity-tree-view__item--selected .unity-label,
+.unity-tree-view__item--selected .unity-text-element {
+ color: var(--color-base-01) ;
+}
+
+
+/* ===================================
+TreeView 항목 스타일
+- TreeView의 펼치기/접기 토글 버튼 스타일
+=================================== */
+
+/* TreeView 펼치기/접기 화살표 토글 - 크기 및 정렬 조정 */
+.unity-tree-view__item-toggle {
+ margin-top: 0;
+ margin-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ width: 20px;
+ height: 20px;
+ min-width: 20px;
+ min-height: 20px;
+ padding: 0;
+ align-self: center;
+ -unity-background-image-tint-color: var(--color-text-secondary);
+}
+
+.unity-tree-view__item-toggle:hover {
+ -unity-background-image-tint-color: var(--color-text-primary);
+}
+
+/* TreeView 토글 입력 영역 - 회전 중심 맞추기 */
+.unity-tree-view__item-toggle > .unity-toggle__input {
+ width: 20px;
+ height: 20px;
+ min-width: 20px;
+ min-height: 20px;
+ align-items: center;
+ justify-content: center;
+ padding: 0;
+ margin: 0;
+}
+
+/* TreeView 토글 체크마크(화살표 아이콘) */
+.unity-tree-view__item-toggle > .unity-toggle__input > #unity-checkmark {
+ width: 20px;
+ height: 20px;
+ min-width: 20px;
+ min-height: 20px;
+}
+
+/* TreeView 토글 체크됨(펼쳐진 상태) - 회전 없음 */
+.unity-tree-view__item-toggle:checked > .unity-toggle__input > #unity-checkmark {
+ rotate: 0deg;
+}
+
+#unity-checkmark {
+ -unity-background-image-tint-color: var(--color-tree-checkmark);
+}
+
+#unity-tree-view__item-toggle > VisualElement > VisualElement {
+ margin-left: 0;
+ margin-right: 0;
+ width: 22px;
+}
+
+/* ===================================
+Textfield 항목 스타일
+=================================== */
+
+.unity-base-text-field {
+ border-radius: 4px;
+ /* height: 24px; */
+ height: auto;
+ width: auto;
+ margin-top: 0;
+ margin-bottom: 0;
+ margin-right: 0;
+ margin-left: 0;
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ /* --unity-selection-color: rgba(54, 98, 160, 0.651); 선택 색상 */
+ --unity-cursor-color: var(--color-base-01); /* 캐럿(커서) 색상 흰색 */
+ font-size: 13px;
+ color: var(--color-text-primary);
+}
+
+ .unity-base-text-field__input {
+ padding-top: 4px;
+ padding-right: 24px;
+ padding-bottom: 4px;
+ padding-left: 4px;
+ border-radius: var(--radius-s);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ background-color: var(--color-bg-input);
+}
+
+.unity-base-text-field__input--placeholder {
+ -unity-font-style: italic;
+}
+
+
+/* ===================================
+컬렉션 뷰 항목 스타일
+- ListView, TreeView 등 컬렉션 뷰의 항목 상태별 스타일
+- Unity 기본 테마 (.unity-collection-view:focus:enabled .unity-collection-view__item--selected)를
+ 덮어쓰기 위해 동일하거나 더 높은 specificity 사용
+=================================== */
+
+/* 일반 항목의 기본 배경색 */
+.unity-collection-view__item {
+ background-color: var(--color-collection-item);
+}
+
+/* 마우스 오버 시 배경색 변경 - :hover:enabled를 더 높은 specificity로 덮어씀 */
+.unity-collection-view__item:hover:enabled {
+ background-color: var(--color-collection-item-hover);
+}
+
+/* 선택된 항목의 배경색 - Unity 기본 테마의 :focus:enabled 셀렉터를 덮어씀 */
+.unity-collection-view:focus:enabled .unity-collection-view__item--selected {
+ background-color: var(--color-collection-item-selected);
+}
+
+/* 선택된 항목에 마우스 오버 시 배경색 - :hover:enabled를 더 높은 specificity로 덮어씀 */
+.unity-collection-view:focus:enabled .unity-collection-view__item--selected:hover:enabled {
+ background-color: var(--color-collection-item-selected-hover);
+}
+
+
+/* ===================================
+수직 스크롤바 스타일
+- 기본 Unity 스크롤바를 슬림하고 미니멀하게 커스터마이징
+
+[주의] 스크롤바 드래거/트래커의 hover/active 색상은 USS :hover/:active
+pseudo-class가 제대로 동작하지 않습니다.
+드래거는 마우스 이벤트를 직접 받지 않고 트래커가 받기 때문입니다.
+hover/active 색상 변경이 필요하면 UTKTreeListWindow.cs의
+SetupDraggerEvents() 메서드처럼 코드로 MouseEnterEvent/MouseLeaveEvent 등을
+등록하여 구현해야 합니다.
+=================================== */
+
+/* 수직 스크롤바 컨테이너 - 폭 6px의 슬림한 스크롤바 */
+.unity-scroller--vertical {
+ width: 6px;
+ margin-right: 0px;
+ margin-bottom: 0;
+ background-color: rgba(30, 30, 30, 0); /* 스크롤바 영역 배경색 */
+}
+
+/* 스크롤바 트랙 (배경) - 반투명 어두운 배경 */
+.unity-scroller--vertical .unity-base-slider__tracker {
+ background-color: var(--color-scroller-tracker-normal);
+ border-width: 0;
+}
+
+/* 드래그 컨테이너 - 좌우 정렬 */
+.unity-scroller--vertical .unity-base-slider__drag-container {
+ left: 0;
+ right: 0;
+}
+
+/* 드래거 (스크롤 핸들) - 기본 상태 */
+.unity-scroller--vertical .unity-base-slider__dragger {
+ background-color: var(--color-scroller-dragger-normal);
+ border-width: 0;
+ border-radius: 3px; /* 둥근 모서리 */
+ width: 6px;
+ left: 0;
+ transition-duration: 0.15s; /* 부드러운 전환 효과 */
+ transition-property: background-color;
+}
+
+.unity-scroller--vertical .unity-base-slider__dragger:hover {
+ background-color: var(--color-scroller-dragger-hover);
+}
+
+/* 상하 화살표 버튼 - 완전히 숨김 처리 */
+.unity-scroller--vertical .unity-repeat-button {
+ display: none;
+ width: 0;
+ height: 0;
+ min-width: 0;
+ min-height: 0;
+}
+
+.unity-scroller--vertical > .unity-scroller__low-button,
+.unity-scroller--vertical > .unity-scroller__high-button {
+ display: none;
+}
+
+/* 슬라이더 - 여백 제거 */
+.unity-scroller--vertical .unity-slider {
+ margin: 0;
+}
+
+/* 입력 영역 - 폭 6px로 고정 */
+.unity-scroller--vertical .unity-base-field__input {
+ width: 6px;
+ min-width: 6px;
+}
+
+
+/* ===================================
+수평 스크롤바 스타일
+- 수직 스크롤바와 동일한 디자인을 수평으로 적용
+=================================== */
+
+/* 수평 스크롤바 컨테이너 - 높이 6px의 슬림한 스크롤바 */
+.unity-scroller--horizontal {
+ height: 6px;
+ margin-bottom: 4px;
+ margin-right: 0;
+ background-color: rgba(30, 30, 30, 0); /* 스크롤바 영역 배경색 */
+}
+
+/* 스크롤바 트랙 (배경) - 반투명 어두운 배경 */
+.unity-scroller--horizontal .unity-base-slider__tracker {
+ background-color: var(--color-scroller-tracker-normal);
+ border-width: 0;
+}
+
+/* 드래그 컨테이너 - 상하 정렬 */
+.unity-scroller--horizontal .unity-base-slider__drag-container {
+ top: 0;
+ bottom: 0;
+}
+
+/* 드래거 (스크롤 핸들) - 기본 상태 */
+.unity-scroller--horizontal .unity-base-slider__dragger {
+ background-color: var(--color-scroller-dragger-normal);
+ border-width: 0;
+ border-radius: 3px; /* 둥근 모서리 */
+ height: 6px;
+ top: 0;
+ transition-duration: 0.15s; /* 부드러운 전환 효과 */
+ transition-property: background-color;
+}
+
+.unity-scroller--horizontal .unity-base-slider__dragger:hover {
+ background-color: var(--color-scroller-dragger-hover);
+}
+
+/* 좌우 화살표 버튼 - 완전히 숨김 처리 */
+.unity-scroller--horizontal .unity-repeat-button {
+ display: none;
+ width: 0;
+ height: 0;
+ min-width: 0;
+ min-height: 0;
+}
+
+.unity-scroller--horizontal > .unity-scroller__low-button,
+.unity-scroller--horizontal > .unity-scroller__high-button {
+ display: none;
+}
+
+/* 슬라이더 - 여백 제거 */
+.unity-scroller--horizontal .unity-slider {
+ margin: 0;
+}
+
+/* 입력 영역 - 높이 6px로 고정 */
+.unity-scroller--horizontal .unity-base-field__input {
+ height: 6px;
+ min-height: 6px;
+}
+
+
+/* USS 파일 */
+.material-icon {
+ -unity-font-definition: resource('Fonts/Icons/MaterialSymbolsOutlined');
+ font-size: 24px;
+ -unity-text-align: middle-center;
+}
+
+/* ===================================
+ UTKPanel Content 내부 Label 스타일
+ - UTKPanel.uss가 자식에 적용되지 않는 문제 해결
+ =================================== */
+.utk-panel__content > .unity-label {
+ font-size: var(--font-size-body2) ;
+ color: var(--color-text-secondary) ;
+ margin-bottom: var(--space-s);
+}
\ No newline at end of file
diff --git a/Assets/Resources/UIToolkit/Style/UTKDefaultStyle.uss.meta b/Assets/Resources/UIToolkit/Style/UTKDefaultStyle.uss.meta
new file mode 100644
index 00000000..6cb3af41
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKDefaultStyle.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b2bc5215860a4ca43895ba1a89f329e0
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Style/UTKSettings.asset b/Assets/Resources/UIToolkit/Style/UTKSettings.asset
new file mode 100644
index 00000000..9a96539a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKSettings.asset
@@ -0,0 +1,49 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!114 &11400000
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 19101, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name: UTKSettings
+ m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.PanelSettings
+ themeUss: {fileID: -4733365628477956816, guid: 3658c4df19569594295f511142185317, type: 3}
+ m_DisableNoThemeWarning: 0
+ m_TargetTexture: {fileID: 0}
+ m_RenderMode: 0
+ m_ColliderUpdateMode: 0
+ m_ColliderIsTrigger: 1
+ m_ScaleMode: 0
+ m_ReferenceSpritePixelsPerUnit: 100
+ m_PixelsPerUnit: 100
+ m_Scale: 1
+ m_ReferenceDpi: 96
+ m_FallbackDpi: 96
+ m_ReferenceResolution: {x: 1200, y: 800}
+ m_ScreenMatchMode: 0
+ m_Match: 0
+ m_SortingOrder: 10
+ m_TargetDisplay: 0
+ m_BindingLogLevel: 0
+ m_ClearDepthStencil: 1
+ m_ClearColor: 0
+ m_ColorClearValue: {r: 0, g: 0, b: 0, a: 0}
+ m_VertexBudget: 0
+ m_DynamicAtlasSettings:
+ m_MinAtlasSize: 64
+ m_MaxAtlasSize: 4096
+ m_MaxSubTextureSize: 64
+ m_ActiveFilters: -1
+ m_AtlasBlitShader: {fileID: 9101, guid: 0000000000000000f000000000000000, type: 0}
+ m_DefaultShader: {fileID: 9100, guid: 0000000000000000f000000000000000, type: 0}
+ m_SDFShader: {fileID: 19011, guid: 0000000000000000f000000000000000, type: 0}
+ m_BitmapShader: {fileID: 9001, guid: 0000000000000000f000000000000000, type: 0}
+ m_SpriteShader: {fileID: 19012, guid: 0000000000000000f000000000000000, type: 0}
+ m_ICUDataAsset: {fileID: 0}
+ forceGammaRendering: 0
+ textSettings: {fileID: 0}
diff --git a/Assets/Resources/UIToolkit/Style/UTKSettings.asset.meta b/Assets/Resources/UIToolkit/Style/UTKSettings.asset.meta
new file mode 100644
index 00000000..479bff1c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKSettings.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5ad7007b08a97b54d927c352279a18b6
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Style/UTKThemeDark.uss b/Assets/Resources/UIToolkit/Style/UTKThemeDark.uss
new file mode 100644
index 00000000..63d19c49
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKThemeDark.uss
@@ -0,0 +1,222 @@
+/*
+ * ===================================
+ * UTKThemeDark.uss
+ * 다크 테마 색상 변수 정의
+ * ===================================
+ *
+ * 이 파일은 다크 테마의 모든 색상 변수를 정의합니다.
+ * 테마 전환 시 이 파일을 UTKThemeLight.uss로 교체합니다.
+ */
+
+* {
+ /* ===================================
+ Base Colors (color-base-*)
+ 그레이스케일 팔레트 (밝음 -> 어두움)
+ =================================== */
+ --color-base-01: #FFFFFF;
+ --color-base-02: #F0F0F0;
+ --color-base-03: #E7E7E7;
+ --color-base-04: #E5E5E5;
+ --color-base-05: #D4D4D4;
+ --color-base-06: #CCCCCC;
+ --color-base-07: #C6C6C6;
+ --color-base-08: #BBBBBB;
+ --color-base-09: #A0A0A0;
+ --color-base-10: #888080;
+ --color-base-11: #7F7F7F;
+ --color-base-12: #606060;
+ --color-base-13: #454545;
+ --color-base-14: #3C3C3C;
+ --color-base-15: #3A3D41;
+ --color-base-16: #333333;
+ --color-base-17: #303031;
+ --color-base-18: #292929;
+ --color-base-19: #252526;
+ --color-base-20: #1E1E1E;
+ --color-base-21: #000000;
+
+ /* ===================================
+ Accent Colors - Blue (color-blue-*)
+ =================================== */
+ --color-blue-01: #75BEFF;
+ --color-blue-02: #4AA6FF;
+ --color-blue-03: #3399CC;
+ --color-blue-04: #3794FF;
+ --color-blue-05: #0897FB;
+ --color-blue-06: #087ACC;
+ --color-blue-07: #0E639C;
+ --color-blue-08: #264F78;
+ --color-blue-09: #094771;
+ --color-blue-10: #062F4A;
+ --color-blue-11: #001F33;
+
+ /* ===================================
+ Accent Colors - Red (color-red-*)
+ =================================== */
+ --color-red-01: #F14C4C;
+ --color-red-02: #C74E39;
+ --color-red-03: #FF0000;
+ --color-red-04: #782626;
+
+ /* ===================================
+ Accent Colors - Green (color-green-*)
+ =================================== */
+ --color-green-01: #73C991;
+ --color-green-02: #40C8AE;
+ --color-green-03: #16825D;
+ --color-green-04: #327E36;
+ --color-green-05: #28632B;
+
+ /* ===================================
+ Accent Colors - Purple (color-purple-*)
+ =================================== */
+ --color-purple-01: #6C6CC4;
+ --color-purple-02: #B180D7;
+ --color-purple-03: #BC3FBC;
+ --color-purple-04: #68217A;
+
+ /* ===================================
+ Accent Colors - Yellow (color-yellow-*)
+ =================================== */
+ --color-yellow-01: #D7BA7D;
+ --color-yellow-02: #CCA700;
+ --color-yellow-03: #B89500;
+ --color-yellow-04: #BF8803;
+ --color-yellow-05: #FFFF00;
+
+ /* ===================================
+ Accent Colors - Orange (color-orange-*)
+ =================================== */
+ --color-orange-01: #CC6633;
+ --color-orange-02: #EE9D28;
+ --color-orange-03: #EA5C00;
+
+ /* ===================================
+ Gray Colors (color-gray-*)
+ =================================== */
+ --color-gray-01: #E4E6F1;
+ --color-gray-02: #5F6A79;
+ --color-gray-03: #424750;
+
+ /* ===================================
+ Seti Colors (color-seti-*)
+ =================================== */
+ --color-seti-blue: #519ABA;
+ --color-seti-green: #8DC149;
+ --color-seti-orange: #E37933;
+ --color-seti-pink: #F55385;
+ --color-seti-red: #CC3E44;
+ --color-seti-steel: #7494A3;
+ --color-seti-yellow: #CBCB41;
+ --color-seti-purple: #A074C4;
+ --color-seti-ignore: #41535B;
+ --color-seti-white: #D4D7D6;
+ --color-seti-gray: #6D8086;
+
+ /* ===================================
+ Semantic Colors - Text (color-text-*)
+ =================================== */
+ --color-text-primary: var(--color-base-03);
+ --color-text-secondary: var(--color-base-08);
+ --color-text-disabled: var(--color-gray-02);
+ --color-text-placeholder: var(--color-base-12);
+ --color-text-inverse: var(--color-base-20);
+ --color-text-on-inverse: var(--color-base-21);
+ --color-text-on-primary: var(--color-base-04);
+
+ /* ===================================
+ Semantic Colors - Background (color-bg-*)
+ =================================== */
+ --color-bg-base: var(--color-base-20);
+ --color-bg-primary: var(--color-base-20);
+ --color-bg-secondary: var(--color-base-19);
+ --color-bg-tertiary: var(--color-base-13);
+ --color-bg-elevated: var(--color-base-18);
+ --color-bg-modal: var(--color-base-18);
+ --color-bg-panel: var(--color-base-20);
+ --color-bg-input: var(--color-base-19);
+ --color-bg-hover: var(--color-base-16);
+ --color-bg-active: var(--color-base-14);
+ --color-bg-tooltip: rgba(38, 38, 38, 0.95);
+ --color-bg-overlay: rgba(0, 0, 0, 0.5);
+
+ /* ===================================
+ Semantic Colors - Border (color-border-*)
+ =================================== */
+ --color-border: var(--color-base-16);
+ --color-border-light: var(--color-base-14);
+ --color-border-focus: var(--color-blue-05);
+ --color-border-error: var(--color-red-01);
+
+ /* ===================================
+ Semantic Colors - Button (color-btn-*)
+ =================================== */
+ --color-btn-normal: var(--color-base-17);
+ --color-btn-hover: #3C3C3D;
+ --color-btn-pressed: var(--color-base-19);
+ --color-btn-disabled: var(--color-base-16);
+ --color-btn-primary: var(--color-blue-05);
+ --color-btn-primary-hover: var(--color-blue-06);
+ --color-btn-secondary: var(--color-base-14);
+ --color-btn-secondary-hover: var(--color-base-13);
+
+ /* ===================================
+ Semantic Colors - Calendar (color-calendar-*)
+ =================================== */
+ --color-calendar-sunday: var(--color-red-01);
+ --color-calendar-saturday: var(--color-blue-02);
+ --color-calendar-today: var(--color-green-02);
+ --color-calendar-selected: var(--color-blue-06);
+ --color-calendar-range: var(--color-blue-06);
+ --color-calendar-range-hover: var(--color-blue-07);
+
+ /* ===================================
+ Semantic Colors - Primary (color-primary-*)
+ =================================== */
+ --color-primary: var(--color-blue-05);
+ --color-primary-hover: var(--color-blue-06);
+ --color-primary-active: var(--color-blue-08);
+
+ /* ===================================
+ Semantic Colors - State (color-state-*)
+ =================================== */
+ --color-state-success: var(--color-green-01);
+ --color-state-warning: var(--color-orange-02);
+ --color-state-error: var(--color-red-01);
+ --color-state-info: var(--color-blue-05);
+
+ /* ===================================
+ Semantic Colors - Vector (color-vector-*)
+ =================================== */
+ --color-vector-x: rgba(230, 102, 102, 1);
+ --color-vector-y: rgba(102, 230, 102, 1);
+ --color-vector-z: rgba(102, 102, 230, 1);
+
+ /* ===================================
+ Semantic Colors - Scrollbar (color-scroller-*)
+ =================================== */
+ --color-scroller-dragger-normal: var(--color-base-16);
+ --color-scroller-dragger-hover: #525252;
+ --color-scroller-dragger-active: var(--color-base-16);
+ --color-scroller-tracker-normal: rgba(0, 0, 0, 0);
+ --color-scroller-tracker-hover: rgba(26, 26, 26, 0);
+
+ /* ===================================
+ Semantic Colors - Drag Ghost (color-drag-*)
+ =================================== */
+ --color-drag-ghost-bg: rgba(41, 41, 41, 1);
+
+ /* ===================================
+ Semantic Colors - Collection (color-collection-*)
+ =================================== */
+ --color-collection-item: rgba(37, 37, 38, 0);
+ --color-collection-item-hover: var(--color-base-16);
+ --color-collection-item-selected: var(--color-blue-07);
+ --color-collection-item-selected-hover: var(--color-blue-08);
+
+ /* ===================================
+ Semantic Colors - Tree Checkmark (color-tree-checkmark-*)
+ =================================== */
+ --color-tree-checkmark: var(--color-text-secondary);
+ --color-tree-checkmark-hover: var(--color-text-primary);
+}
diff --git a/Assets/Resources/UIToolkit/Style/UTKThemeDark.uss.meta b/Assets/Resources/UIToolkit/Style/UTKThemeDark.uss.meta
new file mode 100644
index 00000000..70bdac08
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKThemeDark.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 976ed833f077d514b968b34fa0549223
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Style/UTKThemeLight.uss b/Assets/Resources/UIToolkit/Style/UTKThemeLight.uss
new file mode 100644
index 00000000..c3aafa0a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKThemeLight.uss
@@ -0,0 +1,233 @@
+/*
+ * ===================================
+ * UTKThemeLight.uss
+ * 라이트 테마 색상 변수 정의
+ * ===================================
+ *
+ * 이 파일은 라이트 테마의 모든 색상 변수를 정의합니다.
+ * 테마 전환 시 UTKThemeDark.uss를 이 파일로 교체합니다.
+ *
+ * 라이트 테마에서는 base 색상 순서가 반전됩니다:
+ * - 배경: 밝은 색상 (base-01 ~ base-05)
+ * - 텍스트: 어두운 색상 (base-16 ~ base-21)
+ */
+
+* {
+ /* ===================================
+ Base Colors (color-base-*)
+ 그레이스케일 팔레트 (밝음 -> 어두움)
+ =================================== */
+ --color-base-01: #FFFFFF;
+ --color-base-02: #F8F8F8;
+ --color-base-03: #F0F0F0;
+ --color-base-04: #E8E8E8;
+ --color-base-05: #E0E0E0;
+ --color-base-06: #D0D0D0;
+ --color-base-07: #C0C0C0;
+ --color-base-08: #A0A0A0;
+ --color-base-09: #808080;
+ --color-base-10: #707070;
+ --color-base-11: #606060;
+ --color-base-12: #505050;
+ --color-base-13: #404040;
+ --color-base-14: #353535;
+ --color-base-15: #303030;
+ --color-base-16: #282828;
+ --color-base-17: #222222;
+ --color-base-18: #1C1C1C;
+ --color-base-19: #161616;
+ --color-base-20: #101010;
+ --color-base-21: #000000;
+
+ /* ===================================
+ Accent Colors - Blue (color-blue-*)
+ 라이트 테마에서는 검정 텍스트가 잘 보이도록 밝은 톤 사용
+ =================================== */
+ --color-blue-01: #DCEEFB;
+ --color-blue-02: #B3D7F5;
+ --color-blue-03: #8AC0EF;
+ --color-blue-04: #62A8E8;
+ --color-blue-05: #3A90E0;
+ --color-blue-06: #2979C9;
+ --color-blue-07: #1A66B3;
+ --color-blue-08: #0D539C;
+ --color-blue-09: #044185;
+ --color-blue-10: #00306E;
+ --color-blue-11: #002057;
+
+ /* ===================================
+ Accent Colors - Red (color-red-*)
+ =================================== */
+ --color-red-01: #F5A3A3;
+ --color-red-02: #EF7B7B;
+ --color-red-03: #F28C8C;
+ --color-red-04: #E86A6A;
+ --color-red-05: #F14C4C;
+ --color-red-06: #C74E39;
+ --color-red-07: #FF0000;
+ --color-red-08: #782626;
+
+ /* ===================================
+ Accent Colors - Green (color-green-*)
+ =================================== */
+ --color-green-01: #A5D6A7;
+ --color-green-02: #81C784;
+ --color-green-03: #66BB6A;
+ --color-green-04: #B8E6B9;
+ --color-green-05: #98D99A;
+
+ /* ===================================
+ Accent Colors - Purple (color-purple-*)
+ =================================== */
+ --color-purple-01: #CE93D8;
+ --color-purple-02: #BA68C8;
+ --color-purple-03: #D1A3DB;
+ --color-purple-04: #C280CE;
+
+ /* ===================================
+ Accent Colors - Yellow (color-yellow-*)
+ =================================== */
+ --color-yellow-01: #FFE082;
+ --color-yellow-02: #FFD54F;
+ --color-yellow-03: #FFCA28;
+ --color-yellow-04: #FFC107;
+ --color-yellow-05: #FFF176;
+
+ /* ===================================
+ Accent Colors - Orange (color-orange-*)
+ =================================== */
+ --color-orange-01: #FFAB91;
+ --color-orange-02: #FF9A76;
+ --color-orange-03: #FFB74D;
+
+ /* ===================================
+ Gray Colors (color-gray-*)
+ =================================== */
+ --color-gray-01: #424242;
+ --color-gray-02: #757575;
+ --color-gray-03: #9E9E9E;
+
+ /* ===================================
+ Seti Colors (color-seti-*)
+ =================================== */
+ --color-seti-blue: #64B5F6;
+ --color-seti-green: #AED581;
+ --color-seti-orange: #FFAB91;
+ --color-seti-pink: #F48FB1;
+ --color-seti-red: #EF9A9A;
+ --color-seti-steel: #90A4AE;
+ --color-seti-yellow: #FFE082;
+ --color-seti-purple: #CE93D8;
+ --color-seti-ignore: #B0BEC5;
+ --color-seti-white: #ECEFF1;
+ --color-seti-gray: #90A4AE;
+
+ /* ===================================
+ Semantic Colors - Text (color-text-*)
+ 라이트 테마에서는 어두운 텍스트 사용
+ =================================== */
+ --color-text-primary: var(--color-base-17);
+ --color-text-secondary: var(--color-base-12);
+ --color-text-disabled: var(--color-base-08);
+ --color-text-placeholder: var(--color-base-09);
+ --color-text-inverse: var(--color-base-01);
+ --color-text-on-inverse: var(--color-base-02);
+ --color-text-on-primary: var(--color-base-18);
+
+ /* ===================================
+ Semantic Colors - Background (color-bg-*)
+ 라이트 테마에서는 밝은 배경 사용
+ =================================== */
+ --color-bg-base: var(--color-base-01);
+ --color-bg-primary: var(--color-base-01);
+ --color-bg-secondary: var(--color-base-03);
+ --color-bg-tertiary: var(--color-base-06);
+ --color-bg-elevated: var(--color-base-02);
+ --color-bg-modal: var(--color-base-02);
+ --color-bg-panel: var(--color-base-01);
+ --color-bg-input: var(--color-base-01);
+ --color-bg-hover: var(--color-base-04);
+ --color-bg-active: var(--color-base-05);
+ --color-bg-tooltip: rgba(50, 50, 50, 0.95);
+ --color-bg-overlay: rgba(0, 0, 0, 0.3);
+
+ /* ===================================
+ Semantic Colors - Border (color-border-*)
+ =================================== */
+ --color-border: var(--color-base-05);
+ --color-border-light: var(--color-base-04);
+ --color-border-focus: var(--color-blue-02);
+ --color-border-error: var(--color-red-01);
+
+ /* ===================================
+ Semantic Colors - Button (color-btn-*)
+ =================================== */
+ --color-btn-normal: var(--color-base-04);
+ --color-btn-hover: var(--color-base-05);
+ --color-btn-pressed: var(--color-base-06);
+ --color-btn-disabled: var(--color-base-03);
+ --color-btn-primary: var(--color-blue-03);
+ --color-btn-primary-hover: var(--color-blue-04);
+ --color-btn-secondary: var(--color-base-05);
+ --color-btn-secondary-hover: var(--color-base-06);
+
+ /* ===================================
+ Semantic Colors - Calendar (color-calendar-*)
+ =================================== */
+ --color-calendar-sunday: var(--color-red-05);
+ --color-calendar-saturday: var(--color-blue-05);
+ --color-calendar-today: var(--color-green-02);
+ --color-calendar-selected: var(--color-blue-02);
+ --color-calendar-range: var(--color-blue-02);
+ --color-calendar-range-hover: var(--color-blue-03);
+
+ /* ===================================
+ Semantic Colors - Primary (color-primary-*)
+ =================================== */
+ --color-primary: var(--color-blue-05);
+ --color-primary-hover: var(--color-blue-06);
+ --color-primary-active: var(--color-blue-07);
+
+ /* ===================================
+ Semantic Colors - State (color-state-*)
+ =================================== */
+ --color-state-success: var(--color-green-02);
+ --color-state-warning: var(--color-orange-02);
+ --color-state-error: var(--color-red-03);
+ --color-state-info: var(--color-blue-04);
+
+ /* ===================================
+ Semantic Colors - Vector (color-vector-*)
+ =================================== */
+ --color-vector-x: rgba(239, 130, 130, 1);
+ --color-vector-y: rgba(130, 210, 130, 1);
+ --color-vector-z: rgba(130, 150, 239, 1);
+
+ /* ===================================
+ Semantic Colors - Scrollbar (color-scroller-*)
+ =================================== */
+ --color-scroller-dragger-normal: var(--color-base-07);
+ --color-scroller-dragger-hover: var(--color-base-09);
+ --color-scroller-dragger-active: var(--color-base-10);
+ --color-scroller-tracker-normal: rgba(0, 0, 0, 0);
+ --color-scroller-tracker-hover: rgba(0, 0, 0, 0.05);
+
+ /* ===================================
+ Semantic Colors - Drag Ghost (color-drag-*)
+ =================================== */
+ --color-drag-ghost-bg: rgba(255, 255, 255, 0.95);
+
+ /* ===================================
+ Semantic Colors - Collection (color-collection-*)
+ =================================== */
+ --color-collection-item: rgba(255, 255, 255, 0);
+ --color-collection-item-hover: var(--color-base-04);
+ --color-collection-item-selected: var(--color-blue-04);
+ --color-collection-item-selected-hover: var(--color-blue-05);
+
+ /* ===================================
+ Semantic Colors - Tree Checkmark (color-tree-checkmark-*)
+ =================================== */
+ --color-tree-checkmark: var(--color-text-secondary);
+ --color-tree-checkmark-hover: var(--color-text-primary);
+}
diff --git a/Assets/Resources/UIToolkit/Style/UTKThemeLight.uss.meta b/Assets/Resources/UIToolkit/Style/UTKThemeLight.uss.meta
new file mode 100644
index 00000000..e3484fd8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKThemeLight.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 4e001056f6c41f8438a97966cf0be17e
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Style/UTKVariables.uss b/Assets/Resources/UIToolkit/Style/UTKVariables.uss
new file mode 100644
index 00000000..f02f3aed
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKVariables.uss
@@ -0,0 +1,90 @@
+/*
+ * ===================================
+ * UTKVariables.uss
+ * 테마에 독립적인 공통 변수 정의
+ * ===================================
+ *
+ * 이 파일은 테마와 무관한 레이아웃/크기 관련 변수를 정의합니다.
+ * 색상 변수는 UTKThemeDark.uss / UTKThemeLight.uss에서 정의됩니다.
+ */
+
+* {
+ /* ===================================
+ Font
+ =================================== */
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Regular');
+
+ /* ===================================
+ Spacing (space-*)
+ =================================== */
+ --space-xs: 2px;
+ --space-s: 4px;
+ --space-m: 8px;
+ --space-l: 12px;
+ --space-xl: 16px;
+ --space-xxl: 24px;
+
+ /* ===================================
+ Border Radius (radius-*)
+ =================================== */
+ --radius-xs: 2px;
+ --radius-s: 4px;
+ --radius-m: 6px;
+ --radius-l: 8px;
+ --radius-xl: 12px;
+ --radius-full: 9999px;
+
+ /* ===================================
+ Border Width (border-*)
+ =================================== */
+ --border-width: 1px;
+ --border-width-thick: 2px;
+
+ /* ===================================
+ Font Size (font-size-*)
+ =================================== */
+ --font-size-h1: 26px;
+ --font-size-h2: 14px;
+ --font-size-h3: 13px;
+ --font-size-h4: 11px;
+ --font-size-h5: 11px;
+ --font-size-h6: 11px;
+ --font-size-body1: 13px;
+ --font-size-body2: 12px;
+ --font-size-label1: 14px;
+ --font-size-label2: 12px;
+ --font-size-label3: 11px;
+ --font-size-label4: 9px;
+ --font-size-code: 12px;
+
+ /* ===================================
+ Component Sizes (size-*)
+ =================================== */
+ --size-btn-height: 24px;
+ --size-btn-min-width: 64px;
+ --size-input-height: 24px;
+ --size-icon-btn: 20px;
+ --size-nav-btn: 24px;
+ --size-modal-min-width: 300px;
+ --size-modal-max-width: 600px;
+
+ /* ===================================
+ Animation (anim-*)
+ =================================== */
+ --anim-fast: 100ms;
+ --anim-normal: 200ms;
+ --anim-slow: 300ms;
+
+ /* ===================================
+ Z-Index (z-*)
+ =================================== */
+ --z-default: 0;
+ --z-dropdown: 100;
+ --z-modal: 200;
+ --z-tooltip: 300;
+
+ /* ===================================
+ Unity Overrides
+ =================================== */
+ --unity-item-indent-width: 0px;
+}
diff --git a/Assets/Resources/UIToolkit/Style/UTKVariables.uss.meta b/Assets/Resources/UIToolkit/Style/UTKVariables.uss.meta
new file mode 100644
index 00000000..db5a32f2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Style/UTKVariables.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 06d6bf55aa4e5d24282724e6f9899643
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Tab.meta b/Assets/Resources/UIToolkit/Tab.meta
new file mode 100644
index 00000000..41a9fa55
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Tab.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dd059354671cb24499b68d9b0adf84a6
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Tab/UTKTabView.uss b/Assets/Resources/UIToolkit/Tab/UTKTabView.uss
new file mode 100644
index 00000000..ac048ded
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Tab/UTKTabView.uss
@@ -0,0 +1,199 @@
+/*
+ * ===================================
+ * UTKTabView.uss
+ * Unity TabView 래핑 스타일
+ * ===================================
+ */
+
+/* ===================================
+ Base Container
+ =================================== */
+
+.utk-tabview {
+ flex-direction: column;
+ flex-grow: 0;
+ color: var(--color-text-secondary);
+}
+
+/* ===================================
+ Tab Header Strip
+ =================================== */
+
+.utk-tabview .unity-tab-view__header-container {
+ background-color: transparent;
+}
+
+/* ===================================
+ Reorderable Handle (hide)
+ =================================== */
+
+.utk-tabview .unity-tab-view__reorderable-handle {
+ display: none;
+}
+
+/* ===================================
+ Content Container
+ =================================== */
+
+.utk-tabview > .unity-tab-view__content-container {
+ flex-grow: 1;
+ padding: var(--space-l);
+}
+
+/* Tab Content inside unity-tab__content-container */
+.utk-tabview .unity-tab__content-container {
+ background-color: transparent;
+}
+
+.utk-tabview .unity-tab__content-container .unity-label {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+}
+
+/* ===================================
+ Tab Header inside TabView
+ =================================== */
+
+.utk-tabview .unity-tab__header {
+ background-color: transparent ;
+ border-width: 0;
+ padding: var(--space-s) var(--space-l);
+ margin-right: var(--space-s);
+ transition-duration: var(--anim-fast);
+ transition-property: background-color;
+ align-self: stretch;
+}
+
+.utk-tabview .unity-tab__header:hover {
+ background-color: var(--color-btn-hover) ;
+}
+
+.utk-tabview .unity-tab__header:checked {
+ background-color: transparent ;
+}
+
+.utk-tabview .unity-tab__header-label {
+ font-size: var(--font-size-body2);
+ color: var(--color-text-secondary) ;
+}
+
+.utk-tabview .unity-tab__header:checked .unity-tab__header-label {
+ color: var(--color-btn-primary) ;
+ -unity-font-style: bold;
+}
+
+/* Tab Underline */
+.utk-tabview .unity-tab__header-underline {
+ height: 2px;
+ background-color: transparent ;
+ position: absolute;
+ bottom: 0;
+ left: 0;
+ right: 0;
+}
+
+.utk-tabview .unity-tab__header:checked .unity-tab__header-underline {
+ background-color: var(--color-btn-primary) ;
+}
+
+.utk-tabview .unity-tab-view__content-viewport {
+ align-items: stretch;
+}
+
+/* ===================================
+ Tab Alignment Modes
+ =================================== */
+
+/* Top Alignment (Default) - 탭이 위쪽에 배치 */
+.utk-tabview.utk-tabview--align-top {
+ flex-direction: column;
+}
+
+.utk-tabview.utk-tabview--align-top .unity-tab-view__header-container {
+ flex-direction: row;
+ border-bottom-width: var(--border-width);
+ border-bottom-color: var(--color-border);
+ border-top-width: 0;
+ border-left-width: 0;
+ border-right-width: 0;
+ flex-grow: 1;
+}
+
+/* Bottom Alignment - 탭이 아래쪽에 배치 */
+.utk-tabview.utk-tabview--align-bottom {
+ flex-direction: column-reverse;
+}
+
+.utk-tabview.utk-tabview--align-bottom .unity-tab-view__header-container {
+ flex-direction: row;
+ border-top-width: var(--border-width);
+ border-top-color: var(--color-border);
+ border-bottom-width: 0;
+ border-left-width: 0;
+ border-right-width: 0;
+ flex-grow: 1;
+}
+
+.utk-tabview.utk-tabview--align-bottom .unity-tab__header-underline {
+ bottom: auto;
+ top: 0;
+}
+
+/* Left Alignment - 탭이 왼쪽에 세로로 배치 */
+.utk-tabview.utk-tabview--align-left {
+ flex-direction: row;
+}
+
+.utk-tabview.utk-tabview--align-left .unity-tab-view__header-container {
+ flex-direction: column;
+ border-right-width: var(--border-width);
+ border-right-color: var(--color-border);
+ border-bottom-width: 0;
+ border-top-width: 0;
+ border-left-width: 0;
+ flex-grow: 1;
+}
+
+.utk-tabview.utk-tabview--align-left .unity-tab__header {
+ margin-right: 0;
+ margin-bottom: var(--space-s);
+ position: relative;
+}
+
+.utk-tabview.utk-tabview--align-left .unity-tab__header-underline {
+ left: auto;
+ right: 0;
+ bottom: 0;
+ top: 0;
+ width: 2px;
+ height: auto;
+}
+
+/* Right Alignment - 탭이 오른쪽에 세로로 배치 */
+.utk-tabview.utk-tabview--align-right {
+ flex-direction: row-reverse;
+}
+
+.utk-tabview.utk-tabview--align-right .unity-tab-view__header-container {
+ flex-direction: column;
+ border-left-width: var(--border-width);
+ border-left-color: var(--color-border);
+ border-bottom-width: 0;
+ border-top-width: 0;
+ border-right-width: 0;
+}
+
+.utk-tabview.utk-tabview--align-right .unity-tab__header {
+ margin-right: 0;
+ margin-bottom: var(--space-s);
+ position: relative;
+}
+
+.utk-tabview.utk-tabview--align-right .unity-tab__header-underline {
+ right: auto;
+ left: 0;
+ bottom: 0;
+ top: 0;
+ width: 2px;
+ height: auto;
+}
diff --git a/Assets/Resources/UIToolkit/Tab/UTKTabView.uss.meta b/Assets/Resources/UIToolkit/Tab/UTKTabView.uss.meta
new file mode 100644
index 00000000..f6c7a053
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Tab/UTKTabView.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 599cbdfce7482944a97364950db143f4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/ToolBar.meta b/Assets/Resources/UIToolkit/ToolBar.meta
new file mode 100644
index 00000000..e60c7736
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 16e7b0cea2218874dae5634bc4835c27
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBar.uxml b/Assets/Resources/UIToolkit/ToolBar/UTKToolBar.uxml
new file mode 100644
index 00000000..572913bb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBar.uxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBar.uxml.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBar.uxml.meta
new file mode 100644
index 00000000..19c4405d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBar.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 67f7dc49efdc14b4f8263c9acb0630a4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButton.uxml b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButton.uxml
new file mode 100644
index 00000000..2b8ee89d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButton.uxml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButton.uxml.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButton.uxml.meta
new file mode 100644
index 00000000..f641235c
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButton.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: aa3e7c26d0d75ca4b8784ee75c0a6348
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButtonUss.uss b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButtonUss.uss
new file mode 100644
index 00000000..51dc8b0a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButtonUss.uss
@@ -0,0 +1,56 @@
+/* ===================================
+ * UTKToolBarButtonUss.uss
+ * 툴바 버튼 스타일
+ * =================================== */
+
+.utk-toolbar-btn {
+ flex-direction: column;
+ align-items: center;
+ justify-content: center;
+ min-width: 32px;
+ min-height: 32px;
+ padding: var(--space-xs);
+ border-radius: var(--radius-s);
+ border-width: 0;
+ background-color: transparent;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+ transition: background-color var(--anim-fast);
+}
+
+.utk-toolbar-btn:hover {
+ background-color: var(--color-bg-hover);
+}
+
+.utk-toolbar-btn:active {
+ background-color: var(--color-bg-active);
+}
+
+.utk-toolbar-btn--disabled {
+ opacity: 0.4;
+}
+
+.utk-toolbar-btn__icon {
+ width: var(--size-icon-btn);
+ height: var(--size-icon-btn);
+ font-size: 18px;
+ -unity-text-align: middle-center;
+ color: var(--color-text-primary);
+ padding: 0;
+ margin: 4px;
+ -unity-font-definition: resource('Fonts/Icons/MaterialSymbolsOutlined');
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
+
+.utk-toolbar-btn__icon--image {
+ -unity-background-scale-mode: scale-to-fit;
+ -unity-font-definition: none;
+ font-size: 0;
+}
+
+.utk-toolbar-btn__label {
+ font-size: var(--font-size-label4);
+ color: var(--color-text-secondary);
+ -unity-text-align: upper-center;
+ display: none;
+ cursor: resource('UIToolkit/Images/cursor_point_white_32') 14 5;
+}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButtonUss.uss.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButtonUss.uss.meta
new file mode 100644
index 00000000..c86ef507
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarButtonUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: db912499a72f8b94ab2d6d9ae94847a8
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButton.uxml b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButton.uxml
new file mode 100644
index 00000000..47b14e44
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButton.uxml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButton.uxml.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButton.uxml.meta
new file mode 100644
index 00000000..d212a26d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButton.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: f26343b39f7a20b4e99fd1bc9fd5a1fe
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButtonUss.uss b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButtonUss.uss
new file mode 100644
index 00000000..1e53e7ad
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButtonUss.uss
@@ -0,0 +1,38 @@
+/* ===================================
+ * UTKToolBarExpandableButtonUss.uss
+ * 확장 버튼 스타일 (서브 메뉴 화살표)
+ * =================================== */
+
+.utk-toolbar-expandable {
+ position: relative;
+}
+
+.utk-toolbar-expandable__arrow {
+ width: 6px;
+ height: 6px;
+ position: absolute;
+ bottom: 2px;
+ right: 2px;
+}
+
+/* 가로 배치: 아래 화살표 ▼ */
+.utk-toolbar--horizontal .utk-toolbar-expandable__arrow {
+ border-left-width: 3px;
+ border-right-width: 3px;
+ border-top-width: 4px;
+ border-left-color: transparent;
+ border-right-color: transparent;
+ border-top-color: var(--color-text-secondary);
+ border-bottom-width: 0;
+}
+
+/* 세로 배치: 오른쪽 화살표 ▶ */
+.utk-toolbar--vertical .utk-toolbar-expandable__arrow {
+ border-top-width: 3px;
+ border-bottom-width: 3px;
+ border-left-width: 4px;
+ border-top-color: transparent;
+ border-bottom-color: transparent;
+ border-left-color: var(--color-text-secondary);
+ border-right-width: 0;
+}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButtonUss.uss.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButtonUss.uss.meta
new file mode 100644
index 00000000..a0d8c93d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarExpandableButtonUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 5951a6797681fed438dc5939f3a38266
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparator.uxml b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparator.uxml
new file mode 100644
index 00000000..fffc8185
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparator.uxml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparator.uxml.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparator.uxml.meta
new file mode 100644
index 00000000..9e0d2b7d
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparator.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 982b4ee5d7a6a0b40ab4ffe78d71fb94
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparatorUss.uss b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparatorUss.uss
new file mode 100644
index 00000000..edbb1758
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparatorUss.uss
@@ -0,0 +1,20 @@
+/* ===================================
+ * UTKToolBarSeparatorUss.uss
+ * 구분선 스타일
+ * =================================== */
+
+/* 가로 배치: 세로 구분선 */
+.utk-toolbar--horizontal .utk-toolbar-separator {
+ width: var(--border-width);
+ height: 20px;
+ margin: 0 var(--space-s);
+ background-color: var(--color-border);
+}
+
+/* 세로 배치: 가로 구분선 */
+.utk-toolbar--vertical .utk-toolbar-separator {
+ height: var(--border-width);
+ width: 20px;
+ margin: var(--space-s) 0;
+ background-color: var(--color-border);
+}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparatorUss.uss.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparatorUss.uss.meta
new file mode 100644
index 00000000..7d9366c5
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSeparatorUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 808c6701fa4d7834e9f7c58273631725
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenu.uxml b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenu.uxml
new file mode 100644
index 00000000..fcdc03dc
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenu.uxml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenu.uxml.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenu.uxml.meta
new file mode 100644
index 00000000..86788b08
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenu.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: a5dc4901fda3a4047a167867faaa66a4
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenuUss.uss b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenuUss.uss
new file mode 100644
index 00000000..d63a4320
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenuUss.uss
@@ -0,0 +1,48 @@
+/* ===================================
+ * UTKToolBarSubMenuUss.uss
+ * 확장 버튼 서브 메뉴 스타일
+ * =================================== */
+
+.utk-toolbar-submenu {
+ position: absolute;
+ background-color: var(--color-bg-primary);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-m);
+ padding: var(--space-xs);
+ min-width: 40px;
+}
+
+.utk-toolbar-submenu__container {
+ flex-direction: column;
+}
+
+.utk-toolbar-submenu TemplateContainer {
+ flex-grow: 1;
+ align-items: stretch;
+}
+/* 서브 메뉴 내 버튼은 가로로 펼침 */
+.utk-toolbar-submenu .utk-toolbar-btn {
+ flex-direction: row;
+ min-width: 28px;
+ min-height: 28px;
+ justify-content: flex-start;
+ padding: var(--space-xs) 0;
+ margin: 1px 0;
+ flex-grow: 1;
+}
+
+.utk-toolbar-submenu .utk-toolbar-btn__icon {
+ margin-right: var(--space-s);
+ flex-grow: 1;
+}
+
+.utk-toolbar-submenu .utk-toolbar-btn__label {
+ display: flex;
+ font-size: var(--font-size-body2);
+ color: var(--color-text-primary);
+ -unity-text-align: middle-left;
+ margin-right: var(--space-m);
+ flex-grow: 100;
+ justify-content: flex-start;
+}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenuUss.uss.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenuUss.uss.meta
new file mode 100644
index 00000000..4958c8b3
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarSubMenuUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: b692a3d78f8602e478a07d72398388ff
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButton.uxml b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButton.uxml
new file mode 100644
index 00000000..2b24b9f8
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButton.uxml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButton.uxml.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButton.uxml.meta
new file mode 100644
index 00000000..3347f301
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButton.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: b1c910e06cdb3b442813e22530596643
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButtonUss.uss b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButtonUss.uss
new file mode 100644
index 00000000..f48966f0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButtonUss.uss
@@ -0,0 +1,22 @@
+/* ===================================
+ * UTKToolBarToggleButtonUss.uss
+ * 토글/라디오 버튼 선택 상태 스타일
+ * =================================== */
+
+/* 선택 상태: 특수성을 높여 기본 스타일 오버라이드 */
+.utk-toolbar-btn.utk-toolbar-toggle--selected {
+ background-color: var(--color-primary);
+ border-radius: var(--radius-s);
+}
+
+.utk-toolbar-btn.utk-toolbar-toggle--selected:hover {
+ background-color: var(--color-primary-hover);
+}
+
+.utk-toolbar-btn.utk-toolbar-toggle--selected:active {
+ background-color: var(--color-primary-active);
+}
+
+.utk-toolbar-toggle--selected .utk-toolbar-btn__icon {
+ color: var(--color-text-on-primary);
+}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButtonUss.uss.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButtonUss.uss.meta
new file mode 100644
index 00000000..de104ac9
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarToggleButtonUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 10bacd7792291454184c14add3bb2896
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarUss.uss b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarUss.uss
new file mode 100644
index 00000000..f3d58006
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarUss.uss
@@ -0,0 +1,49 @@
+/* ===================================
+ * UTKToolBarUss.uss
+ * 툴바 메인 스타일
+ * =================================== */
+
+/* === 공통 === */
+.utk-toolbar {
+ overflow: visible;
+ flex-grow: 1;
+}
+
+.utk-toolbar__container {
+ overflow: visible;
+}
+
+/* === 가로 배치 === */
+.utk-toolbar--horizontal {
+ flex-direction: row;
+ align-items: center;
+ align-self: flex-start;
+ height: 40px;
+ background-color: var(--color-bg-secondary);
+ /* border-bottom-width: var(--border-width); */
+ /* border-bottom-color: var(--color-border); */
+ padding: 0 var(--space-s);
+}
+
+.utk-toolbar--horizontal > .utk-toolbar__container {
+ flex-direction: row;
+ align-items: center;
+}
+
+/* === 세로 배치 === */
+.utk-toolbar--vertical {
+ flex-direction: column;
+ align-items: center;
+ width: 40px;
+ height: auto;
+ background-color: var(--color-bg-secondary);
+ /* border-right-width: var(--border-width);
+ border-right-color: var(--color-border); */
+ padding: var(--space-s) 0;
+}
+
+.utk-toolbar--vertical > .utk-toolbar__container {
+ flex-direction: column;
+ align-items: center;
+ flex-grow: 1;
+}
diff --git a/Assets/Resources/UIToolkit/ToolBar/UTKToolBarUss.uss.meta b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarUss.uss.meta
new file mode 100644
index 00000000..c1aeaeac
--- /dev/null
+++ b/Assets/Resources/UIToolkit/ToolBar/UTKToolBarUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: dab8ffb85c679be44a624b68a5364734
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Window.meta b/Assets/Resources/UIToolkit/Window.meta
new file mode 100644
index 00000000..fdd24b57
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 5a4dcd369eac43a45b4170187d18edd8
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/UIToolkit/Window/UTKAccordionListWindow.uxml b/Assets/Resources/UIToolkit/Window/UTKAccordionListWindow.uxml
new file mode 100644
index 00000000..ffec83eb
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKAccordionListWindow.uxml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Window/UTKAccordionListWindow.uxml.meta b/Assets/Resources/UIToolkit/Window/UTKAccordionListWindow.uxml.meta
new file mode 100644
index 00000000..652e5704
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKAccordionListWindow.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: a67b2efb28d47e144a5dfee47e41d855
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Window/UTKAccordionListWindowUss.uss b/Assets/Resources/UIToolkit/Window/UTKAccordionListWindowUss.uss
new file mode 100644
index 00000000..6ef41a6a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKAccordionListWindowUss.uss
@@ -0,0 +1,70 @@
+/*
+ * UTKAccordionListWindow.uss
+ *
+ * UTKAccordionListWindow 컴포넌트의 스타일 정의입니다.
+ * UTKAccordionList를 래핑하는 윈도우 형태의 컨테이너입니다.
+ * 테마 지원: var(--color-*) 변수 사용
+ */
+
+/* ============================================
+ 윈도우 루트 (Window Root)
+ ============================================ */
+
+UTKAccordionListWindow {
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+}
+
+/* ============================================
+ 컨테이너 (Container)
+ ============================================ */
+
+.accordion-list-window-container {
+ background-color: var(--color-bg-panel);
+ height: 100%;
+ width: 300px;
+ padding: 10px 20px 25px 20px;
+ flex-grow: 1;
+}
+
+/* ============================================
+ 헤더 (Header)
+ ============================================ */
+
+.accordion-window-header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 10px;
+ height: 24px;
+ flex-shrink: 0;
+}
+
+.accordion-window-title {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ -unity-font-style: normal;
+ margin: 0;
+ padding: 0;
+ -unity-text-align: middle-left;
+}
+
+/* ============================================
+ 닫기 버튼 (Close Button) - UTKButton 스타일 오버라이드
+ ============================================ */
+
+.accordion-window-close-button {
+ width: 22px;
+ height: 22px;
+ min-width: 22px;
+ min-height: 22px;
+ border-width: 0;
+ margin: 0;
+ padding: 0;
+ align-self: center;
+ display: none; /* 기본 숨김, 필요시 flex로 변경 */
+}
diff --git a/Assets/Resources/UIToolkit/Window/UTKAccordionListWindowUss.uss.meta b/Assets/Resources/UIToolkit/Window/UTKAccordionListWindowUss.uss.meta
new file mode 100644
index 00000000..692b131e
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKAccordionListWindowUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 59fe0c5afff3ea644aa282cc35192a34
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Window/UTKComponentListWindow.uxml b/Assets/Resources/UIToolkit/Window/UTKComponentListWindow.uxml
new file mode 100644
index 00000000..58777f16
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKComponentListWindow.uxml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Window/UTKComponentListWindow.uxml.meta b/Assets/Resources/UIToolkit/Window/UTKComponentListWindow.uxml.meta
new file mode 100644
index 00000000..daa66746
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKComponentListWindow.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 253ecad9e87e85f418cd7f91fd213bc0
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Window/UTKComponentListWindowUss.uss b/Assets/Resources/UIToolkit/Window/UTKComponentListWindowUss.uss
new file mode 100644
index 00000000..c9c117a1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKComponentListWindowUss.uss
@@ -0,0 +1,104 @@
+/*
+ * UTKComponentListWindow.uss
+ *
+ * UTKComponentListWindow 및 UTKComponentTabListWindow 컴포넌트의 스타일 정의입니다.
+ * 테마 지원: var(--color-*) 변수 사용
+ */
+
+UTKComponentListWindow {
+ height: 100%;
+ flex-grow: 1;
+}
+
+UTKComponentTabListWindow {
+ height: 100%;
+ flex-grow: 1;
+}
+
+.container {
+ background-color: var(--color-bg-panel);
+ height: 100%;
+ align-self: flex-start;
+ padding: 5px;
+ padding-top: 10px;
+ padding-bottom: 25px;
+ padding-left: 20px;
+ padding-right: 20px;
+ width: 300px;
+}
+
+/* ============================================
+ 헤더 (Header)
+ ============================================ */
+
+.component-window-header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 10px;
+ height: 24px;
+ flex-shrink: 0;
+}
+
+.component-window-title {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ -unity-font-style: normal;
+ margin: 0;
+ padding: 0;
+ -unity-text-align: middle-left;
+}
+
+/* ============================================
+ 닫기 버튼 (Close Button) - UTKButton 스타일 오버라이드
+ ============================================ */
+
+.component-window-close-button {
+ width: 22px;
+ height: 22px;
+ min-width: 22px;
+ min-height: 22px;
+ border-width: 0;
+ margin: 0;
+ padding: 0;
+ align-self: center;
+ display: none; /* 기본 숨김, 필요시 flex로 변경 */
+}
+
+/* ============================================
+ 탭 버튼 (Tab Buttons) - UTKTabView 스타일 적용
+ ============================================ */
+
+.tab-button {
+ background-color: transparent;
+ border-width: 0;
+ border-bottom-width: 2px;
+ border-bottom-color: transparent;
+ padding: var(--space-s) var(--space-l);
+ margin-right: var(--space-s);
+ margin-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-body2);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ flex-shrink: 0;
+ transition-duration: var(--anim-fast);
+ transition-property: background-color, border-color, color;
+}
+
+.tab-button:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.tab-button-selected {
+ background-color: transparent;
+ color: var(--color-btn-primary);
+ border-bottom-color: var(--color-btn-primary);
+ -unity-font-style: bold;
+}
+
+.tab-button-selected:hover {
+ background-color: var(--color-btn-hover);
+}
diff --git a/Assets/Resources/UIToolkit/Window/UTKComponentListWindowUss.uss.meta b/Assets/Resources/UIToolkit/Window/UTKComponentListWindowUss.uss.meta
new file mode 100644
index 00000000..cdf6f272
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKComponentListWindowUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 347141d660f7e3b4b8f54ced23166b82
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Window/UTKComponentTabListWindow.uxml b/Assets/Resources/UIToolkit/Window/UTKComponentTabListWindow.uxml
new file mode 100644
index 00000000..6a952129
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKComponentTabListWindow.uxml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Window/UTKComponentTabListWindow.uxml.meta b/Assets/Resources/UIToolkit/Window/UTKComponentTabListWindow.uxml.meta
new file mode 100644
index 00000000..133bd3b7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKComponentTabListWindow.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 0520c39e010a25140b8c514372d164f8
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Window/UTKImageListWindow.uxml b/Assets/Resources/UIToolkit/Window/UTKImageListWindow.uxml
new file mode 100644
index 00000000..a4d54234
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKImageListWindow.uxml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Window/UTKImageListWindow.uxml.meta b/Assets/Resources/UIToolkit/Window/UTKImageListWindow.uxml.meta
new file mode 100644
index 00000000..884e02b0
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKImageListWindow.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: a948977a26d0b9c44b340ed353f70a24
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Window/UTKImageListWindowUss.uss b/Assets/Resources/UIToolkit/Window/UTKImageListWindowUss.uss
new file mode 100644
index 00000000..a1548aee
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKImageListWindowUss.uss
@@ -0,0 +1,70 @@
+/*
+ * UTKImageListWindow.uss
+ *
+ * UTKImageListWindow 컴포넌트의 스타일 정의입니다.
+ * UTKImageList를 래핑하는 윈도우 형태의 컨테이너입니다.
+ * 테마 지원: var(--color-*) 변수 사용
+ */
+
+/* ============================================
+ 윈도우 루트 (Window Root)
+ ============================================ */
+
+UTKImageListWindow {
+ height: 100%;
+ position: absolute;
+ top: 0;
+ left: 0;
+ bottom: 0;
+}
+
+/* ============================================
+ 컨테이너 (Container)
+ ============================================ */
+
+.image-list-window-container {
+ background-color: var(--color-bg-panel);
+ height: 100%;
+ width: 300px;
+ padding: 10px 20px 25px 20px;
+ flex-grow: 1;
+}
+
+/* ============================================
+ 헤더 (Header)
+ ============================================ */
+
+.window-header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 10px;
+ height: 24px;
+ flex-shrink: 0;
+}
+
+.window-title {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ -unity-font-style: normal;
+ margin: 0;
+ padding: 0;
+ -unity-text-align: middle-left;
+}
+
+/* ============================================
+ 닫기 버튼 (Close Button) - UTKButton 스타일 오버라이드
+ ============================================ */
+
+.window-close-button {
+ width: 22px;
+ height: 22px;
+ min-width: 22px;
+ min-height: 22px;
+ border-width: 0;
+ margin: 0;
+ padding: 0;
+ align-self: center;
+ display: none; /* 기본 숨김, 필요시 flex로 변경 */
+}
diff --git a/Assets/Resources/UIToolkit/Window/UTKImageListWindowUss.uss.meta b/Assets/Resources/UIToolkit/Window/UTKImageListWindowUss.uss.meta
new file mode 100644
index 00000000..8b389781
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKImageListWindowUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e1cdefa2dbb1dd7419c0f16ba456d4ab
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Window/UTKPropertyListWindow.uxml b/Assets/Resources/UIToolkit/Window/UTKPropertyListWindow.uxml
new file mode 100644
index 00000000..498dfc34
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKPropertyListWindow.uxml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Window/UTKPropertyListWindow.uxml.meta b/Assets/Resources/UIToolkit/Window/UTKPropertyListWindow.uxml.meta
new file mode 100644
index 00000000..f90dd82a
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKPropertyListWindow.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: c65692f7d30cee54483b01c3283a705b
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Window/UTKPropertyListWindowUss.uss b/Assets/Resources/UIToolkit/Window/UTKPropertyListWindowUss.uss
new file mode 100644
index 00000000..ce47af22
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKPropertyListWindowUss.uss
@@ -0,0 +1,78 @@
+/*
+ * UTKPropertyListWindowUss.uss
+ *
+ * UTKPropertyListWindow 컴포넌트의 스타일 정의입니다.
+ * 테마 지원: var(--color-*) 변수 사용
+ *
+ * 다른 Window 컴포넌트(UTKTreeListWindow, UTKAccordionListWindow)와
+ * 동일한 스타일 가이드를 따릅니다.
+ */
+
+/* ============================================
+ 윈도우 루트 (Window Root)
+ ============================================ */
+
+.utk-property-window {
+ background-color: var(--color-bg-panel);
+ flex-grow: 1;
+ bottom: 0;
+ min-width: 390px;
+ width: 390px;
+ padding: 10px 20px 25px 20px;
+}
+
+/* ============================================
+ 헤더 (Header)
+ ============================================ */
+
+.utk-property-window__header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 10px;
+ height: 24px;
+ flex-shrink: 0;
+}
+
+/* UTKLabel 타이틀 스타일 */
+.utk-property-window__title {
+ flex-grow: 1;
+}
+
+.utk-property-window__title .utk-label__text {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ -unity-font-style: normal;
+ margin: 0;
+ padding: 0;
+ -unity-text-align: middle-left;
+}
+
+/* ============================================
+ 닫기 버튼 (Close Button) - UTKButton 스타일 오버라이드
+ ============================================ */
+
+.utk-property-window__close-btn {
+ width: 22px;
+ height: 22px;
+ min-width: 22px;
+ min-height: 22px;
+ border-width: 0;
+ padding: 0;
+ margin: 0;
+ align-self: center;
+ display: none; /* 기본 숨김, 필요시 flex로 변경 */
+}
+
+/* ============================================
+ 콘텐츠 (Content)
+ ============================================ */
+
+.utk-property-window__content {
+ flex-grow: 1;
+}
+
+#unity-content-viewport {
+ padding-right: 4px; /* 스크롤바 여유 공간 */
+}
diff --git a/Assets/Resources/UIToolkit/Window/UTKPropertyListWindowUss.uss.meta b/Assets/Resources/UIToolkit/Window/UTKPropertyListWindowUss.uss.meta
new file mode 100644
index 00000000..849509ce
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKPropertyListWindowUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: f9d09b438b4037f4882690134b40529d
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindow.uxml b/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindow.uxml
new file mode 100644
index 00000000..5cfa5844
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindow.uxml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindow.uxml.meta b/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindow.uxml.meta
new file mode 100644
index 00000000..b78ab3c1
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindow.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 22934f67f61d09a419d467bdcc086cfb
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindowUss.uss b/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindowUss.uss
new file mode 100644
index 00000000..7b8c1eb4
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindowUss.uss
@@ -0,0 +1,107 @@
+/*
+ * UTKPropertyTabListWindowUss.uss
+ *
+ * UTKPropertyTabListWindow 컴포넌트의 스타일 정의입니다.
+ * 테마 지원: var(--color-*) 변수 사용
+ *
+ * UTKComponentTabListWindow 스타일을 기반으로 프로퍼티 탭 영역이 추가되었습니다.
+ */
+
+/* ============================================
+ 윈도우 루트 (Window Root)
+ ============================================ */
+
+.utk-property-tab-window {
+ background-color: var(--color-bg-panel);
+ flex-grow: 1;
+ bottom: 0;
+ min-width: 390px;
+ width: 390px;
+ padding: 10px 20px 25px 20px;
+}
+
+/* ============================================
+ 헤더 (Header)
+ ============================================ */
+
+.utk-property-tab-window__header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 10px;
+ height: 24px;
+ flex-shrink: 0;
+}
+
+/* 타이틀 스타일 */
+.utk-property-tab-window__title {
+ flex-grow: 1;
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ -unity-font-style: normal;
+ margin: 0;
+ padding: 0;
+ -unity-text-align: middle-left;
+}
+
+/* ============================================
+ 닫기 버튼 (Close Button)
+ ============================================ */
+
+.utk-property-tab-window__close-btn {
+ width: 22px;
+ height: 22px;
+ min-width: 22px;
+ min-height: 22px;
+ border-width: 0;
+ padding: 0;
+ margin: 0;
+ align-self: center;
+ display: none; /* 기본 숨김, 필요시 flex로 변경 */
+}
+
+/* ============================================
+ 탭 버튼 (Tab Buttons)
+ ============================================ */
+
+.tab-button {
+ background-color: transparent;
+ border-width: 0;
+ border-bottom-width: 2px;
+ border-bottom-color: transparent;
+ padding: var(--space-s) var(--space-l);
+ margin-right: var(--space-s);
+ margin-left: 0;
+ margin-top: 0;
+ margin-bottom: 0;
+ color: var(--color-text-secondary);
+ font-size: var(--font-size-body2);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ flex-shrink: 0;
+ transition-duration: var(--anim-fast);
+ transition-property: background-color, border-color, color;
+}
+
+.tab-button:hover {
+ background-color: var(--color-btn-hover);
+}
+
+.tab-button-selected {
+ background-color: transparent;
+ color: var(--color-btn-primary);
+ border-bottom-color: var(--color-btn-primary);
+ -unity-font-style: bold;
+}
+
+.tab-button-selected:hover {
+ background-color: var(--color-btn-hover);
+}
+
+/* ============================================
+ 콘텐츠 (Content - UTKPropertyList)
+ ============================================ */
+
+#unity-content-viewport {
+ padding-right: 4px; /* 스크롤바 여유 공간 */
+}
diff --git a/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindowUss.uss.meta b/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindowUss.uss.meta
new file mode 100644
index 00000000..bdfe6a08
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKPropertyTabListWindowUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 487dd3e0868e89645b0b5cfae0108370
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Resources/UIToolkit/Window/UTKTreeListWindow.uxml b/Assets/Resources/UIToolkit/Window/UTKTreeListWindow.uxml
new file mode 100644
index 00000000..9d5d575b
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKTreeListWindow.uxml
@@ -0,0 +1,14 @@
+
+
+
+
diff --git a/Assets/Resources/UIToolkit/Window/UTKTreeListWindow.uxml.meta b/Assets/Resources/UIToolkit/Window/UTKTreeListWindow.uxml.meta
new file mode 100644
index 00000000..97fc9fc7
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKTreeListWindow.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 47c61b579b8a69e4883b732447fa6059
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Resources/UIToolkit/Window/UTKTreeListWindowUss.uss b/Assets/Resources/UIToolkit/Window/UTKTreeListWindowUss.uss
new file mode 100644
index 00000000..7b673c14
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKTreeListWindowUss.uss
@@ -0,0 +1,141 @@
+/*
+ * UTKTreeListWindow.uss
+ *
+ * UTKTreeListWindow 컴포넌트의 스타일 정의입니다.
+ * 테마 지원: var(--color-*) 변수 사용
+ */
+
+UTKTreeListWindow {
+ flex-grow: 1;
+ height: 100%;
+ align-self: flex-start;
+}
+
+.tree-menu-container {
+ background-color: var(--color-bg-panel);
+ flex-grow: 1;
+ height: 100%;
+ align-self: flex-start;
+ padding: 5px;
+ padding-top: 10px;
+ padding-bottom: 25px;
+ padding-left: 20px;
+ padding-right: 20px;
+ width: 300px;
+}
+
+/* ============================================
+ 헤더 (Header)
+ ============================================ */
+
+.tree-window-header {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ margin-bottom: 10px;
+ height: 24px;
+ flex-shrink: 0;
+}
+
+.tree-window-title {
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Medium');
+ -unity-font-style: normal;
+ margin: 0;
+ padding: 0;
+ -unity-text-align: middle-left;
+}
+
+/* ============================================
+ 닫기 버튼 (Close Button) - UTKButton 스타일 오버라이드
+ ============================================ */
+
+.tree-window-close-button {
+ width: 22px;
+ height: 22px;
+ min-width: 22px;
+ min-height: 22px;
+ border-width: 0;
+ margin: 0;
+ padding: 0;
+ align-self: center;
+ display: none; /* 기본 숨김, 필요시 flex로 변경 */
+}
+
+/* ============================================
+ 검색 필드 (Search Field)
+ ============================================ */
+
+.search-container {
+ flex-direction: row;
+ align-items: center;
+ margin: 0 0 var(--space-m) 0;
+}
+
+.search-field {
+ flex-grow: 1;
+ height: 24px;
+ margin: 0;
+}
+
+.search-field .unity-text-field__input {
+ background-color: var(--color-bg-input);
+ border-width: var(--border-width);
+ border-color: var(--color-border);
+ border-radius: var(--radius-s);
+ padding: var(--space-s) var(--space-m);
+ min-height: 24px;
+ font-size: var(--font-size-body2);
+}
+
+.search-field:focus .unity-text-field__input {
+ border-color: var(--color-border-focus);
+}
+
+/* ============================================
+ Clear 버튼 (Clear Button) - UTKButton 스타일 오버라이드
+ ============================================ */
+
+.search-clear-button {
+ width: 16px;
+ height: 16px;
+ min-width: 16px;
+ min-height: 16px;
+ border-width: 0;
+ margin: 0;
+ padding: 0;
+ position: absolute;
+ right: var(--space-s);
+ align-self: center;
+}
+
+/* ============================================
+ TreeView 아이템 컨테이너 (TreeView Item Container)
+ ============================================ */
+
+.unity-tree-view__item-content TemplateContainer {
+ flex-grow: 1;
+}
+
+/* ============================================
+ 트리 리스트 아이템 (Tree List Item) - UTKTreeListItem
+ ============================================ */
+
+.tree-list-item-container {
+ flex-direction: row;
+ justify-content: space-between;
+ align-items: center;
+ height: 18px;
+ padding: 0 8px 0 0;
+}
+
+.tree-list-item-container .item-label-style {
+ flex-grow: 1;
+ margin: 0;
+ padding: 0 4px;
+ color: var(--color-text-primary);
+ font-size: var(--font-size-label3);
+ -unity-font-definition: resource('Fonts/Pretendard/Pretendard-Bold');
+ -unity-text-align: middle-left;
+}
diff --git a/Assets/Resources/UIToolkit/Window/UTKTreeListWindowUss.uss.meta b/Assets/Resources/UIToolkit/Window/UTKTreeListWindowUss.uss.meta
new file mode 100644
index 00000000..790244c2
--- /dev/null
+++ b/Assets/Resources/UIToolkit/Window/UTKTreeListWindowUss.uss.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 94bace9f4fd4e854b80330dc68b0ebed
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0}
+ disableValidation: 0
diff --git a/Assets/Sample/ColorPickerDatePicker.unity b/Assets/Sample/ColorPickerDatePickerSample.unity
similarity index 100%
rename from Assets/Sample/ColorPickerDatePicker.unity
rename to Assets/Sample/ColorPickerDatePickerSample.unity
diff --git a/Assets/Sample/ColorPickerDatePicker.unity.meta b/Assets/Sample/ColorPickerDatePickerSample.unity.meta
similarity index 100%
rename from Assets/Sample/ColorPickerDatePicker.unity.meta
rename to Assets/Sample/ColorPickerDatePickerSample.unity.meta
diff --git a/Assets/Sample/CursorManagerSample.unity b/Assets/Sample/CursorManagerSample.unity
index 3f61b76a..b5605904 100644
--- a/Assets/Sample/CursorManagerSample.unity
+++ b/Assets/Sample/CursorManagerSample.unity
@@ -290,6 +290,21 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 1bbeb3b46a029fe4896da3350401b214, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::CursorManagerSample
+ _buttonWidth: 150
+ _buttonHeight: 30
+ _padding: 10
+ _cursorManager: {fileID: 1239580076}
+--- !u!114 &1239580076 stripped
+MonoBehaviour:
+ m_CorrespondingSourceObject: {fileID: 4705914027077067912, guid: 42ed16ae6a9f96d4f9cd6c292a9edd85, type: 3}
+ m_PrefabInstance: {fileID: 1339613670}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 0}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 39e7217342f0a104a985deeef6a5dc4a, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1001 &1339613670
PrefabInstance:
m_ObjectHideFlags: 0
diff --git a/Assets/Sample/HierarchySample.unity b/Assets/Sample/HierarchySample.unity
index 884b0ea4..03d6405b 100644
--- a/Assets/Sample/HierarchySample.unity
+++ b/Assets/Sample/HierarchySample.unity
@@ -471,17 +471,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Version: 3
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
- m_LightLayerMask: 1
- m_RenderingLayers: 1
m_CustomShadowLayers: 0
- m_ShadowLayerMask: 1
- m_ShadowRenderingLayers: 1
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
+ m_RenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_ShadowRenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_Version: 4
+ m_LightLayerMask: 1
+ m_ShadowLayerMask: 1
+ m_RenderingLayers: 1
+ m_ShadowRenderingLayers: 1
--- !u!1 &2136621999
GameObject:
m_ObjectHideFlags: 0
@@ -582,6 +588,14 @@ PrefabInstance:
serializedVersion: 3
m_TransformParent: {fileID: 1218340765}
m_Modifications:
+ - target: {fileID: 798050974035107396, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_Pivot.y
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 798050974035107396, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 12
+ objectReference: {fileID: 0}
- target: {fileID: 1574318677252675885, guid: 55334174237ec37438ae05ee0b89079a, type: 3}
propertyPath: m_Pivot.x
value: 0
diff --git a/Assets/Sample/Injector/InjectorSampleAudioManager.cs b/Assets/Sample/Injector/InjectorSampleAudioManager.cs
index 02626796..c70e9dba 100644
--- a/Assets/Sample/Injector/InjectorSampleAudioManager.cs
+++ b/Assets/Sample/Injector/InjectorSampleAudioManager.cs
@@ -13,13 +13,13 @@ namespace Sample
/// [ 특징 ]
///
/// - 프리팹 없이 런타임에 새 GameObject가 자동 생성됨
- /// - Injector가 new GameObject().AddComponent<T>()로 생성
+ /// - Injector가 new GameObject().AddComponent()로 생성
/// - App 라이프사이클이면 DontDestroyOnLoad 자동 적용
/// - 다른 서비스([Inject] ILogService)에 대한 의존성 주입 지원
///
///
/// [ 등록 방법 ]
- /// Injector.Register<IAudioManager, InjectorSampleAudioManager>(ServiceLifetime.App);
+ /// Injector.Register(ServiceLifetime.App);
///
/// [ 사용 방법 ]
///
@@ -41,8 +41,8 @@ namespace Sample
///
/// private void Awake()
/// {
- /// bgmSource = gameObject.AddComponent<AudioSource>();
- /// sfxSource = gameObject.AddComponent<AudioSource>();
+ /// bgmSource = gameObject.AddComponent();
+ /// sfxSource = gameObject.AddComponent();
/// bgmSource.loop = true;
/// }
///
diff --git a/Assets/Sample/Injector/InjectorSampleNetworkManager.cs b/Assets/Sample/Injector/InjectorSampleNetworkManager.cs
index 2e61a759..38398aac 100644
--- a/Assets/Sample/Injector/InjectorSampleNetworkManager.cs
+++ b/Assets/Sample/Injector/InjectorSampleNetworkManager.cs
@@ -7,7 +7,7 @@ namespace Sample
/// Type D 예시: MonoBehaviour SingletonApp - 네트워크 관리자
///
///
- /// [ 타입 ] Type D - MonoBehaviour SingletonApp (SingletonApp<T> 상속)
+ /// [ 타입 ] Type D - MonoBehaviour SingletonApp (SingletonApp 상속)
/// [ 라이프사이클 ] App - 씬 전환 시에도 유지 (DontDestroyOnLoad)
///
/// [ 특징 ]
@@ -19,7 +19,7 @@ namespace Sample
///
///
/// [ 등록 방법 ]
- /// Injector.RegisterSingleton<InjectorSampleNetworkManager>();
+ /// Injector.RegisterSingleton();
///
/// [ 씬 설정 (선택) ]
///
@@ -40,8 +40,8 @@ namespace Sample
///
/// [ InjectorSampleSettingsManager와의 차이점 ]
///
- /// - SettingsManagerSingleton<T> - 순수 C#, GameObject 없음
- /// - NetworkManagerSingletonApp<T> - MonoBehaviour, GameObject 필요
+ /// - SettingsManagerSingleton - 순수 C#, GameObject 없음
+ /// - NetworkManagerSingletonApp - MonoBehaviour, GameObject 필요
///
///
public class InjectorSampleNetworkManager : SingletonApp
diff --git a/Assets/Sample/Injector/InjectorSampleSettingsManager.cs b/Assets/Sample/Injector/InjectorSampleSettingsManager.cs
index d51282c1..17509dac 100644
--- a/Assets/Sample/Injector/InjectorSampleSettingsManager.cs
+++ b/Assets/Sample/Injector/InjectorSampleSettingsManager.cs
@@ -7,7 +7,7 @@ namespace Sample
/// Type D 예시: 순수 C# Singleton - 게임 설정 관리자
///
///
- /// [ 타입 ] Type D - 순수 C# Singleton (Singleton<T> 상속)
+ /// [ 타입 ] Type D - 순수 C# Singleton (Singleton 상속)
/// [ 라이프사이클 ] App - 애플리케이션 전체 유지
///
/// [ 특징 ]
@@ -19,7 +19,7 @@ namespace Sample
///
///
/// [ 등록 방법 ]
- /// Injector.RegisterSingleton<InjectorSampleSettingsManager>();
+ /// Injector.RegisterSingleton();
///
/// [ 사용 방법 ]
///
diff --git a/Assets/Sample/Injector/InjectorSampleUIManager.cs b/Assets/Sample/Injector/InjectorSampleUIManager.cs
index 3bc9156c..88ca11d6 100644
--- a/Assets/Sample/Injector/InjectorSampleUIManager.cs
+++ b/Assets/Sample/Injector/InjectorSampleUIManager.cs
@@ -34,7 +34,7 @@ namespace Sample
///
/// protected override void RegisterServices()
/// {
- /// Injector.RegisterPrefab<IUIManager>(uiManagerPrefab.gameObject, ServiceLifetime.App);
+ /// Injector.RegisterPrefab(uiManagerPrefab.gameObject, ServiceLifetime.App);
/// }
///
///
diff --git a/Assets/Sample/Injector/InjectorSamples.cs b/Assets/Sample/Injector/InjectorSamples.cs
index 2638b1c5..f9485388 100644
--- a/Assets/Sample/Injector/InjectorSamples.cs
+++ b/Assets/Sample/Injector/InjectorSamples.cs
@@ -33,7 +33,7 @@ namespace Sample
///
///
/// 구현체: ConsoleLogger
- /// 등록: Injector.Register<ILogService, ConsoleLogger>(ServiceLifetime.App)
+ /// 등록: Injector.Register(ServiceLifetime.App)
/// 사용: [Inject] private ILogService _logger;
///
public interface ILogService
@@ -73,8 +73,8 @@ namespace Sample
///
///
/// 구현체: SceneConfig
- /// 등록: Injector.Register<ISceneConfig, SceneConfig>(ServiceLifetime.Scene)
- /// 또는 Factory: Injector.RegisterFactory<ISceneConfig>(injector => new SceneConfig { ... })
+ /// 등록: Injector.Register(ServiceLifetime.Scene)
+ /// 또는 Factory: Injector.RegisterFactory(injector => new SceneConfig { ... })
///
public interface ISceneConfig
{
@@ -129,7 +129,7 @@ namespace Sample
///
///
/// // 등록
- /// Injector.Register<IGameService, GameService>(ServiceLifetime.App);
+ /// Injector.Register(ServiceLifetime.App);
///
/// // 사용
/// [Inject] private IGameService _gameService;
@@ -154,7 +154,7 @@ namespace Sample
///
/// 구현체: InjectorSampleAudioManager (별도 파일)
/// 타입: Type B - MonoBehaviour 동적 생성
- /// 등록: Injector.Register<IAudioManager, InjectorSampleAudioManager>(ServiceLifetime.App)
+ /// 등록: Injector.Register(ServiceLifetime.App)
/// 특징: 런타임에 새 GameObject가 생성되고 AudioSource 등 Unity 컴포넌트 활용 가능
///
public interface IAudioManager
@@ -173,7 +173,7 @@ namespace Sample
///
/// 구현체: InjectorSampleEnemySpawner (별도 파일)
/// 타입: Type B - MonoBehaviour 동적 생성
- /// 등록: Injector.Register<IEnemySpawner, InjectorSampleEnemySpawner>(ServiceLifetime.Scene)
+ /// 등록: Injector.Register(ServiceLifetime.Scene)
/// 라이프사이클: Scene - 씬 전환 시 적 스포너와 생성된 적들이 함께 정리됨
///
public interface IEnemySpawner
@@ -194,7 +194,7 @@ namespace Sample
///
/// 구현체: InjectorSampleUIManager (별도 파일)
/// 타입: Type C - Prefab 기반 MonoBehaviour
- /// 등록: Injector.RegisterPrefab<IUIManager>(uiManagerPrefab, ServiceLifetime.App)
+ /// 등록: Injector.RegisterPrefab(uiManagerPrefab, ServiceLifetime.App)
/// 특징:
///
/// - 프리팹에 미리 설정된 UI 요소들이 유지됨
@@ -220,7 +220,7 @@ namespace Sample
///
/// 구현체: InjectorSampleSceneUI (별도 파일)
/// 타입: Type C - Prefab 기반 MonoBehaviour
- /// 등록: Injector.RegisterPrefab<ISceneUI>(sceneUIPrefab, ServiceLifetime.Scene)
+ /// 등록: Injector.RegisterPrefab(sceneUIPrefab, ServiceLifetime.Scene)
/// 라이프사이클: Scene - 씬 전환 시 UI가 함께 정리됨
///
public interface ISceneUI
@@ -268,11 +268,11 @@ namespace Sample
///
///
/// // 등록
- /// Injector.Register<IRequestHandler, RequestHandler>(ServiceLifetime.Transient);
+ /// Injector.Register(ServiceLifetime.Transient);
///
/// // 사용 - 매번 다른 인스턴스
- /// var handler1 = Injector.Resolve<IRequestHandler>(); // RequestId: "a1b2c3d4"
- /// var handler2 = Injector.Resolve<IRequestHandler>(); // RequestId: "e5f6g7h8"
+ /// var handler1 = Injector.Resolve(); // RequestId: "a1b2c3d4"
+ /// var handler2 = Injector.Resolve(); // RequestId: "e5f6g7h8"
///
///
public class RequestHandler : IRequestHandler
diff --git a/Assets/Sample/LibraryWindowSample.unity b/Assets/Sample/LibraryWindowSample.unity
index 56fa9b5f..353f95ab 100644
--- a/Assets/Sample/LibraryWindowSample.unity
+++ b/Assets/Sample/LibraryWindowSample.unity
@@ -219,6 +219,22 @@ PrefabInstance:
propertyPath: m_Name
value: LibraryWindow
objectReference: {fileID: 0}
+ - target: {fileID: 4231516939608533883, guid: 8962934fed0ee4943aef33217fdcc13e, type: 3}
+ propertyPath: m_AnchorMax.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4231516939608533883, guid: 8962934fed0ee4943aef33217fdcc13e, type: 3}
+ propertyPath: m_AnchorMin.y
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4231516939608533883, guid: 8962934fed0ee4943aef33217fdcc13e, type: 3}
+ propertyPath: m_AnchoredPosition.x
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 4231516939608533883, guid: 8962934fed0ee4943aef33217fdcc13e, type: 3}
+ propertyPath: m_AnchoredPosition.y
+ value: 0
+ objectReference: {fileID: 0}
- target: {fileID: 5868297151316892965, guid: 8962934fed0ee4943aef33217fdcc13e, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
@@ -580,17 +596,23 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
m_Name:
m_EditorClassIdentifier:
- m_Version: 3
m_UsePipelineSettings: 1
m_AdditionalLightsShadowResolutionTier: 2
- m_LightLayerMask: 1
- m_RenderingLayers: 1
m_CustomShadowLayers: 0
- m_ShadowLayerMask: 1
- m_ShadowRenderingLayers: 1
m_LightCookieSize: {x: 1, y: 1}
m_LightCookieOffset: {x: 0, y: 0}
m_SoftShadowQuality: 0
+ m_RenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_ShadowRenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_Version: 4
+ m_LightLayerMask: 1
+ m_ShadowLayerMask: 1
+ m_RenderingLayers: 1
+ m_ShadowRenderingLayers: 1
--- !u!1 &2136621999
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets/Sample/MenuSample.cs b/Assets/Sample/MenuSample.cs
index c5c9e4eb..bda41be7 100644
--- a/Assets/Sample/MenuSample.cs
+++ b/Assets/Sample/MenuSample.cs
@@ -1,5 +1,4 @@
using Cysharp.Threading.Tasks;
-using Factory.Config;
using System.Collections.Generic;
using UnityEngine;
using UVC.Data.Core;
@@ -30,28 +29,28 @@ public class MenuSample : MonoBehaviour
private async UniTask SettupConfigAsync()
{
- if (FactoryAppConfig.LoadConfig())
- {
- Application.targetFrameRate = FactoryAppConfig.Config.TargetFrameRate;
+ // if (FactoryAppConfig.LoadConfig())
+ // {
+ // Application.targetFrameRate = FactoryAppConfig.Config.TargetFrameRate;
- //기본 언어 설정
- bool success = LocalizationManager.Instance.LoadDefaultLocalizationData(FactoryAppConfig.Config.Language);
- Debug.Log($"LocalizationManager: LoadDefaultLocalizationData success: {success}");
- if (!Application.isEditor && Application.platform == RuntimePlatform.WindowsPlayer)
- {
- //창 설정
- if (FactoryAppConfig.Config.Window != null)
- {
- WindowTools.Instance.Init(FactoryAppConfig.Config.Window);
- }
- }
+ // //기본 언어 설정
+ // bool success = LocalizationManager.Instance.LoadDefaultLocalizationData(FactoryAppConfig.Config.Language);
+ // Debug.Log($"LocalizationManager: LoadDefaultLocalizationData success: {success}");
+ // if (!Application.isEditor && Application.platform == RuntimePlatform.WindowsPlayer)
+ // {
+ // //창 설정
+ // if (FactoryAppConfig.Config.Window != null)
+ // {
+ // WindowTools.Instance.Init(FactoryAppConfig.Config.Window);
+ // }
+ // }
- FactoryConstants.API_DOMAIN = FactoryAppConfig.Config.Api;
- FactoryConstants.MQTT_DOMAIN = FactoryAppConfig.Config.Mqtt.Domain;
- FactoryConstants.MQTT_PORT = FactoryAppConfig.Config.Mqtt.Port;
- FactoryConstants.MQTT_DATA_KEY = FactoryAppConfig.Config.Mqtt.DataKey;
- FactoryConstants.MQTT_MESSAGEPACK_ENABLED = FactoryAppConfig.Config.Mqtt.MessagePack;
- }
+ // FactoryConstants.API_DOMAIN = FactoryAppConfig.Config.Api;
+ // FactoryConstants.MQTT_DOMAIN = FactoryAppConfig.Config.Mqtt.Domain;
+ // FactoryConstants.MQTT_PORT = FactoryAppConfig.Config.Mqtt.Port;
+ // FactoryConstants.MQTT_DATA_KEY = FactoryAppConfig.Config.Mqtt.DataKey;
+ // FactoryConstants.MQTT_MESSAGEPACK_ENABLED = FactoryAppConfig.Config.Mqtt.MessagePack;
+ // }
}
private void SetupTopMenu()
diff --git a/Assets/Sample/UIToolkit.meta b/Assets/Sample/UIToolkit.meta
new file mode 100644
index 00000000..b1db38ab
--- /dev/null
+++ b/Assets/Sample/UIToolkit.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: a42e38042c76a7c478b6f7ef53780744
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sample/UIToolkit/UTKAccordionListWindow.unity b/Assets/Sample/UIToolkit/UTKAccordionListWindow.unity
new file mode 100644
index 00000000..5c5a3640
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKAccordionListWindow.unity
@@ -0,0 +1,655 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 10
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 13
+ m_BakeOnSceneLoad: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 512
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 256
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 1
+ m_PVRDenoiserTypeDirect: 1
+ m_PVRDenoiserTypeIndirect: 1
+ m_PVRDenoiserTypeAO: 1
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 1
+ m_PVRFilteringGaussRadiusAO: 1
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 3
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ buildHeightMesh: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &1097328750
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1097328752}
+ - component: {fileID: 1097328754}
+ - component: {fileID: 1097328755}
+ m_Layer: 0
+ m_Name: Sample
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1097328752
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1097328754
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
+ m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
+ m_ParentUI: {fileID: 0}
+ sourceAsset: {fileID: 9197481963319205126, guid: 3cdfb535a2976ab48975316e1f7196d9, type: 3}
+ m_SortingOrder: 0
+ m_Position: 0
+ m_WorldSpaceSizeMode: 1
+ m_WorldSpaceWidth: 1920
+ m_WorldSpaceHeight: 1080
+ m_PivotReferenceSize: 0
+ m_Pivot: 0
+ m_WorldSpaceCollider: {fileID: 0}
+--- !u!114 &1097328755
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 60b90a105d06c2e41bc9b235a2626f03, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::UTKAccordionListWindowSample
+ uiDocument: {fileID: 1097328754}
+ showDragGhost: 1
+--- !u!1 &1192809690
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1192809694}
+ - component: {fileID: 1192809693}
+ - component: {fileID: 1192809692}
+ - component: {fileID: 1192809691}
+ m_Layer: 0
+ m_Name: Plane
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!64 &1192809691
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192809690}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 5
+ m_Convex: 0
+ m_CookingOptions: 30
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &1192809692
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192809690}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1192809693
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192809690}
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1192809694
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192809690}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 10, y: 10, z: 10}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1331954412
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1331954415}
+ - component: {fileID: 1331954414}
+ - component: {fileID: 1331954413}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1331954413
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SendPointerHoverToParent: 1
+ m_MoveRepeatDelay: 0.5
+ m_MoveRepeatRate: 0.1
+ m_XRTrackingOrigin: {fileID: 0}
+ m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_DeselectOnBackgroundClick: 1
+ m_PointerBehavior: 0
+ m_CursorLockBehavior: 0
+ m_ScrollDeltaPerTick: 6
+--- !u!114 &1331954414
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!4 &1331954415
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1414861612
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1414861614}
+ - component: {fileID: 1414861613}
+ - component: {fileID: 1414861615}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &1414861613
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ serializedVersion: 11
+ m_Type: 1
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ForceVisible: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+ m_LightUnit: 1
+ m_LuxAtDistance: 1
+ m_EnableSpotReflector: 1
+--- !u!4 &1414861614
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!114 &1414861615
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UsePipelineSettings: 1
+ m_AdditionalLightsShadowResolutionTier: 2
+ m_CustomShadowLayers: 0
+ m_LightCookieSize: {x: 1, y: 1}
+ m_LightCookieOffset: {x: 0, y: 0}
+ m_SoftShadowQuality: 0
+ m_RenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_ShadowRenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_Version: 4
+ m_LightLayerMask: 1
+ m_ShadowLayerMask: 1
+ m_RenderingLayers: 1
+ m_ShadowRenderingLayers: 1
+--- !u!1 &2136621999
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2136622002}
+ - component: {fileID: 2136622001}
+ - component: {fileID: 2136622000}
+ - component: {fileID: 2136622003}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &2136622000
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+--- !u!20 &2136622001
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &2136622002
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.42261827, y: 0, z: 0, w: 0.9063079}
+ m_LocalPosition: {x: 0, y: 40, z: -50}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 50, y: 0, z: 0}
+--- !u!114 &2136622003
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData
+ m_RenderShadows: 1
+ m_RequiresDepthTextureOption: 2
+ m_RequiresOpaqueTextureOption: 2
+ m_CameraType: 0
+ m_Cameras: []
+ m_RendererIndex: -1
+ m_VolumeLayerMask:
+ serializedVersion: 2
+ m_Bits: 1
+ m_VolumeTrigger: {fileID: 0}
+ m_VolumeFrameworkUpdateModeOption: 2
+ m_RenderPostProcessing: 0
+ m_Antialiasing: 0
+ m_AntialiasingQuality: 2
+ m_StopNaN: 0
+ m_Dithering: 0
+ m_ClearDepth: 1
+ m_AllowXRRendering: 1
+ m_AllowHDROutput: 1
+ m_UseScreenCoordOverride: 0
+ m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
+ m_RequiresDepthTexture: 0
+ m_RequiresColorTexture: 0
+ m_TaaSettings:
+ m_Quality: 3
+ m_FrameInfluence: 0.1
+ m_JitterScale: 1
+ m_MipBias: 0
+ m_VarianceClampScale: 0.9
+ m_ContrastAdaptiveSharpening: 0
+ m_Version: 2
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 2136622002}
+ - {fileID: 1414861614}
+ - {fileID: 1331954415}
+ - {fileID: 1097328752}
+ - {fileID: 1192809694}
diff --git a/Assets/Sample/UIToolkit/UTKAccordionListWindow.unity.meta b/Assets/Sample/UIToolkit/UTKAccordionListWindow.unity.meta
new file mode 100644
index 00000000..ca783edf
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKAccordionListWindow.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: bf5d00e032696c74380a9b1d6707c107
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sample/UIToolkit/UTKAccordionListWindowSample.cs b/Assets/Sample/UIToolkit/UTKAccordionListWindowSample.cs
new file mode 100644
index 00000000..5f407947
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKAccordionListWindowSample.cs
@@ -0,0 +1,763 @@
+#nullable enable
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UIElements;
+using UVC.UIToolkit;
+
+///
+/// UTKAccordionListWindow의 기능을 테스트하기 위한 샘플 MonoBehaviour입니다.
+/// 아코디언 리스트 데이터를 생성하고 다양한 이벤트 핸들러를 등록하여 동작을 확인합니다.
+///
+/// 테스트 기능:
+///
+/// - 섹션 펼침/접힘
+/// - 수평 레이아웃 (Head-Content-Tail)
+/// - 그리드 레이아웃 (Image + Caption)
+/// - 검색 필터링
+/// - 드래그 앤 드롭 이벤트
+///
+///
+public class UTKAccordionListWindowSample : MonoBehaviour
+{
+ #region 필드 (Fields)
+
+ [SerializeField]
+ [Tooltip("UI를 표시할 UIDocument 컴포넌트")]
+ public UIDocument? uiDocument;
+
+
+ [SerializeField]
+ [Tooltip("드래그 시 고스트 이미지 표시 여부")]
+ private bool showDragGhost = true;
+
+ [SerializeField]
+ [Tooltip("시작 시 적용할 테마")]
+ private UTKTheme initialTheme = UTKTheme.Dark;
+
+ private UTKToggle _themeToggle;
+
+ /// UTKAccordionListWindow 인스턴스
+ private UTKAccordionListWindow _accordionWindow;
+
+ /// 드롭 위치 (스크린 좌표)
+ private Vector2 _lastDropScreenPosition;
+
+ /// 메인 카메라 참조
+ private Camera? _mainCamera;
+
+ /// 드래그 중인 3D 프리뷰 오브젝트
+ private GameObject? _dragPreview3D;
+
+ /// 드래그 중 리스트 영역 밖에 있는지 여부
+ private bool _isOutsideListArea;
+
+
+
+ #endregion
+
+ #region Unity 라이프사이클
+
+ private void Start()
+ {
+ // UIDocument 참조 확인
+ var doc = GetComponent();
+ if (doc == null)
+ {
+ Debug.LogError("UIDocument가 할당되지 않았습니다.");
+ return;
+ }
+ uiDocument = doc;
+
+ var toggle = uiDocument.rootVisualElement.Q("toggle");
+ if (toggle == null)
+ {
+ Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
+ return;
+ }
+ _themeToggle = toggle;
+
+ var window = uiDocument.rootVisualElement.Q("window");
+ if (window == null)
+ {
+ Debug.LogError("UXML에서 UTKAccordionListWindow를 찾을 수 없습니다.");
+ return;
+ }
+ _accordionWindow = window;
+
+ UTKThemeManager.Instance.RegisterRoot(uiDocument.rootVisualElement);
+ UTKThemeManager.Instance.SetTheme(initialTheme);
+
+ _themeToggle.OnValueChanged += (isOn) =>
+ {
+ UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
+ };
+
+ // UTKAccordionListWindow 인스턴스 생성 및 추가
+ _accordionWindow.ShowDragGhost = showDragGhost;
+ _accordionWindow.Title = "ACCORDION";
+ _accordionWindow.ShowCloseButton = true;
+
+ // 테스트 데이터 생성
+ CreateTestData();
+
+ // 이벤트 핸들러 등록
+ RegisterEventHandlers();
+
+ Debug.Log("[UTKAccordionListWindowSample] 초기화 완료");
+ }
+
+ private void OnDestroy()
+ {
+ // 3D 프리뷰 정리
+ Destroy3DPreview();
+
+ // 리소스 정리
+ _accordionWindow?.Dispose();
+ _accordionWindow = null;
+ }
+
+ #endregion
+
+ #region 테스트 데이터 생성
+
+ ///
+ /// 테스트용 아코디언 데이터를 생성합니다.
+ /// AccordionSample과 동일한 구조로 데이터를 생성합니다.
+ ///
+ private void CreateTestData()
+ {
+ if (_accordionWindow == null) return;
+
+ var data = new UTKAccordionData();
+
+ // ========================================
+ // 수평 레이아웃 섹션 1: Settings
+ // ========================================
+ var settingsSection = new UTKAccordionSectionData
+ {
+ Title = "Settings",
+ IsExpanded = true,
+ LayoutType = UTKAccordionLayoutType.Horizontal,
+ HorizontalItems = new List
+ {
+ new UTKAccordionHorizontalItemData
+ {
+ Head = UTKAccordionContentSpec.FromImage("Prefabs/UI/images/icon_side_tab_library_24"),
+ Content = UTKAccordionContentSpec.FromText("Graphics", "open_graphics"),
+ Tail = new List
+ {
+ UTKAccordionContentSpec.FromIconButton(UTKMaterialIcons.Refresh, 12, "refresh_graphics", "새로고침"),
+ UTKAccordionContentSpec.FromIconButton(UTKMaterialIcons.Settings, 12, "setting_graphics", "설정"),
+ }
+ },
+ new UTKAccordionHorizontalItemData
+ {
+ Head = UTKAccordionContentSpec.FromImage("Prefabs/UI/images/icon_side_tab_fleet_128"),
+ Content = UTKAccordionContentSpec.FromText("Audio", "open_audio"),
+ Tail = new List
+ {
+ UTKAccordionContentSpec.FromIconButton(UTKMaterialIcons.Refresh, 12, "refresh_audio", "새로고침"),
+ UTKAccordionContentSpec.FromIconButton(UTKMaterialIcons.Settings, 12, "setting_audio", "설정"),
+ }
+ },
+ new UTKAccordionHorizontalItemData
+ {
+ Head = UTKAccordionContentSpec.FromImage("Prefabs/UI/images/icon_side_tab_explorer_24"),
+ Content = UTKAccordionContentSpec.FromText("Network", "open_network"),
+ Tail = new List
+ {
+ UTKAccordionContentSpec.FromIconButton(UTKMaterialIcons.Refresh, 12, "refresh_network", "새로고침"),
+ }
+ }
+ }
+ };
+ data.Sections.Add(settingsSection);
+
+ // ========================================
+ // 수평 레이아웃 섹션 2: Components
+ // ========================================
+ var componentsSection = new UTKAccordionSectionData
+ {
+ Title = "Components",
+ IsExpanded = false,
+ LayoutType = UTKAccordionLayoutType.Horizontal,
+ HorizontalItems = new List
+ {
+ new UTKAccordionHorizontalItemData
+ {
+ Content = UTKAccordionContentSpec.FromText("Transform", "open_transform"),
+ },
+ new UTKAccordionHorizontalItemData
+ {
+ Content = UTKAccordionContentSpec.FromText("Rigidbody", "open_rigidbody"),
+ },
+ new UTKAccordionHorizontalItemData
+ {
+ Content = UTKAccordionContentSpec.FromText("Collider", "open_collider"),
+ }
+ }
+ };
+ data.Sections.Add(componentsSection);
+
+ // ========================================
+ // 그리드 레이아웃 섹션 1: Vehicles
+ // ========================================
+ var vehiclesSection = new UTKAccordionSectionData
+ {
+ Title = "Vehicles",
+ IsExpanded = true,
+ LayoutType = UTKAccordionLayoutType.Grid,
+ GridItems = new List
+ {
+ new UTKAccordionGridItemData
+ {
+ Caption = "Forklift",
+ ImagePath = "Simulator/Images/lib_forklift_400x300",
+ PrefabPath = "Simulator/FreeForkLift/Prefabs/Forklift",
+ Tag = "vehicle"
+ },
+ new UTKAccordionGridItemData
+ {
+ Caption = "Truck",
+ ImagePath = "Simulator/Images/lib_forklift_400x300",
+ PrefabPath = "Simulator/FreeForkLift/Prefabs/Forklift",
+ Tag = "vehicle"
+ }
+ }
+ };
+ data.Sections.Add(vehiclesSection);
+
+ // ========================================
+ // 그리드 레이아웃 섹션 2: Objects
+ // ========================================
+ var objectsSection = new UTKAccordionSectionData
+ {
+ Title = "Objects",
+ IsExpanded = true,
+ LayoutType = UTKAccordionLayoutType.Grid,
+ GridItems = new List
+ {
+ new UTKAccordionGridItemData
+ {
+ Caption = "Pallet",
+ ImagePath = "Simulator/Images/lib_pallet_400x300",
+ PrefabPath = "Simulator/FreeForkLift/Prefabs/PalletEmpty",
+ Tag = "object"
+ },
+ new UTKAccordionGridItemData
+ {
+ Caption = "Pallet (Full)",
+ ImagePath = "Simulator/Images/lib_pallet_400x300",
+ PrefabPath = "Simulator/FreeForkLift/Prefabs/PalletEmpty",
+ Tag = "object"
+ },
+ new UTKAccordionGridItemData
+ {
+ Caption = "Box",
+ ImagePath = "Simulator/Images/lib_pallet_400x300",
+ PrefabPath = "Simulator/FreeForkLift/Prefabs/PalletEmpty",
+ Tag = "object"
+ }
+ }
+ };
+ data.Sections.Add(objectsSection);
+
+ // ========================================
+ // 그리드 레이아웃 섹션 3: Characters
+ // ========================================
+ var charactersSection = new UTKAccordionSectionData
+ {
+ Title = "Characters",
+ IsExpanded = true,
+ LayoutType = UTKAccordionLayoutType.Grid,
+ GridItems = new List
+ {
+ new UTKAccordionGridItemData
+ {
+ Caption = "Worker",
+ ImagePath = "Simulator/Images/lib_worker_400x300",
+ PrefabPath = "Simulator/CharCrafter – Free Preset Characters Pack (Vol. 1)/Prefabs/Male Young Guy",
+ Tag = "character"
+ },
+ new UTKAccordionGridItemData
+ {
+ Caption = "Manager",
+ ImagePath = "Simulator/Images/lib_worker_400x300",
+ PrefabPath = "Simulator/CharCrafter – Free Preset Characters Pack (Vol. 1)/Prefabs/Male Young Guy",
+ Tag = "character"
+ }
+ }
+ };
+ data.Sections.Add(charactersSection);
+
+ // 데이터 설정
+ _accordionWindow.SetData(data);
+
+ Debug.Log($"[UTKAccordionListWindowSample] 테스트 데이터 생성 완료: {data.Sections.Count}개 섹션");
+ }
+
+ #endregion
+
+ #region 이벤트 핸들러 등록
+
+ ///
+ /// UTKAccordionListWindow의 이벤트 핸들러들을 등록합니다.
+ ///
+ private void RegisterEventHandlers()
+ {
+ if (_accordionWindow == null) return;
+
+ // ========================================
+ // 수평 아이템 이벤트
+ // ========================================
+
+ // 수평 아이템 클릭 이벤트
+ _accordionWindow.OnHorizontalItemClick += (item, contentSpec) =>
+ {
+ var text = contentSpec?.Text ?? item.Content?.Text ?? "Unknown";
+ var actionId = contentSpec?.ActionId ?? "none";
+ Debug.Log($"[수평 아이템 클릭] {text} (ActionId: {actionId})");
+
+ // ActionId에 따라 분기 처리
+ HandleHorizontalItemAction(actionId);
+ };
+
+ // 수평 아이템 아이콘 버튼 클릭 이벤트
+ _accordionWindow.OnHorizontalItemIconClick += (item, iconSpec) =>
+ {
+ var actionId = iconSpec.ActionId ?? "none";
+ var itemText = item.Content?.Text ?? "Unknown";
+ Debug.Log($"[아이콘 버튼 클릭] {itemText} - {actionId}");
+
+ HandleHorizontalItemAction(actionId);
+ };
+
+ // ========================================
+ // 그리드 아이템 이벤트
+ // ========================================
+
+ // 그리드 아이템 클릭 이벤트
+ _accordionWindow.OnGridItemClick += (item) =>
+ {
+ Debug.Log($"[그리드 아이템 클릭] {item.Caption} (Tag: {item.Tag})");
+ };
+
+ // 드래그 시작 이벤트
+ _accordionWindow.OnGridItemBeginDrag += (item, position) =>
+ {
+ Debug.Log($"[드래그 시작] {item.Caption} at {position}");
+ };
+
+ // 드래그 중 이벤트
+ _accordionWindow.OnGridItemDrag += (item, position) =>
+ {
+ // 3D 프리뷰가 있으면 위치 업데이트
+ if (_dragPreview3D != null)
+ {
+ Update3DPreviewPosition(position);
+ }
+ };
+
+ // 드래그 종료 이벤트
+ _accordionWindow.OnGridItemEndDrag += (item, position) =>
+ {
+ Debug.Log($"[드래그 종료] {item.Caption} at {position}");
+ _lastDropScreenPosition = position;
+ // 드롭 이벤트에서 처리하므로 여기서는 프리뷰를 제거하지 않음
+ };
+
+ // 리스트 영역 이탈 이벤트 (3D 프리팹 미리보기 표시)
+ _accordionWindow.OnDragExitList += (item, position) =>
+ {
+ Debug.Log($"[리스트 영역 이탈] {item.Caption} - 3D 프리뷰 생성");
+ _isOutsideListArea = true;
+ Create3DPreview(item, position);
+ };
+
+ // 리스트 영역 진입 이벤트 (3D 프리팹 미리보기 숨김)
+ _accordionWindow.OnDragEnterList += (item, position) =>
+ {
+ Debug.Log($"[리스트 영역 진입] {item.Caption} - 3D 프리뷰 제거");
+ _isOutsideListArea = false;
+ Destroy3DPreview();
+ };
+
+ // 그리드 아이템 드롭 이벤트
+ _accordionWindow.OnGridItemDrop += (item) =>
+ {
+ Debug.Log($"[드롭] {item.Caption} - PrefabPath: {item.PrefabPath}, Outside: {_isOutsideListArea}");
+
+ // 리스트 영역 밖에서 드롭한 경우에만 프리팹 생성
+ if (!_isOutsideListArea)
+ {
+ Debug.Log("[UTKAccordionListWindowSample] 리스트 영역 내부에서 드롭 - 프리팹 생성 안함");
+ _isOutsideListArea = false;
+ return;
+ }
+
+ if (string.IsNullOrEmpty(item.PrefabPath))
+ {
+ Debug.LogWarning("[UTKAccordionListWindowSample] PrefabPath가 설정되지 않았습니다.");
+ Destroy3DPreview();
+ _isOutsideListArea = false;
+ return;
+ }
+
+ // 프리팹 로드
+ var prefab = Resources.Load(item.PrefabPath);
+ if (prefab == null)
+ {
+ Debug.LogWarning($"[UTKAccordionListWindowSample] 프리팹을 찾을 수 없습니다: {item.PrefabPath}");
+ Destroy3DPreview();
+ _isOutsideListArea = false;
+ return;
+ }
+
+ // 월드 좌표 계산
+ Vector3 worldPosition = ScreenToWorldPosition(_lastDropScreenPosition);
+
+ // 프리팹 인스턴스화
+ var instance = Instantiate(prefab, worldPosition, Quaternion.identity);
+ Debug.Log($"[UTKAccordionListWindowSample] 프리팹 생성됨: {instance.name} at {worldPosition}");
+
+ // 3D 프리뷰 정리 및 상태 초기화
+ Destroy3DPreview();
+ _isOutsideListArea = false;
+ };
+
+ // ========================================
+ // 섹션 이벤트
+ // ========================================
+
+ // 섹션 펼침/접힘 이벤트
+ _accordionWindow.OnSectionToggled += (section, isExpanded) =>
+ {
+ Debug.Log($"[섹션 토글] {section.Title} - {(isExpanded ? "펼침" : "접힘")}");
+ };
+
+ // ========================================
+ // 윈도우 이벤트
+ // ========================================
+
+ // 윈도우 닫기 이벤트
+ _accordionWindow.OnClosed += () =>
+ {
+ Debug.Log("[윈도우 닫힘]");
+ };
+
+ Debug.Log("[UTKAccordionListWindowSample] 이벤트 핸들러 등록 완료");
+ }
+
+ ///
+ /// 수평 아이템의 ActionId에 따라 동작을 처리합니다.
+ ///
+ private void HandleHorizontalItemAction(string? actionId)
+ {
+ switch (actionId)
+ {
+ case "open_graphics":
+ Debug.Log(" → Graphics 설정 열기");
+ break;
+ case "refresh_graphics":
+ Debug.Log(" → Graphics 새로고침");
+ break;
+ case "setting_graphics":
+ Debug.Log(" → Graphics 상세 설정");
+ break;
+ case "open_audio":
+ Debug.Log(" → Audio 설정 열기");
+ break;
+ case "refresh_audio":
+ Debug.Log(" → Audio 새로고침");
+ break;
+ case "setting_audio":
+ Debug.Log(" → Audio 상세 설정");
+ break;
+ case "open_network":
+ Debug.Log(" → Network 설정 열기");
+ break;
+ case "refresh_network":
+ Debug.Log(" → Network 새로고침");
+ break;
+ case "open_transform":
+ Debug.Log(" → Transform 컴포넌트 열기");
+ break;
+ case "open_rigidbody":
+ Debug.Log(" → Rigidbody 컴포넌트 열기");
+ break;
+ case "open_collider":
+ Debug.Log(" → Collider 컴포넌트 열기");
+ break;
+ default:
+ Debug.Log($" → 알 수 없는 액션: {actionId}");
+ break;
+ }
+ }
+
+ #endregion
+
+ #region 좌표 변환 (Coordinate Conversion)
+
+ ///
+ /// UI Toolkit 좌표를 Unity Screen 좌표로 변환합니다.
+ ///
+ private Vector2 UIToolkitToScreenPosition(Vector2 uiToolkitPosition)
+ {
+ return new Vector2(uiToolkitPosition.x, Screen.height - uiToolkitPosition.y);
+ }
+
+ ///
+ /// 스크린 좌표를 월드 좌표로 변환합니다.
+ ///
+ private Vector3 ScreenToWorldPosition(Vector2 uiToolkitPosition)
+ {
+ _mainCamera ??= Camera.main;
+ if (_mainCamera == null)
+ {
+ Debug.LogWarning("[UTKAccordionListWindowSample] 메인 카메라를 찾을 수 없습니다.");
+ return Vector3.zero;
+ }
+
+ Vector2 screenPosition = UIToolkitToScreenPosition(uiToolkitPosition);
+ Ray ray = _mainCamera.ScreenPointToRay(screenPosition);
+
+ // 바닥면(Y=0)과의 교차점 계산
+ Plane groundPlane = new Plane(Vector3.up, Vector3.zero);
+ if (groundPlane.Raycast(ray, out float distance))
+ {
+ return ray.GetPoint(distance);
+ }
+
+ // 물리 레이캐스트
+ if (Physics.Raycast(ray, out RaycastHit hit, 100f))
+ {
+ return hit.point;
+ }
+
+ return ray.GetPoint(10f);
+ }
+
+ #endregion
+
+ #region 3D 프리뷰 (3D Preview)
+
+ ///
+ /// 드래그 중 3D 프리뷰 오브젝트를 생성합니다.
+ ///
+ private void Create3DPreview(UTKAccordionGridItemData item, Vector2 screenPosition)
+ {
+ Destroy3DPreview();
+
+ if (string.IsNullOrEmpty(item.PrefabPath)) return;
+
+ var prefab = Resources.Load(item.PrefabPath);
+ if (prefab == null)
+ {
+ Debug.LogWarning($"[UTKAccordionListWindowSample] 프리팹을 찾을 수 없습니다: {item.PrefabPath}");
+ return;
+ }
+
+ Vector3 worldPosition = ScreenToWorldPosition(screenPosition);
+ _dragPreview3D = Instantiate(prefab, worldPosition, Quaternion.identity);
+ _dragPreview3D.name = $"DragPreview_{item.Caption}";
+
+ SetPreviewTransparency(_dragPreview3D, 0.6f);
+ DisableColliders(_dragPreview3D);
+
+ Debug.Log($"[UTKAccordionListWindowSample] 3D 프리뷰 생성됨: {_dragPreview3D.name} at {worldPosition}");
+ }
+
+ ///
+ /// 3D 프리뷰 오브젝트를 제거합니다.
+ ///
+ private void Destroy3DPreview()
+ {
+ if (_dragPreview3D != null)
+ {
+ Destroy(_dragPreview3D);
+ _dragPreview3D = null;
+ }
+ }
+
+ ///
+ /// 3D 프리뷰 오브젝트의 위치를 업데이트합니다.
+ ///
+ private void Update3DPreviewPosition(Vector2 screenPosition)
+ {
+ if (_dragPreview3D == null) return;
+ _dragPreview3D.transform.position = ScreenToWorldPosition(screenPosition);
+ }
+
+ ///
+ /// 오브젝트의 모든 렌더러를 반투명하게 설정합니다.
+ ///
+ private void SetPreviewTransparency(GameObject obj, float alpha)
+ {
+ var renderers = obj.GetComponentsInChildren();
+ foreach (var renderer in renderers)
+ {
+ foreach (var material in renderer.materials)
+ {
+ if (material.HasProperty("_Color"))
+ {
+ var color = material.color;
+ color.a = alpha;
+ material.color = color;
+
+ material.SetFloat("_Mode", 3);
+ material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
+ material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
+ material.SetInt("_ZWrite", 0);
+ material.DisableKeyword("_ALPHATEST_ON");
+ material.EnableKeyword("_ALPHABLEND_ON");
+ material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
+ material.renderQueue = 3000;
+ }
+ }
+ }
+ }
+
+ ///
+ /// 오브젝트의 모든 콜라이더를 비활성화합니다.
+ ///
+ private void DisableColliders(GameObject obj)
+ {
+ var colliders = obj.GetComponentsInChildren();
+ foreach (var collider in colliders)
+ {
+ collider.enabled = false;
+ }
+ }
+
+ #endregion
+
+ #region 에디터 테스트용 메서드
+
+ ///
+ /// 모든 섹션을 펼칩니다.
+ ///
+ [ContextMenu("Expand All Sections")]
+ public void ExpandAllSections()
+ {
+ _accordionWindow?.ExpandAll();
+ Debug.Log("[UTKAccordionListWindowSample] 모든 섹션 펼침");
+ }
+
+ ///
+ /// 모든 섹션을 접습니다.
+ ///
+ [ContextMenu("Collapse All Sections")]
+ public void CollapseAllSections()
+ {
+ _accordionWindow?.CollapseAll();
+ Debug.Log("[UTKAccordionListWindowSample] 모든 섹션 접힘");
+ }
+
+ ///
+ /// 검색을 테스트합니다.
+ ///
+ [ContextMenu("Test Search (Pallet)")]
+ public void TestSearch()
+ {
+ _accordionWindow?.Search("Pallet");
+ Debug.Log("[UTKAccordionListWindowSample] 검색 테스트: 'Pallet'");
+ }
+
+ ///
+ /// 검색을 초기화합니다.
+ ///
+ [ContextMenu("Clear Search")]
+ public void ClearSearchTest()
+ {
+ _accordionWindow?.ClearSearch();
+ Debug.Log("[UTKAccordionListWindowSample] 검색 초기화");
+ }
+
+ ///
+ /// 모든 데이터를 제거합니다.
+ ///
+ [ContextMenu("Clear All Data")]
+ public void ClearAllData()
+ {
+ _accordionWindow?.Clear();
+ Debug.Log("[UTKAccordionListWindowSample] 모든 데이터 제거됨");
+ }
+
+ ///
+ /// 윈도우를 다시 표시합니다.
+ ///
+ [ContextMenu("Show Window")]
+ public void ShowWindow()
+ {
+ _accordionWindow?.Show();
+ }
+
+ ///
+ /// 데이터를 다시 로드합니다.
+ ///
+ [ContextMenu("Reload Data")]
+ public void ReloadData()
+ {
+ CreateTestData();
+ Debug.Log("[UTKAccordionListWindowSample] 데이터 다시 로드됨");
+ }
+
+ ///
+ /// 새로운 통합 API(UTKAccordionItemData)를 사용하여 데이터를 생성합니다.
+ /// TreeView 기반 구현에 최적화된 데이터 구조입니다.
+ ///
+ [ContextMenu("Load Data (New API)")]
+ public void LoadDataWithNewAPI()
+ {
+ if (_accordionWindow == null) return;
+
+ var roots = new List();
+
+ // ========================================
+ // 섹션 1: Settings (수평 레이아웃)
+ // ========================================
+ var settingsSection = UTKAccordionItemData.CreateSection("Settings", isExpanded: true);
+ settingsSection
+ .AddHorizontalItem(
+ head: UTKAccordionContentSpec.FromImage("Prefabs/UI/images/icon_side_tab_library_128"),
+ content: UTKAccordionContentSpec.FromText("Graphics", "open_graphics"),
+ tail: new List
+ {
+ UTKAccordionContentSpec.FromIconButton(UTKMaterialIcons.Refresh, 12, "refresh_graphics", "새로고침"),
+ UTKAccordionContentSpec.FromIconButton(UTKMaterialIcons.Settings, 12, "setting_graphics", "설정"),
+ })
+ .AddHorizontalItem(
+ head: UTKAccordionContentSpec.FromImage("Prefabs/UI/images/icon_side_tab_fleet_128"),
+ content: UTKAccordionContentSpec.FromText("Audio", "open_audio"),
+ tail: new List
+ {
+ UTKAccordionContentSpec.FromIconButton(UTKMaterialIcons.Refresh, 12, "refresh_audio", "새로고침"),
+ });
+ roots.Add(settingsSection);
+
+ // ========================================
+ // 섹션 2: Vehicles (그리드 레이아웃)
+ // ========================================
+ var vehiclesSection = UTKAccordionItemData.CreateSection("Vehicles", isExpanded: true);
+ vehiclesSection
+ .AddGridItem("Forklift", "Simulator/Images/lib_forklift_400x300", "Simulator/FreeForkLift/Prefabs/Forklift", "vehicle")
+ .AddGridItem("Truck", "Simulator/Images/lib_forklift_400x300", "Simulator/FreeForkLift/Prefabs/Forklift", "vehicle");
+ roots.Add(vehiclesSection);
+
+ // ========================================
+ // 섹션 3: Objects (그리드 레이아웃)
+ // ========================================
+ var objectsSection = UTKAccordionItemData.CreateSection("Objects", isExpanded: true);
+ objectsSection
+ .AddGridItem("Pallet", "Simulator/Images/lib_pallet_400x300", "Simulator/FreeForkLift/Prefabs/PalletEmpty", "object")
+ .AddGridItem("Box", "Simulator/Images/lib_pallet_400x300", "Simulator/FreeForkLift/Prefabs/PalletEmpty", "object");
+ roots.Add(objectsSection);
+
+ // 새로운 통합 API로 데이터 설정
+ _accordionWindow.SetData(roots);
+
+ Debug.Log($"[UTKAccordionListWindowSample] 새 API로 데이터 생성 완료: {roots.Count}개 섹션");
+ }
+
+ #endregion
+}
diff --git a/Assets/Sample/UIToolkit/UTKAccordionListWindowSample.cs.meta b/Assets/Sample/UIToolkit/UTKAccordionListWindowSample.cs.meta
new file mode 100644
index 00000000..264627c3
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKAccordionListWindowSample.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 60b90a105d06c2e41bc9b235a2626f03
\ No newline at end of file
diff --git a/Assets/Sample/UIToolkit/UTKAccordionListWindowUXML.uxml b/Assets/Sample/UIToolkit/UTKAccordionListWindowUXML.uxml
new file mode 100644
index 00000000..33dc12cf
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKAccordionListWindowUXML.uxml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Assets/Sample/UIToolkit/UTKAccordionListWindowUXML.uxml.meta b/Assets/Sample/UIToolkit/UTKAccordionListWindowUXML.uxml.meta
new file mode 100644
index 00000000..e88b19ed
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKAccordionListWindowUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 3cdfb535a2976ab48975316e1f7196d9
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Sample/UIToolkit/UTKColorPicker.unity b/Assets/Sample/UIToolkit/UTKColorPicker.unity
new file mode 100644
index 00000000..f730ff29
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKColorPicker.unity
@@ -0,0 +1,497 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 10
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 13
+ m_BakeOnSceneLoad: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 512
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 256
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 1
+ m_PVRDenoiserTypeDirect: 1
+ m_PVRDenoiserTypeIndirect: 1
+ m_PVRDenoiserTypeAO: 1
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 1
+ m_PVRFilteringGaussRadiusAO: 1
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 3
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ buildHeightMesh: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &1097328750
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1097328752}
+ - component: {fileID: 1097328754}
+ - component: {fileID: 1097328755}
+ m_Layer: 0
+ m_Name: Sample
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1097328752
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1097328754
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
+ m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
+ m_ParentUI: {fileID: 0}
+ sourceAsset: {fileID: 9197481963319205126, guid: 16e3bccfa967f4249856b24387b10b0a, type: 3}
+ m_SortingOrder: 1
+ m_Position: 0
+ m_WorldSpaceSizeMode: 1
+ m_WorldSpaceWidth: 1920
+ m_WorldSpaceHeight: 1080
+ m_PivotReferenceSize: 0
+ m_Pivot: 0
+ m_WorldSpaceCollider: {fileID: 0}
+--- !u!114 &1097328755
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 1478cf56a7578d548a6309b6d8882dff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::UTKColorPickerSample
+ _uiDocument: {fileID: 1097328754}
+ initialTheme: 0
+--- !u!1 &1331954412
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1331954415}
+ - component: {fileID: 1331954414}
+ - component: {fileID: 1331954413}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1331954413
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SendPointerHoverToParent: 1
+ m_MoveRepeatDelay: 0.5
+ m_MoveRepeatRate: 0.1
+ m_XRTrackingOrigin: {fileID: 0}
+ m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_DeselectOnBackgroundClick: 0
+ m_PointerBehavior: 0
+ m_CursorLockBehavior: 0
+ m_ScrollDeltaPerTick: 6
+--- !u!114 &1331954414
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!4 &1331954415
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1414861612
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1414861614}
+ - component: {fileID: 1414861613}
+ - component: {fileID: 1414861615}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &1414861613
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ serializedVersion: 11
+ m_Type: 1
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ForceVisible: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+ m_LightUnit: 1
+ m_LuxAtDistance: 1
+ m_EnableSpotReflector: 1
+--- !u!4 &1414861614
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!114 &1414861615
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UsePipelineSettings: 1
+ m_AdditionalLightsShadowResolutionTier: 2
+ m_CustomShadowLayers: 0
+ m_LightCookieSize: {x: 1, y: 1}
+ m_LightCookieOffset: {x: 0, y: 0}
+ m_SoftShadowQuality: 0
+ m_RenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_ShadowRenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_Version: 4
+ m_LightLayerMask: 1
+ m_ShadowLayerMask: 1
+ m_RenderingLayers: 1
+ m_ShadowRenderingLayers: 1
+--- !u!1 &2136621999
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2136622002}
+ - component: {fileID: 2136622001}
+ - component: {fileID: 2136622000}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &2136622000
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+--- !u!20 &2136622001
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &2136622002
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 1, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 2136622002}
+ - {fileID: 1414861614}
+ - {fileID: 1331954415}
+ - {fileID: 1097328752}
diff --git a/Assets/Sample/UIToolkit/UTKColorPicker.unity.meta b/Assets/Sample/UIToolkit/UTKColorPicker.unity.meta
new file mode 100644
index 00000000..ce6cf3d3
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKColorPicker.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: fb8f6b3740576e7448dc983b4e06083a
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sample/UIToolkit/UTKColorPickerSample.cs b/Assets/Sample/UIToolkit/UTKColorPickerSample.cs
new file mode 100644
index 00000000..a0c0cd22
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKColorPickerSample.cs
@@ -0,0 +1,395 @@
+#nullable enable
+using System;
+using Cysharp.Threading.Tasks;
+using UnityEngine;
+using UnityEngine.UIElements;
+using UVC.UIToolkit;
+
+namespace UVC.Sample.UIToolkit
+{
+ ///
+ /// UTKColorPicker 샘플 코드
+ /// 버튼 클릭으로 컬러 피커를 열고 선택된 색상을 미리보기에 표시
+ ///
+ public class UTKColorPickerSample : MonoBehaviour
+ {
+ [SerializeField] private UIDocument? _uiDocument;
+
+ [SerializeField]
+ [Tooltip("시작 시 적용할 테마")]
+ private UTKTheme initialTheme = UTKTheme.Dark;
+
+ private UTKToggle _themeToggle;
+
+ private VisualElement? _root;
+ private VisualElement? _colorPreview;
+ private Label? _colorLabel;
+ private Toggle? _useAlphaToggle;
+
+ private Color _currentColor = Color.blue;
+ private UTKColorPicker? _currentPicker;
+
+ private void Start()
+ {
+ // UIDocument 참조 확인
+ var doc = GetComponent();
+ if (doc == null)
+ {
+ Debug.LogError("UIDocument가 할당되지 않았습니다.");
+ return;
+ }
+ _uiDocument = doc;
+
+ var toggle = _uiDocument.rootVisualElement.Q("toggle");
+ if (toggle == null)
+ {
+ Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
+ return;
+ }
+ _themeToggle = toggle;
+
+ UTKThemeManager.Instance.RegisterRoot(_uiDocument.rootVisualElement);
+ UTKThemeManager.Instance.SetTheme(initialTheme);
+
+ _themeToggle.OnValueChanged += (isOn) =>
+ {
+ UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
+ };
+
+ _root = _uiDocument.rootVisualElement;
+ UTKColorPicker.SetRoot(_root);
+ CreateSampleUI();
+ }
+
+ private void CreateSampleUI()
+ {
+ if (_root == null) return;
+
+ // 메인 컨테이너
+ var container = new VisualElement();
+ container.style.position = Position.Absolute;
+ container.style.left = 20;
+ container.style.top = 20;
+ container.style.backgroundColor = new Color(0.2f, 0.2f, 0.2f);
+ container.style.borderTopLeftRadius = 8;
+ container.style.borderTopRightRadius = 8;
+ container.style.borderBottomLeftRadius = 8;
+ container.style.borderBottomRightRadius = 8;
+ container.style.paddingTop = 15;
+ container.style.paddingBottom = 15;
+ container.style.paddingLeft = 15;
+ container.style.paddingRight = 15;
+ container.style.width = 280;
+
+ // 타이틀
+ var title = new Label("UTKColorPicker Sample");
+ title.style.fontSize = 16;
+ title.style.unityFontStyleAndWeight = FontStyle.Bold;
+ title.style.color = Color.white;
+ title.style.marginBottom = 15;
+ container.Add(title);
+
+ // 색상 미리보기 영역
+ var previewRow = new VisualElement();
+ previewRow.style.flexDirection = FlexDirection.Row;
+ previewRow.style.alignItems = Align.Center;
+ previewRow.style.marginBottom = 15;
+
+ var previewLabel = new Label("Current Color:");
+ previewLabel.style.color = Color.white;
+ previewLabel.style.width = 100;
+ previewRow.Add(previewLabel);
+
+ _colorPreview = new VisualElement();
+ _colorPreview.style.width = 60;
+ _colorPreview.style.height = 30;
+ _colorPreview.style.backgroundColor = _currentColor;
+ _colorPreview.style.borderTopLeftRadius = 4;
+ _colorPreview.style.borderTopRightRadius = 4;
+ _colorPreview.style.borderBottomLeftRadius = 4;
+ _colorPreview.style.borderBottomRightRadius = 4;
+ _colorPreview.style.borderTopWidth = 1;
+ _colorPreview.style.borderBottomWidth = 1;
+ _colorPreview.style.borderLeftWidth = 1;
+ _colorPreview.style.borderRightWidth = 1;
+ _colorPreview.style.borderTopColor = new Color(0.4f, 0.4f, 0.4f);
+ _colorPreview.style.borderBottomColor = new Color(0.4f, 0.4f, 0.4f);
+ _colorPreview.style.borderLeftColor = new Color(0.4f, 0.4f, 0.4f);
+ _colorPreview.style.borderRightColor = new Color(0.4f, 0.4f, 0.4f);
+ previewRow.Add(_colorPreview);
+
+ _colorLabel = new Label(ColorToHex(_currentColor));
+ _colorLabel.style.color = new Color(0.7f, 0.7f, 0.7f);
+ _colorLabel.style.marginLeft = 10;
+ previewRow.Add(_colorLabel);
+
+ container.Add(previewRow);
+
+ // Alpha 사용 토글
+ var alphaRow = new VisualElement();
+ alphaRow.style.flexDirection = FlexDirection.Row;
+ alphaRow.style.alignItems = Align.Center;
+ alphaRow.style.marginBottom = 15;
+
+ _useAlphaToggle = new Toggle("Use Alpha Channel");
+ _useAlphaToggle.value = true;
+ _useAlphaToggle.style.color = Color.white;
+ alphaRow.Add(_useAlphaToggle);
+
+ container.Add(alphaRow);
+
+ // 버튼
+ var openPickerBtn = new Button(OpenColorPicker) { text = "Open Color Picker" };
+ openPickerBtn.style.height = 32;
+ openPickerBtn.style.marginBottom = 10;
+ container.Add(openPickerBtn);
+
+ // Async 버튼
+ var openPickerAsyncBtn = new Button(() => OpenColorPickerAsync().Forget()) { text = "Open Color Picker (Async)" };
+ openPickerAsyncBtn.style.height = 32;
+ openPickerAsyncBtn.style.marginBottom = 10;
+ container.Add(openPickerAsyncBtn);
+
+ // Alpha 프리셋 버튼들
+ var alphaPresetLabel = new Label("Alpha Presets:");
+ alphaPresetLabel.style.color = Color.white;
+ alphaPresetLabel.style.marginTop = 10;
+ alphaPresetLabel.style.marginBottom = 5;
+ container.Add(alphaPresetLabel);
+
+ var alphaPresetRow = new VisualElement();
+ alphaPresetRow.style.flexDirection = FlexDirection.Row;
+ alphaPresetRow.style.marginBottom = 10;
+
+ // Alpha 값이 다른 프리셋 버튼들
+ float[] alphaValues = { 1.0f, 0.75f, 0.5f, 0.25f };
+ foreach (var alpha in alphaValues)
+ {
+ var alphaBtn = new Button(() => SetColorWithAlpha(alpha));
+ alphaBtn.style.width = 50;
+ alphaBtn.style.height = 28;
+ alphaBtn.style.marginRight = 5;
+ alphaBtn.style.backgroundColor = new Color(0.3f, 0.3f, 0.3f);
+ alphaBtn.style.borderTopLeftRadius = 4;
+ alphaBtn.style.borderTopRightRadius = 4;
+ alphaBtn.style.borderBottomLeftRadius = 4;
+ alphaBtn.style.borderBottomRightRadius = 4;
+ alphaBtn.text = $"{(int)(alpha * 100)}%";
+ alphaBtn.style.fontSize = 11;
+ alphaPresetRow.Add(alphaBtn);
+ }
+
+ container.Add(alphaPresetRow);
+
+ // Alpha 활성화/비활성화 직접 호출 버튼들
+ var alphaControlLabel = new Label("Alpha Control Examples:");
+ alphaControlLabel.style.color = Color.white;
+ alphaControlLabel.style.marginTop = 5;
+ alphaControlLabel.style.marginBottom = 5;
+ container.Add(alphaControlLabel);
+
+ var alphaControlRow = new VisualElement();
+ alphaControlRow.style.flexDirection = FlexDirection.Row;
+ alphaControlRow.style.marginBottom = 10;
+
+ var withAlphaBtn = new Button(OpenColorPickerWithAlpha) { text = "With Alpha" };
+ withAlphaBtn.style.height = 28;
+ withAlphaBtn.style.flexGrow = 1;
+ withAlphaBtn.style.marginRight = 5;
+ alphaControlRow.Add(withAlphaBtn);
+
+ var withoutAlphaBtn = new Button(OpenColorPickerWithoutAlpha) { text = "Without Alpha" };
+ withoutAlphaBtn.style.height = 28;
+ withoutAlphaBtn.style.flexGrow = 1;
+ alphaControlRow.Add(withoutAlphaBtn);
+
+ container.Add(alphaControlRow);
+
+ // 프리셋 색상 버튼들
+ var presetLabel = new Label("Preset Colors:");
+ presetLabel.style.color = Color.white;
+ presetLabel.style.marginTop = 10;
+ presetLabel.style.marginBottom = 5;
+ container.Add(presetLabel);
+
+ var presetRow = new VisualElement();
+ presetRow.style.flexDirection = FlexDirection.Row;
+ presetRow.style.flexWrap = Wrap.Wrap;
+
+ Color[] presets = { Color.red, Color.green, Color.blue, Color.yellow, Color.cyan, Color.magenta, Color.white, Color.black };
+ foreach (var color in presets)
+ {
+ var presetBtn = new Button(() => SetColor(color));
+ presetBtn.style.width = 28;
+ presetBtn.style.height = 28;
+ presetBtn.style.marginRight = 5;
+ presetBtn.style.marginBottom = 5;
+ presetBtn.style.backgroundColor = color;
+ presetBtn.style.borderTopLeftRadius = 4;
+ presetBtn.style.borderTopRightRadius = 4;
+ presetBtn.style.borderBottomLeftRadius = 4;
+ presetBtn.style.borderBottomRightRadius = 4;
+ presetBtn.text = "";
+ presetRow.Add(presetBtn);
+ }
+
+ container.Add(presetRow);
+
+ _root.Add(container);
+ }
+
+ private void OpenColorPicker()
+ {
+ if (_root == null || _currentPicker != null) return;
+
+ bool useAlpha = _useAlphaToggle?.value ?? false;
+
+ _currentPicker = UTKColorPicker.Show(_currentColor, "Select Color", useAlpha);
+
+ _currentPicker.OnColorChanged += OnColorChanged;
+ _currentPicker.OnColorSelected += OnColorSelected;
+ }
+
+ ///
+ /// Alpha 채널 활성화 상태로 컬러 피커 열기
+ ///
+ private void OpenColorPickerWithAlpha()
+ {
+ if (_root == null || _currentPicker != null) return;
+
+ // useAlpha = true로 명시적 호출
+ _currentPicker = UTKColorPicker.Show(_currentColor, "Select Color (Alpha ON)", useAlpha: true);
+
+ _currentPicker.OnColorChanged += OnColorChanged;
+ _currentPicker.OnColorSelected += OnColorSelected;
+
+ Debug.Log("[Sample] ColorPicker opened with Alpha channel enabled");
+ }
+
+ ///
+ /// Alpha 채널 비활성화 상태로 컬러 피커 열기
+ ///
+ private void OpenColorPickerWithoutAlpha()
+ {
+ if (_root == null || _currentPicker != null) return;
+
+ // useAlpha = false로 명시적 호출
+ _currentPicker = UTKColorPicker.Show(_currentColor, "Select Color (Alpha OFF)", useAlpha: false);
+
+ _currentPicker.OnColorChanged += OnColorChanged;
+ _currentPicker.OnColorSelected += OnColorSelected;
+
+ Debug.Log("[Sample] ColorPicker opened without Alpha channel");
+ }
+
+ ///
+ /// 현재 색상의 Alpha 값을 변경
+ ///
+ private void SetColorWithAlpha(float alpha)
+ {
+ _currentColor = new Color(_currentColor.r, _currentColor.g, _currentColor.b, alpha);
+
+ if (_colorPreview != null)
+ {
+ _colorPreview.style.backgroundColor = _currentColor;
+ }
+
+ if (_colorLabel != null)
+ {
+ _colorLabel.text = ColorToHex(_currentColor);
+ }
+
+ Debug.Log($"[Sample] Alpha set to {(int)(alpha * 100)}% - Color: {ColorToHex(_currentColor)}");
+ }
+
+ private async UniTaskVoid OpenColorPickerAsync()
+ {
+ if (_root == null) return;
+
+ bool useAlpha = _useAlphaToggle?.value ?? true;
+
+ // ShowAsync를 사용하여 색상 선택 대기
+ // OK 클릭 시 선택된 색상 반환, 취소/닫기 시 _currentColor 반환
+ Color selectedColor = await UTKColorPicker.ShowAsync(_currentColor, "Select Color (Async)", useAlpha);
+
+ // 결과 처리
+ _currentColor = selectedColor;
+ if (_colorPreview != null)
+ {
+ _colorPreview.style.backgroundColor = selectedColor;
+ }
+ if (_colorLabel != null)
+ {
+ _colorLabel.text = ColorToHex(selectedColor);
+ }
+
+ Debug.Log($"[Async] Color Result: {ColorToHex(selectedColor)}");
+ }
+
+ private void OnColorChanged(Color color)
+ {
+ // 실시간 미리보기 업데이트
+ if (_colorPreview != null)
+ {
+ _colorPreview.style.backgroundColor = color;
+ }
+
+ if (_colorLabel != null)
+ {
+ _colorLabel.text = ColorToHex(color);
+ }
+ }
+
+ private void OnColorSelected(Color color)
+ {
+ _currentColor = color;
+ Debug.Log($"Color Selected: {ColorToHex(color)}");
+
+ // 피커 참조 정리
+ if (_currentPicker != null)
+ {
+ _currentPicker.OnColorChanged -= OnColorChanged;
+ _currentPicker.OnColorSelected -= OnColorSelected;
+ _currentPicker = null;
+ }
+ }
+
+ private void SetColor(Color color)
+ {
+ _currentColor = color;
+
+ if (_colorPreview != null)
+ {
+ _colorPreview.style.backgroundColor = color;
+ }
+
+ if (_colorLabel != null)
+ {
+ _colorLabel.text = ColorToHex(color);
+ }
+
+ Debug.Log($"Preset Color Set: {ColorToHex(color)}");
+ }
+
+ private string ColorToHex(Color color)
+ {
+ bool useAlpha = _useAlphaToggle?.value ?? false;
+ if (useAlpha)
+ {
+ return "#" + ColorUtility.ToHtmlStringRGBA(color);
+ }
+ return "#" + ColorUtility.ToHtmlStringRGB(color);
+ }
+
+ private void OnDestroy()
+ {
+ if (_currentPicker != null)
+ {
+ _currentPicker.OnColorChanged -= OnColorChanged;
+ _currentPicker.OnColorSelected -= OnColorSelected;
+ _currentPicker.Dispose();
+ _currentPicker = null;
+ }
+ }
+ }
+}
diff --git a/Assets/Sample/UIToolkit/UTKColorPickerSample.cs.meta b/Assets/Sample/UIToolkit/UTKColorPickerSample.cs.meta
new file mode 100644
index 00000000..fcb26c7e
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKColorPickerSample.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 1478cf56a7578d548a6309b6d8882dff
diff --git a/Assets/Sample/UIToolkit/UTKColorPickerUXML.uxml b/Assets/Sample/UIToolkit/UTKColorPickerUXML.uxml
new file mode 100644
index 00000000..8688dc01
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKColorPickerUXML.uxml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/Assets/Sample/UIToolkit/UTKColorPickerUXML.uxml.meta b/Assets/Sample/UIToolkit/UTKColorPickerUXML.uxml.meta
new file mode 100644
index 00000000..55a0de49
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKColorPickerUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 16e3bccfa967f4249856b24387b10b0a
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Sample/UIToolkit/UTKComponentListWindow.unity b/Assets/Sample/UIToolkit/UTKComponentListWindow.unity
new file mode 100644
index 00000000..b408340f
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKComponentListWindow.unity
@@ -0,0 +1,497 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 10
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 13
+ m_BakeOnSceneLoad: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 512
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 256
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 1
+ m_PVRDenoiserTypeDirect: 1
+ m_PVRDenoiserTypeIndirect: 1
+ m_PVRDenoiserTypeAO: 1
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 1
+ m_PVRFilteringGaussRadiusAO: 1
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 3
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ buildHeightMesh: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &1097328750
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1097328752}
+ - component: {fileID: 1097328754}
+ - component: {fileID: 1097328755}
+ m_Layer: 0
+ m_Name: Sample
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1097328752
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1097328754
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
+ m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
+ m_ParentUI: {fileID: 0}
+ sourceAsset: {fileID: 9197481963319205126, guid: ac1b05d63bb20cd468b39a2802e42701, type: 3}
+ m_SortingOrder: 0
+ m_Position: 0
+ m_WorldSpaceSizeMode: 1
+ m_WorldSpaceWidth: 1920
+ m_WorldSpaceHeight: 1080
+ m_PivotReferenceSize: 0
+ m_Pivot: 0
+ m_WorldSpaceCollider: {fileID: 0}
+--- !u!114 &1097328755
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: ed200de1f3108b441b61f25085defa29, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::UTKComponentListWindowSample
+ uiDocument: {fileID: 1097328754}
+ initialTheme: 0
+--- !u!1 &1331954412
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1331954415}
+ - component: {fileID: 1331954414}
+ - component: {fileID: 1331954413}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1331954413
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SendPointerHoverToParent: 1
+ m_MoveRepeatDelay: 0.5
+ m_MoveRepeatRate: 0.1
+ m_XRTrackingOrigin: {fileID: 0}
+ m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_DeselectOnBackgroundClick: 0
+ m_PointerBehavior: 0
+ m_CursorLockBehavior: 0
+ m_ScrollDeltaPerTick: 6
+--- !u!114 &1331954414
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!4 &1331954415
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1414861612
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1414861614}
+ - component: {fileID: 1414861613}
+ - component: {fileID: 1414861615}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &1414861613
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ serializedVersion: 11
+ m_Type: 1
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ForceVisible: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+ m_LightUnit: 1
+ m_LuxAtDistance: 1
+ m_EnableSpotReflector: 1
+--- !u!4 &1414861614
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!114 &1414861615
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UsePipelineSettings: 1
+ m_AdditionalLightsShadowResolutionTier: 2
+ m_CustomShadowLayers: 0
+ m_LightCookieSize: {x: 1, y: 1}
+ m_LightCookieOffset: {x: 0, y: 0}
+ m_SoftShadowQuality: 0
+ m_RenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_ShadowRenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_Version: 4
+ m_LightLayerMask: 1
+ m_ShadowLayerMask: 1
+ m_RenderingLayers: 1
+ m_ShadowRenderingLayers: 1
+--- !u!1 &2136621999
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2136622002}
+ - component: {fileID: 2136622001}
+ - component: {fileID: 2136622000}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &2136622000
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+--- !u!20 &2136622001
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &2136622002
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 1, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 2136622002}
+ - {fileID: 1414861614}
+ - {fileID: 1331954415}
+ - {fileID: 1097328752}
diff --git a/Assets/Sample/UIToolkit/UTKComponentListWindow.unity.meta b/Assets/Sample/UIToolkit/UTKComponentListWindow.unity.meta
new file mode 100644
index 00000000..8b8fe248
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKComponentListWindow.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 65d99286ce3c5a041b57ed8209713cd5
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sample/UIToolkit/UTKComponentListWindowSample.cs b/Assets/Sample/UIToolkit/UTKComponentListWindowSample.cs
new file mode 100644
index 00000000..df62bfee
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKComponentListWindowSample.cs
@@ -0,0 +1,262 @@
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UIElements;
+using UVC.UIToolkit;
+
+///
+/// UTKComponentListWindow와 UTKComponentTabListWindow의 기능을 테스트하기 위한 샘플 MonoBehaviour입니다.
+/// 계층적 트리 데이터를 생성하고 다양한 이벤트 핸들러를 등록하여 동작을 확인합니다.
+///
+public class UTKComponentListWindowSample : MonoBehaviour
+{
+ [SerializeField]
+ public UIDocument uiDocument;
+
+ [SerializeField]
+ [Tooltip("시작 시 적용할 테마")]
+ private UTKTheme initialTheme = UTKTheme.Dark;
+
+ private UTKToggle _themeToggle;
+
+
+ private UTKComponentListWindow listWindow;
+ private UTKComponentTabListWindow tabListWindow;
+
+
+ void Start()
+ {
+ // UIDocument 참조 확인
+ var doc = GetComponent();
+ if (doc == null)
+ {
+ Debug.LogError("UIDocument가 할당되지 않았습니다.");
+ return;
+ }
+ uiDocument = doc;
+
+ var toggle = uiDocument.rootVisualElement.Q("toggle");
+ if (toggle == null)
+ {
+ Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
+ return;
+ }
+ _themeToggle = toggle;
+
+ var window = uiDocument.rootVisualElement.Q("window");
+ if (window == null)
+ {
+ Debug.LogError("UXML에서 UTKComponentListWindow를 찾을 수 없습니다.");
+ return;
+ }
+ listWindow = window;
+
+ var tabWindow = uiDocument.rootVisualElement.Q("tabWindow");
+ if (tabWindow == null)
+ {
+ Debug.LogError("UXML에서 UTKComponentTabListWindow를 찾을 수 없습니다.");
+ return;
+ }
+ tabListWindow = tabWindow;
+
+ UTKThemeManager.Instance.RegisterRoot(uiDocument.rootVisualElement);
+ UTKThemeManager.Instance.SetTheme(initialTheme);
+
+ _themeToggle.OnValueChanged += (isOn) =>
+ {
+ UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
+ };
+
+ // 테스트용 계층적 트리 데이터 생성
+ CreateTabListTestData();
+
+ // 이벤트 핸들러 등록
+ RegisterTabListEventHandlers();
+
+ // 테스트용 계층적 트리 데이터 생성
+ CreateTestData();
+
+ // 이벤트 핸들러 등록
+ RegisterEventHandlers();
+
+ }
+
+ ///
+ /// 테스트용 계층적 트리 데이터를 생성합니다.
+ /// 5개의 카테고리를 생성하고, 각 카테고리에 20개의 항목을 추가합니다.
+ ///
+ private void CreateTestData()
+ {
+ var data = new List();
+ for (int i = 1; i <= 5; i++)
+ {
+ string categoryName = $"Category {i}";
+ // 카테고리 데이터 생성 (UTKComponentListCategoryData 사용)
+ var categoryData = new UTKComponentListCategoryData { name = categoryName };
+
+ for (int j = 1; j <= 20; j++)
+ {
+ // 일반 항목 데이터 생성 (UTKComponentListItemData 사용)
+ var itemData = new UTKComponentListItemData
+ {
+ name = $"Item {i}-{j}",
+ option = $"Option {j}"
+ };
+ categoryData.Add(itemData);
+ }
+ data.Add(categoryData);
+ }
+ listWindow.SetData(data);
+
+ Debug.Log("[UTKComponentListWindowSample] 테스트 데이터 생성 완료: 5개 카테고리");
+ }
+
+ ///
+ /// UTKComponentListWindow의 이벤트 핸들러들을 등록합니다.
+ /// 선택, 선택 해제, 삭제, 더블클릭, 가시성 변경 이벤트를 처리합니다.
+ ///
+ private void RegisterEventHandlers()
+ {
+ // 항목 선택 이벤트 (다중 선택 지원)
+ // 사용자가 항목을 클릭하거나 SelectItem() 호출 시 발생
+ listWindow.OnItemSelected += (List selectedItems) =>
+ {
+ foreach (var item in selectedItems)
+ {
+ Debug.Log($"[선택됨] {item.name}");
+ }
+ };
+
+ // 항목 선택 해제 이벤트 (다중 선택 지원)
+ // 사용자가 다른 항목을 선택하거나 DeselectItem() 호출 시 발생
+ listWindow.OnItemDeselected += (List deselectedItems) =>
+ {
+ foreach (var item in deselectedItems)
+ {
+ Debug.Log($"[선택 해제됨] {item.name}");
+ }
+ };
+
+ // 항목 삭제 이벤트
+ // 사용자가 Delete 또는 Backspace 키를 누를 때 발생
+ // 실제 삭제는 이 핸들러에서 DeleteItem()을 호출하여 수행
+ listWindow.OnItemDeleted += (UTKComponentListItemDataBase deletedItem) =>
+ {
+ Debug.Log($"[삭제 요청] {deletedItem.name}");
+ // 실제로 항목을 삭제하려면 아래 주석을 해제하세요:
+ // treeListWindow.DeleteItem(deletedItem);
+ };
+
+ // 항목 더블클릭 이벤트
+ // 사용자가 항목을 더블클릭하거나 Enter 키를 누를 때 발생
+ listWindow.OnItemDoubleClicked += (UTKComponentListItemDataBase doubleClickedItem) =>
+ {
+ Debug.Log($"[더블클릭] {doubleClickedItem.name}");
+ };
+
+ // 항목 가시성 변경 이벤트
+ // 사용자가 눈 아이콘 버튼을 클릭하여 가시성을 토글할 때 발생
+ listWindow.OnItemVisibilityChanged += (UTKComponentListItemDataBase item, bool isVisible) =>
+ {
+ Debug.Log($"[가시성 변경] {item.name}, IsVisible: {isVisible}");
+ };
+
+ // 아이콘 클릭 이벤트
+ // 그룹 항목의 setting-btn 등 아이콘 버튼 클릭 시 발생
+ listWindow.OnItemIconClicked += (string iconName, UTKComponentListItemDataBase item) =>
+ {
+ Debug.Log($"[아이콘 클릭] {iconName}, Item: {item.name}");
+ };
+
+ Debug.Log("[UTKComponentListWindowSample] 이벤트 핸들러 등록 완료");
+ }
+
+ ///
+ /// UTKComponentTabListWindow용 테스트 데이터를 생성합니다.
+ /// 5개의 카테고리(탭)를 생성하고, 각 카테고리에 20개의 자식 항목을 추가합니다.
+ ///
+ private void CreateTabListTestData()
+ {
+ var data = new List();
+ for (int i = 1; i <= 5; i++)
+ {
+ string categoryName = $"Category {i}";
+ // 카테고리 데이터 생성 (UTKComponentListCategoryData 사용)
+ var categoryData = new UTKComponentListCategoryData { name = categoryName };
+
+ for (int j = 1; j <= 20; j++)
+ {
+ // 일반 항목 데이터 생성 (UTKComponentListItemData 사용)
+ var itemData = new UTKComponentListItemData
+ {
+ name = $"Item {i}-{j}",
+ option = $"Option {j}"
+ };
+ categoryData.Add(itemData);
+ }
+ data.Add(categoryData);
+ }
+ tabListWindow.SetData(data);
+
+ Debug.Log("[UTKComponentListWindowSample] TabList 테스트 데이터 생성 완료: 5개 카테고리 (탭으로 표시됨)");
+ }
+
+ ///
+ /// UTKComponentTabListWindow의 이벤트 핸들러들을 등록합니다.
+ ///
+ private void RegisterTabListEventHandlers()
+ {
+ // 항목 선택 이벤트 (다중 선택 지원)
+ tabListWindow.OnItemSelected += (List selectedItems) =>
+ {
+ foreach (var item in selectedItems)
+ {
+ Debug.Log($"[TabList 선택됨] {item.name}");
+ }
+ };
+
+ // 항목 선택 해제 이벤트 (다중 선택 지원)
+ tabListWindow.OnItemDeselected += (List deselectedItems) =>
+ {
+ foreach (var item in deselectedItems)
+ {
+ Debug.Log($"[TabList 선택 해제됨] {item.name}");
+ }
+ };
+
+ // 항목 삭제 이벤트
+ tabListWindow.OnItemDeleted += (UTKComponentListItemDataBase deletedItem) =>
+ {
+ Debug.Log($"[TabList 삭제 요청] {deletedItem.name}");
+ };
+
+ // 항목 더블클릭 이벤트
+ tabListWindow.OnItemDoubleClicked += (UTKComponentListItemDataBase doubleClickedItem) =>
+ {
+ Debug.Log($"[TabList 더블클릭] {doubleClickedItem.name}");
+ };
+
+ // 항목 가시성 변경 이벤트
+ tabListWindow.OnItemVisibilityChanged += (UTKComponentListItemDataBase item, bool isVisible) =>
+ {
+ Debug.Log($"[TabList 가시성 변경] {item.name}, IsVisible: {isVisible}");
+ };
+
+ // 아이콘 클릭 이벤트
+ tabListWindow.OnItemIconClicked += (string iconName, UTKComponentListItemDataBase item) =>
+ {
+ Debug.Log($"[TabList 아이콘 클릭] {iconName}, Item: {item.name}");
+ };
+
+ Debug.Log("[UTKComponentListWindowSample] TabList 이벤트 핸들러 등록 완료");
+ }
+
+ ///
+ /// 컴포넌트가 파괴될 때 리소스를 정리합니다.
+ ///
+ private void OnDestroy()
+ {
+ // UTKComponentListWindow의 Dispose 호출로 이벤트 핸들러 정리
+ listWindow?.Dispose();
+ tabListWindow?.Dispose();
+ }
+}
diff --git a/Assets/Sample/UIToolkit/UTKComponentListWindowSample.cs.meta b/Assets/Sample/UIToolkit/UTKComponentListWindowSample.cs.meta
new file mode 100644
index 00000000..b6925f6a
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKComponentListWindowSample.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: ed200de1f3108b441b61f25085defa29
diff --git a/Assets/Sample/UIToolkit/UTKComponentListWindowUXML.uxml b/Assets/Sample/UIToolkit/UTKComponentListWindowUXML.uxml
new file mode 100644
index 00000000..f60cada6
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKComponentListWindowUXML.uxml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/Assets/Sample/UIToolkit/UTKComponentListWindowUXML.uxml.meta b/Assets/Sample/UIToolkit/UTKComponentListWindowUXML.uxml.meta
new file mode 100644
index 00000000..14f35253
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKComponentListWindowUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: ac1b05d63bb20cd468b39a2802e42701
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Sample/UIToolkit/UTKDatePicker.unity b/Assets/Sample/UIToolkit/UTKDatePicker.unity
new file mode 100644
index 00000000..c89ca8c2
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKDatePicker.unity
@@ -0,0 +1,497 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 10
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 13
+ m_BakeOnSceneLoad: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 512
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 256
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 1
+ m_PVRDenoiserTypeDirect: 1
+ m_PVRDenoiserTypeIndirect: 1
+ m_PVRDenoiserTypeAO: 1
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 1
+ m_PVRFilteringGaussRadiusAO: 1
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 3
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ buildHeightMesh: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &1097328750
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1097328752}
+ - component: {fileID: 1097328754}
+ - component: {fileID: 1097328755}
+ m_Layer: 0
+ m_Name: Sample
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1097328752
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1097328754
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
+ m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
+ m_ParentUI: {fileID: 0}
+ sourceAsset: {fileID: 9197481963319205126, guid: 532efe3b9768cdf4e86046f72462a043, type: 3}
+ m_SortingOrder: 10
+ m_Position: 0
+ m_WorldSpaceSizeMode: 1
+ m_WorldSpaceWidth: 1920
+ m_WorldSpaceHeight: 1080
+ m_PivotReferenceSize: 0
+ m_Pivot: 0
+ m_WorldSpaceCollider: {fileID: 0}
+--- !u!114 &1097328755
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: bc81b9487fa9f354d89420b1a2533cce, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::UTKDatePickerSample
+ _uiDocument: {fileID: 1097328754}
+ initialTheme: 0
+--- !u!1 &1331954412
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1331954415}
+ - component: {fileID: 1331954414}
+ - component: {fileID: 1331954413}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1331954413
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SendPointerHoverToParent: 1
+ m_MoveRepeatDelay: 0.5
+ m_MoveRepeatRate: 0.1
+ m_XRTrackingOrigin: {fileID: 0}
+ m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_DeselectOnBackgroundClick: 0
+ m_PointerBehavior: 0
+ m_CursorLockBehavior: 0
+ m_ScrollDeltaPerTick: 6
+--- !u!114 &1331954414
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!4 &1331954415
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1414861612
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1414861614}
+ - component: {fileID: 1414861613}
+ - component: {fileID: 1414861615}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &1414861613
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ serializedVersion: 11
+ m_Type: 1
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ForceVisible: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+ m_LightUnit: 1
+ m_LuxAtDistance: 1
+ m_EnableSpotReflector: 1
+--- !u!4 &1414861614
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!114 &1414861615
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UsePipelineSettings: 1
+ m_AdditionalLightsShadowResolutionTier: 2
+ m_CustomShadowLayers: 0
+ m_LightCookieSize: {x: 1, y: 1}
+ m_LightCookieOffset: {x: 0, y: 0}
+ m_SoftShadowQuality: 0
+ m_RenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_ShadowRenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_Version: 4
+ m_LightLayerMask: 1
+ m_ShadowLayerMask: 1
+ m_RenderingLayers: 1
+ m_ShadowRenderingLayers: 1
+--- !u!1 &2136621999
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2136622002}
+ - component: {fileID: 2136622001}
+ - component: {fileID: 2136622000}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &2136622000
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+--- !u!20 &2136622001
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &2136622002
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 1, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 2136622002}
+ - {fileID: 1414861614}
+ - {fileID: 1331954415}
+ - {fileID: 1097328752}
diff --git a/Assets/Sample/UIToolkit/UTKDatePicker.unity.meta b/Assets/Sample/UIToolkit/UTKDatePicker.unity.meta
new file mode 100644
index 00000000..a23954e6
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKDatePicker.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 57b0e5f28dfdeaf4f92c72f097de43f2
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sample/UIToolkit/UTKDatePickerSample.cs b/Assets/Sample/UIToolkit/UTKDatePickerSample.cs
new file mode 100644
index 00000000..33a0c2f0
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKDatePickerSample.cs
@@ -0,0 +1,414 @@
+#nullable enable
+using System;
+using Cysharp.Threading.Tasks;
+using UnityEngine;
+using UnityEngine.UIElements;
+using UVC.Locale;
+using UVC.UIToolkit;
+
+namespace UVC.Sample.UIToolkit
+{
+ ///
+ /// UTKDatePicker 샘플 코드
+ /// 버튼 클릭으로 날짜 피커를 열고 선택된 날짜를 표시
+ ///
+ public class UTKDatePickerSample : MonoBehaviour
+ {
+ [SerializeField] private UIDocument? _uiDocument;
+
+ [SerializeField]
+ [Tooltip("시작 시 적용할 테마")]
+ private UTKTheme initialTheme = UTKTheme.Dark;
+
+ private UTKToggle _themeToggle;
+
+ private VisualElement? _root;
+ private Label? _dateLabel;
+ private Label? _dateTimeLabel;
+ private Label? _dateRangeLabel;
+
+ private DateTime _selectedDate = DateTime.Today;
+ private DateTime _selectedDateTime = DateTime.Now;
+ private DateTime _rangeStartDate = DateTime.Today;
+ private DateTime _rangeEndDate = DateTime.Today.AddDays(7);
+ private UTKDatePicker? _currentPicker;
+
+ private void Start()
+ {
+ // UIDocument 참조 확인
+ var doc = GetComponent();
+ if (doc == null)
+ {
+ Debug.LogError("UIDocument가 할당되지 않았습니다.");
+ return;
+ }
+ _uiDocument = doc;
+
+ var toggle = _uiDocument.rootVisualElement.Q("toggle");
+ if (toggle == null)
+ {
+ Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
+ return;
+ }
+ _themeToggle = toggle;
+
+ UTKThemeManager.Instance.RegisterRoot(_uiDocument.rootVisualElement);
+ UTKThemeManager.Instance.SetTheme(initialTheme);
+
+ _themeToggle.OnValueChanged += (isOn) =>
+ {
+ UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
+ };
+
+ bool success = LocalizationManager.Instance.LoadDefaultLocalizationData("ko", "locale.json");
+ Debug.Log($"LocalizationManager: LoadDefaultLocalizationData success: {success}");
+
+ _root = _uiDocument.rootVisualElement;
+ UTKDatePicker.SetRoot(_root);
+ CreateSampleUI();
+ }
+
+ private void CreateSampleUI()
+ {
+ if (_root == null) return;
+
+ // 메인 컨테이너
+ var container = new VisualElement();
+ container.style.position = Position.Absolute;
+ container.style.left = 20;
+ container.style.top = 20;
+ container.style.backgroundColor = new Color(0.2f, 0.2f, 0.2f);
+ container.style.borderTopLeftRadius = 8;
+ container.style.borderTopRightRadius = 8;
+ container.style.borderBottomLeftRadius = 8;
+ container.style.borderBottomRightRadius = 8;
+ container.style.paddingTop = 15;
+ container.style.paddingBottom = 15;
+ container.style.paddingLeft = 15;
+ container.style.paddingRight = 15;
+ container.style.width = 320;
+
+ // 타이틀
+ var title = new Label("UTKDatePicker Sample");
+ title.style.fontSize = 16;
+ title.style.unityFontStyleAndWeight = FontStyle.Bold;
+ title.style.color = Color.white;
+ title.style.marginBottom = 15;
+ container.Add(title);
+
+ // Date Only 섹션
+ var dateSection = CreateSection("Date Only Mode", "Open Date Picker", OpenDatePicker);
+ _dateLabel = dateSection.label;
+ _dateLabel.text = FormatDate(_selectedDate);
+ container.Add(dateSection.container);
+
+ // DateTime 섹션
+ var dateTimeSection = CreateSection("Date & Time Mode", "Open DateTime Picker", OpenDateTimePicker);
+ _dateTimeLabel = dateTimeSection.label;
+ _dateTimeLabel.text = FormatDateTime(_selectedDateTime);
+ container.Add(dateTimeSection.container);
+
+ // Async 섹션
+ var asyncSection = new VisualElement();
+ asyncSection.style.marginBottom = 15;
+
+ var asyncLabel = new Label("Async/Await Mode");
+ asyncLabel.style.color = new Color(0.8f, 0.8f, 0.8f);
+ asyncLabel.style.fontSize = 12;
+ asyncLabel.style.marginBottom = 5;
+ asyncSection.Add(asyncLabel);
+
+ var asyncBtn = new Button(() => OpenDatePickerAsync().Forget()) { text = "Open Date Picker (Async)" };
+ asyncBtn.style.height = 32;
+ asyncSection.Add(asyncBtn);
+
+ container.Add(asyncSection);
+
+ // Date Range 섹션
+ var rangeSection = CreateSection("Date Range Mode", "Open Range Picker", OpenDateRangePicker);
+ _dateRangeLabel = rangeSection.label;
+ _dateRangeLabel.text = FormatDateRange(_rangeStartDate, _rangeEndDate);
+ container.Add(rangeSection.container);
+
+ // Date Range Async 섹션
+ var rangeAsyncSection = new VisualElement();
+ rangeAsyncSection.style.marginBottom = 15;
+
+ var rangeAsyncLabel = new Label("Date Range Async Mode");
+ rangeAsyncLabel.style.color = new Color(0.8f, 0.8f, 0.8f);
+ rangeAsyncLabel.style.fontSize = 12;
+ rangeAsyncLabel.style.marginBottom = 5;
+ rangeAsyncSection.Add(rangeAsyncLabel);
+
+ var rangeAsyncBtn = new Button(() => OpenDateRangePickerAsync().Forget()) { text = "Open Range Picker (Async)" };
+ rangeAsyncBtn.style.height = 32;
+ rangeAsyncSection.Add(rangeAsyncBtn);
+
+ container.Add(rangeAsyncSection);
+
+ // 구분선
+ var separator = new VisualElement();
+ separator.style.height = 1;
+ separator.style.backgroundColor = new Color(0.4f, 0.4f, 0.4f);
+ separator.style.marginTop = 15;
+ separator.style.marginBottom = 15;
+ container.Add(separator);
+
+ // 프리셋 날짜 버튼들
+ var presetLabel = new Label("Quick Select:");
+ presetLabel.style.color = Color.white;
+ presetLabel.style.marginBottom = 10;
+ container.Add(presetLabel);
+
+ var presetRow = new VisualElement();
+ presetRow.style.flexDirection = FlexDirection.Row;
+ presetRow.style.flexWrap = Wrap.Wrap;
+
+ AddPresetButton(presetRow, "Today", DateTime.Today);
+ AddPresetButton(presetRow, "Tomorrow", DateTime.Today.AddDays(1));
+ AddPresetButton(presetRow, "Next Week", DateTime.Today.AddDays(7));
+ AddPresetButton(presetRow, "Next Month", DateTime.Today.AddMonths(1));
+
+ container.Add(presetRow);
+
+ _root.Add(container);
+ }
+
+ private (VisualElement container, Label label) CreateSection(string sectionTitle, string buttonText, Action onClick)
+ {
+ var section = new VisualElement();
+ section.style.marginBottom = 15;
+
+ var sectionLabel = new Label(sectionTitle);
+ sectionLabel.style.color = new Color(0.8f, 0.8f, 0.8f);
+ sectionLabel.style.fontSize = 12;
+ sectionLabel.style.marginBottom = 5;
+ section.Add(sectionLabel);
+
+ var row = new VisualElement();
+ row.style.flexDirection = FlexDirection.Row;
+ row.style.alignItems = Align.Center;
+
+ var valueLabel = new Label();
+ valueLabel.style.color = Color.white;
+ valueLabel.style.fontSize = 14;
+ valueLabel.style.flexGrow = 1;
+ valueLabel.style.paddingTop = 5;
+ valueLabel.style.paddingBottom = 5;
+ valueLabel.style.paddingLeft = 10;
+ valueLabel.style.paddingRight = 10;
+ valueLabel.style.backgroundColor = new Color(0.15f, 0.15f, 0.15f);
+ valueLabel.style.borderTopLeftRadius = 4;
+ valueLabel.style.borderTopRightRadius = 4;
+ valueLabel.style.borderBottomLeftRadius = 4;
+ valueLabel.style.borderBottomRightRadius = 4;
+ row.Add(valueLabel);
+
+ var button = new Button(onClick) { text = buttonText };
+ button.style.marginLeft = 10;
+ button.style.height = 28;
+ row.Add(button);
+
+ section.Add(row);
+
+ return (section, valueLabel);
+ }
+
+ private void AddPresetButton(VisualElement parent, string label, DateTime date)
+ {
+ var btn = new Button(() => SetDate(date)) { text = label };
+ btn.style.marginRight = 5;
+ btn.style.marginBottom = 5;
+ btn.style.height = 28;
+ parent.Add(btn);
+ }
+
+ private void OpenDatePicker()
+ {
+ if (_root == null || _currentPicker != null) return;
+
+ _currentPicker = UTKDatePicker.Show(
+ _selectedDate,
+ UTKDatePicker.PickerMode.DateOnly,
+ "Select Date"
+ );
+
+ _currentPicker.OnDateSelected += OnDateSelected;
+ _currentPicker.OnClosed += OnPickerClosed;
+ }
+
+ private void OpenDateTimePicker()
+ {
+ if (_root == null || _currentPicker != null) return;
+
+ _currentPicker = UTKDatePicker.Show(
+ _selectedDateTime,
+ UTKDatePicker.PickerMode.DateAndTime,
+ "Select Date & Time"
+ );
+
+ _currentPicker.OnDateSelected += OnDateTimeSelected;
+ _currentPicker.OnClosed += OnPickerClosed;
+ }
+
+ private async UniTaskVoid OpenDatePickerAsync()
+ {
+ if (_root == null) return;
+
+ // ShowAsync를 사용하여 날짜 선택 대기
+ // OK 클릭 시 선택된 날짜 반환, 취소/닫기 시 null 반환
+ DateTime? result = await UTKDatePicker.ShowAsync(
+ _selectedDate,
+ UTKDatePicker.PickerMode.DateOnly,
+ "Select Date (Async)"
+ );
+
+ if (result.HasValue)
+ {
+ _selectedDate = result.Value;
+ if (_dateLabel != null)
+ {
+ _dateLabel.text = FormatDate(result.Value);
+ }
+ Debug.Log($"[Async] Date Result: {FormatDate(result.Value)}");
+ }
+ else
+ {
+ Debug.Log("[Async] Date selection cancelled");
+ }
+ }
+
+ private void OnDateSelected(DateTime date)
+ {
+ _selectedDate = date;
+ if (_dateLabel != null)
+ {
+ _dateLabel.text = FormatDate(date);
+ }
+ Debug.Log($"Date Selected: {FormatDate(date)}");
+ }
+
+ private void OnDateTimeSelected(DateTime dateTime)
+ {
+ _selectedDateTime = dateTime;
+ if (_dateTimeLabel != null)
+ {
+ _dateTimeLabel.text = FormatDateTime(dateTime);
+ }
+ Debug.Log($"DateTime Selected: {FormatDateTime(dateTime)}");
+ }
+
+ private void OnPickerClosed()
+ {
+ if (_currentPicker != null)
+ {
+ _currentPicker.OnDateSelected -= OnDateSelected;
+ _currentPicker.OnDateSelected -= OnDateTimeSelected;
+ _currentPicker.OnClosed -= OnPickerClosed;
+ _currentPicker = null;
+ }
+ }
+
+ private void SetDate(DateTime date)
+ {
+ _selectedDate = date;
+ _selectedDateTime = new DateTime(date.Year, date.Month, date.Day,
+ _selectedDateTime.Hour, _selectedDateTime.Minute, 0);
+
+ if (_dateLabel != null)
+ {
+ _dateLabel.text = FormatDate(_selectedDate);
+ }
+
+ if (_dateTimeLabel != null)
+ {
+ _dateTimeLabel.text = FormatDateTime(_selectedDateTime);
+ }
+
+ Debug.Log($"Preset Date Set: {FormatDate(date)}");
+ }
+
+ private string FormatDate(DateTime date)
+ {
+ return date.ToString("yyyy-MM-dd");
+ }
+
+ private string FormatDateTime(DateTime dateTime)
+ {
+ return dateTime.ToString("yyyy-MM-dd HH:mm");
+ }
+
+ private string FormatDateRange(DateTime start, DateTime end)
+ {
+ return $"{start:yyyy-MM-dd} ~ {end:yyyy-MM-dd}";
+ }
+
+ private void OpenDateRangePicker()
+ {
+ if (_root == null || _currentPicker != null) return;
+
+ _currentPicker = UTKDatePicker.ShowRange(
+ _rangeStartDate,
+ _rangeEndDate,
+ false,
+ "Select Date Range"
+ );
+
+ _currentPicker.OnDateRangeSelected += OnDateRangeSelected;
+ _currentPicker.OnClosed += OnPickerClosed;
+ }
+
+ private async UniTaskVoid OpenDateRangePickerAsync()
+ {
+ if (_root == null) return;
+
+ // ShowRangeAsync를 사용하여 날짜 범위 선택 대기
+ // OK 클릭 시 선택된 범위 반환, 취소/닫기 시 null 반환
+ var result = await UTKDatePicker.ShowRangeAsync(
+ _rangeStartDate,
+ _rangeEndDate,
+ false,
+ "Select Date Range (Async)"
+ );
+
+ if (result.HasValue)
+ {
+ _rangeStartDate = result.Value.Start;
+ _rangeEndDate = result.Value.End;
+ if (_dateRangeLabel != null)
+ {
+ _dateRangeLabel.text = FormatDateRange(result.Value.Start, result.Value.End);
+ }
+ Debug.Log($"[Async] Range Result: {FormatDateRange(result.Value.Start, result.Value.End)}");
+ }
+ else
+ {
+ Debug.Log("[Async] Date range selection cancelled");
+ }
+ }
+
+ private void OnDateRangeSelected(DateTime start, DateTime end)
+ {
+ _rangeStartDate = start;
+ _rangeEndDate = end;
+ if (_dateRangeLabel != null)
+ {
+ _dateRangeLabel.text = FormatDateRange(start, end);
+ }
+ Debug.Log($"Date Range Selected: {FormatDateRange(start, end)}");
+ }
+
+ private void OnDestroy()
+ {
+ if (_currentPicker != null)
+ {
+ _currentPicker.OnDateSelected -= OnDateSelected;
+ _currentPicker.OnDateSelected -= OnDateTimeSelected;
+ _currentPicker.OnDateRangeSelected -= OnDateRangeSelected;
+ _currentPicker.OnClosed -= OnPickerClosed;
+ _currentPicker.Dispose();
+ _currentPicker = null;
+ }
+ }
+ }
+}
diff --git a/Assets/Sample/UIToolkit/UTKDatePickerSample.cs.meta b/Assets/Sample/UIToolkit/UTKDatePickerSample.cs.meta
new file mode 100644
index 00000000..1c6afcdf
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKDatePickerSample.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: bc81b9487fa9f354d89420b1a2533cce
diff --git a/Assets/Sample/UIToolkit/UTKDatePickerUXML.uxml b/Assets/Sample/UIToolkit/UTKDatePickerUXML.uxml
new file mode 100644
index 00000000..803d1e47
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKDatePickerUXML.uxml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/Assets/Sample/UIToolkit/UTKDatePickerUXML.uxml.meta b/Assets/Sample/UIToolkit/UTKDatePickerUXML.uxml.meta
new file mode 100644
index 00000000..1206e0fd
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKDatePickerUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 532efe3b9768cdf4e86046f72462a043
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Sample/UIToolkit/UTKImageListWindow.unity b/Assets/Sample/UIToolkit/UTKImageListWindow.unity
new file mode 100644
index 00000000..2c24060e
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKImageListWindow.unity
@@ -0,0 +1,655 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 10
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 13
+ m_BakeOnSceneLoad: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 512
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 256
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 1
+ m_PVRDenoiserTypeDirect: 1
+ m_PVRDenoiserTypeIndirect: 1
+ m_PVRDenoiserTypeAO: 1
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 1
+ m_PVRFilteringGaussRadiusAO: 1
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 3
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ buildHeightMesh: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &1097328750
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1097328752}
+ - component: {fileID: 1097328754}
+ - component: {fileID: 1097328755}
+ m_Layer: 0
+ m_Name: Sample
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1097328752
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1097328754
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
+ m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
+ m_ParentUI: {fileID: 0}
+ sourceAsset: {fileID: 9197481963319205126, guid: 5b85ca454c8b3e8408b994aa6e24b2d0, type: 3}
+ m_SortingOrder: 0
+ m_Position: 0
+ m_WorldSpaceSizeMode: 1
+ m_WorldSpaceWidth: 1920
+ m_WorldSpaceHeight: 1080
+ m_PivotReferenceSize: 0
+ m_Pivot: 0
+ m_WorldSpaceCollider: {fileID: 0}
+--- !u!114 &1097328755
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 9ebcff9ad71cd32488a9f8c12103a6d3, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::UTKImageListWindowSample
+ uiDocument: {fileID: 1097328754}
+ dragImageFollowCursor: 1
+--- !u!1 &1192809690
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1192809694}
+ - component: {fileID: 1192809693}
+ - component: {fileID: 1192809692}
+ - component: {fileID: 1192809691}
+ m_Layer: 0
+ m_Name: Plane
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!64 &1192809691
+MeshCollider:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192809690}
+ m_Material: {fileID: 0}
+ m_IncludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_ExcludeLayers:
+ serializedVersion: 2
+ m_Bits: 0
+ m_LayerOverridePriority: 0
+ m_IsTrigger: 0
+ m_ProvidesContacts: 0
+ m_Enabled: 1
+ serializedVersion: 5
+ m_Convex: 0
+ m_CookingOptions: 30
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!23 &1192809692
+MeshRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192809690}
+ m_Enabled: 1
+ m_CastShadows: 1
+ m_ReceiveShadows: 1
+ m_DynamicOccludee: 1
+ m_StaticShadowCaster: 0
+ m_MotionVectors: 1
+ m_LightProbeUsage: 1
+ m_ReflectionProbeUsage: 1
+ m_RayTracingMode: 2
+ m_RayTraceProcedural: 0
+ m_RayTracingAccelStructBuildFlagsOverride: 0
+ m_RayTracingAccelStructBuildFlags: 1
+ m_SmallMeshCulling: 1
+ m_ForceMeshLod: -1
+ m_MeshLodSelectionBias: 0
+ m_RenderingLayerMask: 1
+ m_RendererPriority: 0
+ m_Materials:
+ - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2}
+ m_StaticBatchInfo:
+ firstSubMesh: 0
+ subMeshCount: 0
+ m_StaticBatchRoot: {fileID: 0}
+ m_ProbeAnchor: {fileID: 0}
+ m_LightProbeVolumeOverride: {fileID: 0}
+ m_ScaleInLightmap: 1
+ m_ReceiveGI: 1
+ m_PreserveUVs: 0
+ m_IgnoreNormalsForChartDetection: 0
+ m_ImportantGI: 0
+ m_StitchLightmapSeams: 1
+ m_SelectedEditorRenderState: 3
+ m_MinimumChartSize: 4
+ m_AutoUVMaxDistance: 0.5
+ m_AutoUVMaxAngle: 89
+ m_LightmapParameters: {fileID: 0}
+ m_GlobalIlluminationMeshLod: 0
+ m_SortingLayerID: 0
+ m_SortingLayer: 0
+ m_SortingOrder: 0
+ m_AdditionalVertexStreams: {fileID: 0}
+--- !u!33 &1192809693
+MeshFilter:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192809690}
+ m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0}
+--- !u!4 &1192809694
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1192809690}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 10, y: 10, z: 10}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1331954412
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1331954415}
+ - component: {fileID: 1331954414}
+ - component: {fileID: 1331954413}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1331954413
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SendPointerHoverToParent: 1
+ m_MoveRepeatDelay: 0.5
+ m_MoveRepeatRate: 0.1
+ m_XRTrackingOrigin: {fileID: 0}
+ m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_DeselectOnBackgroundClick: 1
+ m_PointerBehavior: 0
+ m_CursorLockBehavior: 0
+ m_ScrollDeltaPerTick: 6
+--- !u!114 &1331954414
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!4 &1331954415
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1414861612
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1414861614}
+ - component: {fileID: 1414861613}
+ - component: {fileID: 1414861615}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &1414861613
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ serializedVersion: 11
+ m_Type: 1
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ForceVisible: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+ m_LightUnit: 1
+ m_LuxAtDistance: 1
+ m_EnableSpotReflector: 1
+--- !u!4 &1414861614
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!114 &1414861615
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UsePipelineSettings: 1
+ m_AdditionalLightsShadowResolutionTier: 2
+ m_CustomShadowLayers: 0
+ m_LightCookieSize: {x: 1, y: 1}
+ m_LightCookieOffset: {x: 0, y: 0}
+ m_SoftShadowQuality: 0
+ m_RenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_ShadowRenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_Version: 4
+ m_LightLayerMask: 1
+ m_ShadowLayerMask: 1
+ m_RenderingLayers: 1
+ m_ShadowRenderingLayers: 1
+--- !u!1 &2136621999
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2136622002}
+ - component: {fileID: 2136622001}
+ - component: {fileID: 2136622000}
+ - component: {fileID: 2136622003}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &2136622000
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+--- !u!20 &2136622001
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &2136622002
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.42261827, y: 0, z: 0, w: 0.9063079}
+ m_LocalPosition: {x: 0, y: 40, z: -50}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 50, y: 0, z: 0}
+--- !u!114 &2136622003
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalCameraData
+ m_RenderShadows: 1
+ m_RequiresDepthTextureOption: 2
+ m_RequiresOpaqueTextureOption: 2
+ m_CameraType: 0
+ m_Cameras: []
+ m_RendererIndex: -1
+ m_VolumeLayerMask:
+ serializedVersion: 2
+ m_Bits: 1
+ m_VolumeTrigger: {fileID: 0}
+ m_VolumeFrameworkUpdateModeOption: 2
+ m_RenderPostProcessing: 0
+ m_Antialiasing: 0
+ m_AntialiasingQuality: 2
+ m_StopNaN: 0
+ m_Dithering: 0
+ m_ClearDepth: 1
+ m_AllowXRRendering: 1
+ m_AllowHDROutput: 1
+ m_UseScreenCoordOverride: 0
+ m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0}
+ m_RequiresDepthTexture: 0
+ m_RequiresColorTexture: 0
+ m_TaaSettings:
+ m_Quality: 3
+ m_FrameInfluence: 0.1
+ m_JitterScale: 1
+ m_MipBias: 0
+ m_VarianceClampScale: 0.9
+ m_ContrastAdaptiveSharpening: 0
+ m_Version: 2
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 2136622002}
+ - {fileID: 1414861614}
+ - {fileID: 1331954415}
+ - {fileID: 1097328752}
+ - {fileID: 1192809694}
diff --git a/Assets/Sample/UIToolkit/UTKImageListWindow.unity.meta b/Assets/Sample/UIToolkit/UTKImageListWindow.unity.meta
new file mode 100644
index 00000000..3b4775a1
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKImageListWindow.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 2db0cbabab2570646a967bcba63fef1a
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sample/UIToolkit/UTKImageListWindowSample.cs b/Assets/Sample/UIToolkit/UTKImageListWindowSample.cs
new file mode 100644
index 00000000..0dce84b9
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKImageListWindowSample.cs
@@ -0,0 +1,502 @@
+#nullable enable
+using System.Collections.Generic;
+using UnityEngine;
+using UnityEngine.UIElements;
+using UVC.UIToolkit;
+
+///
+/// UTKImageListWindow의 기능을 테스트하기 위한 샘플 MonoBehaviour입니다.
+/// 이미지 리스트 데이터를 생성하고 다양한 이벤트 핸들러를 등록하여 동작을 확인합니다.
+///
+/// 테스트 기능:
+///
+/// - 이미지+텍스트 아이템 표시
+/// - 검색 필터링 (3글자 이상)
+/// - 아이템 클릭/선택 이벤트
+/// - 드래그 앤 드롭 이벤트
+///
+///
+public class UTKImageListWindowSample : MonoBehaviour
+{
+ #region 필드 (Fields)
+
+ [SerializeField]
+ [Tooltip("UI를 표시할 UIDocument 컴포넌트")]
+ public UIDocument? uiDocument;
+
+ [SerializeField]
+ [Tooltip("드래그 시 이미지가 커서를 따라다니도록 설정")]
+ private bool dragImageFollowCursor = true;
+
+ [SerializeField]
+ [Tooltip("시작 시 적용할 테마")]
+ private UTKTheme initialTheme = UTKTheme.Dark;
+
+ private UTKToggle _themeToggle;
+
+ /// UTKImageListWindow 인스턴스
+ private UTKImageListWindow? _imageListWindow;
+
+ /// 드롭 위치 (스크린 좌표)
+ private Vector2 _lastDropScreenPosition;
+
+ /// 메인 카메라 참조
+ private Camera? _mainCamera;
+
+ /// 드래그 중인 3D 프리뷰 오브젝트
+ private GameObject? _dragPreview3D;
+
+ /// 드래그가 리스트 영역 밖에 있는지 여부
+ private bool _isOutsideListArea;
+
+ #endregion
+
+ #region Unity 라이프사이클
+
+ private void Start()
+ {
+ // UIDocument 참조 확인
+ var doc = GetComponent();
+ if (doc == null)
+ {
+ Debug.LogError("UIDocument가 할당되지 않았습니다.");
+ return;
+ }
+ uiDocument = doc;
+
+ var toggle = uiDocument.rootVisualElement.Q("toggle");
+ if (toggle == null)
+ {
+ Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
+ return;
+ }
+ _themeToggle = toggle;
+
+ var window = uiDocument.rootVisualElement.Q("window");
+ if (window == null)
+ {
+ Debug.LogError("UXML에서 UTKImageListWindow를 찾을 수 없습니다.");
+ return;
+ }
+ _imageListWindow = window;
+
+ // UTKImageListWindow 인스턴스 생성 및 추가
+ _imageListWindow.DragImageFollowCursor = dragImageFollowCursor;
+ _imageListWindow.Title = "LIBRARY";
+ _imageListWindow.ShowCloseButton = true;
+
+ UTKThemeManager.Instance.RegisterRoot(uiDocument.rootVisualElement);
+ UTKThemeManager.Instance.SetTheme(initialTheme);
+
+ _themeToggle.OnValueChanged += (isOn) =>
+ {
+ UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
+ };
+
+ // 테스트 데이터 생성
+ CreateTestData();
+
+ // 이벤트 핸들러 등록
+ RegisterEventHandlers();
+
+ // 윈도우 표시
+ _imageListWindow.Show();
+
+ Debug.Log("[UTKImageListWindowSample] 초기화 완료");
+ }
+
+ private void OnDestroy()
+ {
+ // 리소스 정리
+ _imageListWindow?.Dispose();
+ _imageListWindow = null;
+ }
+
+ #endregion
+
+ #region 테스트 데이터 생성
+
+ ///
+ /// 테스트용 이미지 리스트 데이터를 생성합니다.
+ /// imagePath와 prefabPath 리스트를 사용하여 데이터를 생성합니다.
+ ///
+ private void CreateTestData()
+ {
+ if (_imageListWindow == null) return;
+
+ // 이미지 경로 리스트
+ List imagePaths = new()
+ {
+ "Simulator/Images/lib_forklift_400x300",
+ "Simulator/Images/lib_pallet_400x300",
+ "Simulator/Images/lib_worker_400x300",
+ };
+
+ // 프리팹 경로 리스트
+ List prefabPaths = new()
+ {
+ "Simulator/FreeForkLift/Prefabs/Forklift",
+ "Simulator/FreeForkLift/Prefabs/PalletEmpty",
+ "Simulator/CharCrafter – Free Preset Characters Pack (Vol. 1)/Prefabs/Male Young Guy",
+ };
+
+ // 아이템 이름 리스트
+ string[] itemNames = { "지게차", "팔레트", "작업자" };
+
+ var data = new List();
+
+ // imagePath, prefabPath 리스트를 사용하여 데이터 생성
+ for (int i = 0; i < 19; i++)
+ {
+ var itemData = new UTKImageListItemData
+ {
+ externalId = $"item-{i:D4}",
+ itemName = itemNames[i % itemNames.Length],
+ imagePath = imagePaths[i % imagePaths.Count],
+ objectPrefabPath = prefabPaths[i % prefabPaths.Count],
+ tag = "시뮬레이터"
+ };
+
+ data.Add(itemData);
+ }
+
+ // 데이터 설정
+ _imageListWindow.SetData(data);
+
+ Debug.Log($"[UTKImageListWindowSample] 테스트 데이터 생성 완료: {data.Count}개 아이템");
+ }
+
+ #endregion
+
+ #region 이벤트 핸들러 등록
+
+ ///
+ /// UTKImageListWindow의 이벤트 핸들러들을 등록합니다.
+ /// 클릭, 드래그 앤 드롭, 윈도우 닫기 이벤트를 처리합니다.
+ ///
+ private void RegisterEventHandlers()
+ {
+ if (_imageListWindow == null) return;
+
+ // 아이템 클릭 이벤트
+ // 사용자가 아이템을 클릭할 때 발생
+ _imageListWindow.OnItemClick += (UTKImageListItemData item) =>
+ {
+ Debug.Log($"[클릭] {item.itemName} (ID: {item.externalId}, Tag: {item.tag})");
+ };
+
+ // 드래그 시작 이벤트
+ // 사용자가 아이템을 드래그하기 시작할 때 발생
+ _imageListWindow.OnItemBeginDrag += (UTKImageListItemData item, Vector2 position) =>
+ {
+ Debug.Log($"[드래그 시작] {item.itemName} at {position}");
+ };
+
+ // 드래그 중 이벤트
+ // 아이템을 드래그하는 동안 지속적으로 발생
+ _imageListWindow.OnItemDrag += (UTKImageListItemData item, Vector2 position) =>
+ {
+ // 3D 프리뷰가 있으면 위치 업데이트
+ if (_dragPreview3D != null)
+ {
+ Update3DPreviewPosition(position);
+ }
+ };
+
+ // 드래그 종료 이벤트
+ // 드래그가 끝났을 때 발생 (드롭 직전)
+ _imageListWindow.OnItemEndDrag += (UTKImageListItemData item, Vector2 position) =>
+ {
+ Debug.Log($"[드래그 종료] {item.itemName} at {position}");
+ // 드롭 위치 저장 (스크린 좌표)
+ _lastDropScreenPosition = position;
+ // 3D 프리뷰는 OnItemDrop에서 처리
+ };
+
+ // 리스트 영역 이탈 이벤트
+ // 드래그 중 리스트 영역을 벗어났을 때 3D 프리팹 표시
+ _imageListWindow.OnDragExitList += (UTKImageListItemData item, Vector2 position) =>
+ {
+ Debug.Log($"[리스트 영역 이탈] {item.itemName} - 3D 프리뷰 생성");
+ _isOutsideListArea = true;
+ Create3DPreview(item, position);
+ };
+
+ // 리스트 영역 진입 이벤트
+ // 드래그 중 리스트 영역에 다시 들어왔을 때 3D 프리팹 숨김
+ _imageListWindow.OnDragEnterList += (UTKImageListItemData item, Vector2 position) =>
+ {
+ Debug.Log($"[리스트 영역 진입] {item.itemName} - 3D 프리뷰 제거");
+ _isOutsideListArea = false;
+ Destroy3DPreview();
+ };
+
+ // 아이템 드롭 이벤트
+ // 드래그가 완료되어 아이템이 드롭되었을 때 발생
+ _imageListWindow.OnItemDrop += (UTKImageListItemData item) =>
+ {
+ Debug.Log($"[드롭] {item.itemName} - ObjectPrefabPath: {item.objectPrefabPath}");
+
+ // 리스트 영역 내부에서 드롭한 경우 프리팹 생성 안함
+ if (!_isOutsideListArea)
+ {
+ Debug.Log("리스트 영역 내부에서 드롭 - 프리팹 생성 안함");
+ Destroy3DPreview();
+ return;
+ }
+
+ // 프리팹 로드
+ var prefab = Resources.Load(item.objectPrefabPath);
+ if (prefab == null)
+ {
+ Debug.LogWarning($"[UTKImageListWindowSample] 프리팹을 찾을 수 없습니다: {item.objectPrefabPath}");
+ Destroy3DPreview();
+ _isOutsideListArea = false;
+ return;
+ }
+
+ // 월드 좌표 계산
+ Vector3 worldPosition = ScreenToWorldPosition(_lastDropScreenPosition);
+
+ // 프리팹 인스턴스화
+ var instance = Instantiate(prefab, worldPosition, Quaternion.identity);
+ Debug.Log($"[UTKImageListWindowSample] 프리팹 생성됨: {instance.name} at {worldPosition}");
+
+ // 3D 프리뷰 제거 및 플래그 리셋
+ Destroy3DPreview();
+ _isOutsideListArea = false;
+ };
+
+ // 윈도우 닫기 이벤트
+ // 사용자가 닫기 버튼을 클릭하거나 Close() 호출 시 발생
+ _imageListWindow.OnClosed += () =>
+ {
+ Debug.Log("[윈도우 닫힘]");
+ };
+
+ Debug.Log("[UTKImageListWindowSample] 이벤트 핸들러 등록 완료");
+ }
+
+ #endregion
+
+ #region 좌표 변환 (Coordinate Conversion)
+
+ ///
+ /// UI Toolkit 좌표를 Unity Screen 좌표로 변환합니다.
+ /// UI Toolkit: 좌상단 원점, Y축 아래로 증가
+ /// Unity Screen: 좌하단 원점, Y축 위로 증가
+ ///
+ /// UI Toolkit 좌표
+ /// Unity Screen 좌표
+ private Vector2 UIToolkitToScreenPosition(Vector2 uiToolkitPosition)
+ {
+ return new Vector2(uiToolkitPosition.x, Screen.height - uiToolkitPosition.y);
+ }
+
+ ///
+ /// 스크린 좌표를 월드 좌표로 변환합니다.
+ /// 바닥면(Y=0)에 레이캐스트하여 위치를 계산합니다.
+ ///
+ /// UI Toolkit 좌표 (좌상단 원점)
+ /// 월드 좌표 (레이캐스트 실패 시 카메라 전방 10m 위치)
+ private Vector3 ScreenToWorldPosition(Vector2 uiToolkitPosition)
+ {
+ // 메인 카메라 캐시
+ if (_mainCamera == null)
+ {
+ _mainCamera = Camera.main;
+ }
+ if (_mainCamera == null)
+ {
+ Debug.LogWarning("[UTKImageListWindowSample] 메인 카메라를 찾을 수 없습니다.");
+ return Vector3.zero;
+ }
+
+ // UI Toolkit 좌표를 Screen 좌표로 변환
+ Vector2 screenPosition = UIToolkitToScreenPosition(uiToolkitPosition);
+
+ // 스크린 좌표에서 레이 생성
+ Ray ray = _mainCamera.ScreenPointToRay(screenPosition);
+
+ // 바닥면(Y=0 평면)과의 교차점 계산
+ Plane groundPlane = new Plane(Vector3.up, Vector3.zero);
+ if (groundPlane.Raycast(ray, out float distance))
+ {
+ return ray.GetPoint(distance);
+ }
+
+ // 물리 레이캐스트로 콜라이더와 충돌 확인
+ if (Physics.Raycast(ray, out RaycastHit hit, 100f))
+ {
+ return hit.point;
+ }
+
+ // 실패 시 카메라 전방 10m 위치 반환
+ return ray.GetPoint(10f);
+ }
+
+ #endregion
+
+ #region 3D 프리뷰 (3D Preview)
+
+ ///
+ /// 드래그 중 3D 프리뷰 오브젝트를 생성합니다.
+ ///
+ /// 아이템 데이터
+ /// 화면 좌표
+ private void Create3DPreview(UTKImageListItemData item, Vector2 screenPosition)
+ {
+ // 기존 프리뷰가 있으면 제거
+ Destroy3DPreview();
+
+ // 프리팹 로드
+ var prefab = Resources.Load(item.objectPrefabPath);
+ if (prefab == null)
+ {
+ Debug.LogWarning($"[UTKImageListWindowSample] 프리팹을 찾을 수 없습니다: {item.objectPrefabPath}");
+ return;
+ }
+
+ // 월드 좌표 계산
+ Vector3 worldPosition = ScreenToWorldPosition(screenPosition);
+
+ // 프리뷰 인스턴스 생성
+ _dragPreview3D = Instantiate(prefab, worldPosition, Quaternion.identity);
+ _dragPreview3D.name = $"DragPreview_{item.itemName}";
+
+ // 프리뷰임을 나타내기 위해 반투명 처리 (선택적)
+ SetPreviewTransparency(_dragPreview3D, 0.6f);
+
+ // 콜라이더 비활성화 (드래그 중 충돌 방지)
+ DisableColliders(_dragPreview3D);
+
+ Debug.Log($"[UTKImageListWindowSample] 3D 프리뷰 생성됨: {_dragPreview3D.name} at {worldPosition}");
+ }
+
+ ///
+ /// 3D 프리뷰 오브젝트를 제거합니다.
+ ///
+ private void Destroy3DPreview()
+ {
+ if (_dragPreview3D != null)
+ {
+ Destroy(_dragPreview3D);
+ _dragPreview3D = null;
+ }
+ }
+
+ ///
+ /// 3D 프리뷰 오브젝트의 위치를 업데이트합니다.
+ ///
+ /// 화면 좌표
+ private void Update3DPreviewPosition(Vector2 screenPosition)
+ {
+ if (_dragPreview3D == null) return;
+
+ Vector3 worldPosition = ScreenToWorldPosition(screenPosition);
+ _dragPreview3D.transform.position = worldPosition;
+ }
+
+ ///
+ /// 오브젝트의 모든 렌더러를 반투명하게 설정합니다.
+ ///
+ /// 대상 게임오브젝트
+ /// 투명도 (0-1)
+ private void SetPreviewTransparency(GameObject obj, float alpha)
+ {
+ var renderers = obj.GetComponentsInChildren();
+ foreach (var renderer in renderers)
+ {
+ foreach (var material in renderer.materials)
+ {
+ // 투명 렌더링 모드로 전환
+ if (material.HasProperty("_Color"))
+ {
+ var color = material.color;
+ color.a = alpha;
+ material.color = color;
+
+ // Standard Shader 투명 모드 설정
+ material.SetFloat("_Mode", 3); // Transparent
+ material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);
+ material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
+ material.SetInt("_ZWrite", 0);
+ material.DisableKeyword("_ALPHATEST_ON");
+ material.EnableKeyword("_ALPHABLEND_ON");
+ material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
+ material.renderQueue = 3000;
+ }
+ }
+ }
+ }
+
+ ///
+ /// 오브젝트의 모든 콜라이더를 비활성화합니다.
+ ///
+ /// 대상 게임오브젝트
+ private void DisableColliders(GameObject obj)
+ {
+ var colliders = obj.GetComponentsInChildren();
+ foreach (var collider in colliders)
+ {
+ collider.enabled = false;
+ }
+ }
+
+ #endregion
+
+ #region 에디터 테스트용 메서드
+
+ ///
+ /// 런타임에 아이템을 추가하는 테스트 메서드입니다.
+ /// Inspector에서 컨텍스트 메뉴로 호출할 수 있습니다.
+ ///
+ [ContextMenu("Add Test Item")]
+ public void AddTestItem()
+ {
+ if (_imageListWindow == null) return;
+
+ var newItem = new UTKImageListItemData
+ {
+ externalId = $"runtime-{System.Guid.NewGuid():N}",
+ itemName = $"런타임 아이템 {_imageListWindow.ItemCount + 1}",
+ imagePath = "Prefabs/Thumbnails/runtime_item",
+ objectPrefabPath = "Prefabs/Objects/runtime_item",
+ tag = "런타임"
+ };
+
+ _imageListWindow.AddItem(newItem);
+ Debug.Log($"[UTKImageListWindowSample] 아이템 추가됨: {newItem.itemName}");
+ }
+
+ ///
+ /// 모든 아이템을 제거하는 테스트 메서드입니다.
+ ///
+ [ContextMenu("Clear All Items")]
+ public void ClearAllItems()
+ {
+ _imageListWindow?.Clear();
+ Debug.Log("[UTKImageListWindowSample] 모든 아이템 제거됨");
+ }
+
+ ///
+ /// 검색을 테스트하는 메서드입니다.
+ ///
+ [ContextMenu("Test Search (전기)")]
+ public void TestSearch()
+ {
+ _imageListWindow?.ApplySearch("전기");
+ Debug.Log("[UTKImageListWindowSample] 검색 테스트: '전기'");
+ }
+
+ ///
+ /// 윈도우를 다시 표시하는 메서드입니다.
+ ///
+ [ContextMenu("Show Window")]
+ public void ShowWindow()
+ {
+ _imageListWindow?.Show();
+ }
+
+ #endregion
+}
diff --git a/Assets/Sample/UIToolkit/UTKImageListWindowSample.cs.meta b/Assets/Sample/UIToolkit/UTKImageListWindowSample.cs.meta
new file mode 100644
index 00000000..0f1d5c08
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKImageListWindowSample.cs.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 9ebcff9ad71cd32488a9f8c12103a6d3
diff --git a/Assets/Sample/UIToolkit/UTKImageListWindowUXML.uxml b/Assets/Sample/UIToolkit/UTKImageListWindowUXML.uxml
new file mode 100644
index 00000000..61e5e60e
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKImageListWindowUXML.uxml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Assets/Sample/UIToolkit/UTKImageListWindowUXML.uxml.meta b/Assets/Sample/UIToolkit/UTKImageListWindowUXML.uxml.meta
new file mode 100644
index 00000000..aaafa3b1
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKImageListWindowUXML.uxml.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 5b85ca454c8b3e8408b994aa6e24b2d0
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 13804, guid: 0000000000000000e000000000000000, type: 0}
diff --git a/Assets/Sample/UIToolkit/UTKMenu.unity b/Assets/Sample/UIToolkit/UTKMenu.unity
new file mode 100644
index 00000000..c97d8d30
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKMenu.unity
@@ -0,0 +1,497 @@
+%YAML 1.1
+%TAG !u! tag:unity3d.com,2011:
+--- !u!29 &1
+OcclusionCullingSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 2
+ m_OcclusionBakeSettings:
+ smallestOccluder: 5
+ smallestHole: 0.25
+ backfaceThreshold: 100
+ m_SceneGUID: 00000000000000000000000000000000
+ m_OcclusionCullingData: {fileID: 0}
+--- !u!104 &2
+RenderSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 10
+ m_Fog: 0
+ m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
+ m_FogMode: 3
+ m_FogDensity: 0.01
+ m_LinearFogStart: 0
+ m_LinearFogEnd: 300
+ m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
+ m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
+ m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
+ m_AmbientIntensity: 1
+ m_AmbientMode: 0
+ m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
+ m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
+ m_HaloStrength: 0.5
+ m_FlareStrength: 1
+ m_FlareFadeSpeed: 3
+ m_HaloTexture: {fileID: 0}
+ m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
+ m_DefaultReflectionMode: 0
+ m_DefaultReflectionResolution: 128
+ m_ReflectionBounces: 1
+ m_ReflectionIntensity: 1
+ m_CustomReflection: {fileID: 0}
+ m_Sun: {fileID: 0}
+ m_UseRadianceAmbientProbe: 0
+--- !u!157 &3
+LightmapSettings:
+ m_ObjectHideFlags: 0
+ serializedVersion: 13
+ m_BakeOnSceneLoad: 0
+ m_GISettings:
+ serializedVersion: 2
+ m_BounceScale: 1
+ m_IndirectOutputScale: 1
+ m_AlbedoBoost: 1
+ m_EnvironmentLightingMode: 0
+ m_EnableBakedLightmaps: 1
+ m_EnableRealtimeLightmaps: 0
+ m_LightmapEditorSettings:
+ serializedVersion: 12
+ m_Resolution: 2
+ m_BakeResolution: 40
+ m_AtlasSize: 1024
+ m_AO: 0
+ m_AOMaxDistance: 1
+ m_CompAOExponent: 1
+ m_CompAOExponentDirect: 0
+ m_ExtractAmbientOcclusion: 0
+ m_Padding: 2
+ m_LightmapParameters: {fileID: 0}
+ m_LightmapsBakeMode: 1
+ m_TextureCompression: 1
+ m_ReflectionCompression: 2
+ m_MixedBakeMode: 2
+ m_BakeBackend: 1
+ m_PVRSampling: 1
+ m_PVRDirectSampleCount: 32
+ m_PVRSampleCount: 512
+ m_PVRBounces: 2
+ m_PVREnvironmentSampleCount: 256
+ m_PVREnvironmentReferencePointCount: 2048
+ m_PVRFilteringMode: 1
+ m_PVRDenoiserTypeDirect: 1
+ m_PVRDenoiserTypeIndirect: 1
+ m_PVRDenoiserTypeAO: 1
+ m_PVRFilterTypeDirect: 0
+ m_PVRFilterTypeIndirect: 0
+ m_PVRFilterTypeAO: 0
+ m_PVREnvironmentMIS: 1
+ m_PVRCulling: 1
+ m_PVRFilteringGaussRadiusDirect: 1
+ m_PVRFilteringGaussRadiusIndirect: 1
+ m_PVRFilteringGaussRadiusAO: 1
+ m_PVRFilteringAtrousPositionSigmaDirect: 0.5
+ m_PVRFilteringAtrousPositionSigmaIndirect: 2
+ m_PVRFilteringAtrousPositionSigmaAO: 1
+ m_ExportTrainingData: 0
+ m_TrainingDataDestination: TrainingData
+ m_LightProbeSampleCountMultiplier: 4
+ m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0}
+ m_LightingSettings: {fileID: 0}
+--- !u!196 &4
+NavMeshSettings:
+ serializedVersion: 2
+ m_ObjectHideFlags: 0
+ m_BuildSettings:
+ serializedVersion: 3
+ agentTypeID: 0
+ agentRadius: 0.5
+ agentHeight: 2
+ agentSlope: 45
+ agentClimb: 0.4
+ ledgeDropHeight: 0
+ maxJumpAcrossDistance: 0
+ minRegionArea: 2
+ manualCellSize: 0
+ cellSize: 0.16666667
+ manualTileSize: 0
+ tileSize: 256
+ buildHeightMesh: 0
+ maxJobWorkers: 0
+ preserveTilesOutsideBounds: 0
+ debug:
+ m_Flags: 0
+ m_NavMeshData: {fileID: 0}
+--- !u!1 &1097328750
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1097328752}
+ - component: {fileID: 1097328754}
+ - component: {fileID: 1097328755}
+ m_Layer: 0
+ m_Name: Sample
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!4 &1097328752
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!114 &1097328754
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 19102, guid: 0000000000000000e000000000000000, type: 0}
+ m_Name:
+ m_EditorClassIdentifier: UnityEngine.dll::UnityEngine.UIElements.UIDocument
+ m_PanelSettings: {fileID: 11400000, guid: 5ad7007b08a97b54d927c352279a18b6, type: 2}
+ m_ParentUI: {fileID: 0}
+ sourceAsset: {fileID: 9197481963319205126, guid: ea6c8ab095077eb4889ac1b615a0b324, type: 3}
+ m_SortingOrder: 1
+ m_Position: 0
+ m_WorldSpaceSizeMode: 1
+ m_WorldSpaceWidth: 1920
+ m_WorldSpaceHeight: 1080
+ m_PivotReferenceSize: 0
+ m_Pivot: 0
+ m_WorldSpaceCollider: {fileID: 0}
+--- !u!114 &1097328755
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1097328750}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: c2be721e7a021bf49b462c82e1f4892c, type: 3}
+ m_Name:
+ m_EditorClassIdentifier: Assembly-CSharp::UVC.Sample.UIToolkit.UTKMenuSample
+ _uiDocument: {fileID: 1097328754}
+ initialTheme: 0
+--- !u!1 &1331954412
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1331954415}
+ - component: {fileID: 1331954414}
+ - component: {fileID: 1331954413}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1331954413
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SendPointerHoverToParent: 1
+ m_MoveRepeatDelay: 0.5
+ m_MoveRepeatRate: 0.1
+ m_XRTrackingOrigin: {fileID: 0}
+ m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3}
+ m_DeselectOnBackgroundClick: 0
+ m_PointerBehavior: 0
+ m_CursorLockBehavior: 0
+ m_ScrollDeltaPerTick: 6
+--- !u!114 &1331954414
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!4 &1331954415
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1331954412}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1414861612
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1414861614}
+ - component: {fileID: 1414861613}
+ - component: {fileID: 1414861615}
+ m_Layer: 0
+ m_Name: Directional Light
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!108 &1414861613
+Light:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ serializedVersion: 11
+ m_Type: 1
+ m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
+ m_Intensity: 1
+ m_Range: 10
+ m_SpotAngle: 30
+ m_InnerSpotAngle: 21.80208
+ m_CookieSize: 10
+ m_Shadows:
+ m_Type: 2
+ m_Resolution: -1
+ m_CustomResolution: -1
+ m_Strength: 1
+ m_Bias: 0.05
+ m_NormalBias: 0.4
+ m_NearPlane: 0.2
+ m_CullingMatrixOverride:
+ e00: 1
+ e01: 0
+ e02: 0
+ e03: 0
+ e10: 0
+ e11: 1
+ e12: 0
+ e13: 0
+ e20: 0
+ e21: 0
+ e22: 1
+ e23: 0
+ e30: 0
+ e31: 0
+ e32: 0
+ e33: 1
+ m_UseCullingMatrixOverride: 0
+ m_Cookie: {fileID: 0}
+ m_DrawHalo: 0
+ m_Flare: {fileID: 0}
+ m_RenderMode: 0
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingLayerMask: 1
+ m_Lightmapping: 4
+ m_LightShadowCasterMode: 0
+ m_AreaSize: {x: 1, y: 1}
+ m_BounceIntensity: 1
+ m_ColorTemperature: 6570
+ m_UseColorTemperature: 0
+ m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
+ m_UseBoundingSphereOverride: 0
+ m_UseViewFrustumForShadowCasterCull: 1
+ m_ForceVisible: 0
+ m_ShadowRadius: 0
+ m_ShadowAngle: 0
+ m_LightUnit: 1
+ m_LuxAtDistance: 1
+ m_EnableSpotReflector: 1
+--- !u!4 &1414861614
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
+ m_LocalPosition: {x: 0, y: 3, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!114 &1414861615
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1414861612}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UsePipelineSettings: 1
+ m_AdditionalLightsShadowResolutionTier: 2
+ m_CustomShadowLayers: 0
+ m_LightCookieSize: {x: 1, y: 1}
+ m_LightCookieOffset: {x: 0, y: 0}
+ m_SoftShadowQuality: 0
+ m_RenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_ShadowRenderingLayersMask:
+ serializedVersion: 0
+ m_Bits: 1
+ m_Version: 4
+ m_LightLayerMask: 1
+ m_ShadowLayerMask: 1
+ m_RenderingLayers: 1
+ m_ShadowRenderingLayers: 1
+--- !u!1 &2136621999
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 2136622002}
+ - component: {fileID: 2136622001}
+ - component: {fileID: 2136622000}
+ m_Layer: 0
+ m_Name: Main Camera
+ m_TagString: MainCamera
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!81 &2136622000
+AudioListener:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+--- !u!20 &2136622001
+Camera:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ m_Enabled: 1
+ serializedVersion: 2
+ m_ClearFlags: 1
+ m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
+ m_projectionMatrixMode: 1
+ m_GateFitMode: 2
+ m_FOVAxisMode: 0
+ m_Iso: 200
+ m_ShutterSpeed: 0.005
+ m_Aperture: 16
+ m_FocusDistance: 10
+ m_FocalLength: 50
+ m_BladeCount: 5
+ m_Curvature: {x: 2, y: 11}
+ m_BarrelClipping: 0.25
+ m_Anamorphism: 0
+ m_SensorSize: {x: 36, y: 24}
+ m_LensShift: {x: 0, y: 0}
+ m_NormalizedViewPortRect:
+ serializedVersion: 2
+ x: 0
+ y: 0
+ width: 1
+ height: 1
+ near clip plane: 0.3
+ far clip plane: 1000
+ field of view: 60
+ orthographic: 0
+ orthographic size: 5
+ m_Depth: -1
+ m_CullingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+ m_RenderingPath: -1
+ m_TargetTexture: {fileID: 0}
+ m_TargetDisplay: 0
+ m_TargetEye: 3
+ m_HDR: 1
+ m_AllowMSAA: 1
+ m_AllowDynamicResolution: 0
+ m_ForceIntoRT: 0
+ m_OcclusionCulling: 1
+ m_StereoConvergence: 10
+ m_StereoSeparation: 0.022
+--- !u!4 &2136622002
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 2136621999}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 1, z: -10}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1660057539 &9223372036854775807
+SceneRoots:
+ m_ObjectHideFlags: 0
+ m_Roots:
+ - {fileID: 2136622002}
+ - {fileID: 1414861614}
+ - {fileID: 1331954415}
+ - {fileID: 1097328752}
diff --git a/Assets/Sample/UIToolkit/UTKMenu.unity.meta b/Assets/Sample/UIToolkit/UTKMenu.unity.meta
new file mode 100644
index 00000000..57ac2313
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKMenu.unity.meta
@@ -0,0 +1,7 @@
+fileFormatVersion: 2
+guid: 78506514708184a4893eba450c0b865a
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Sample/UIToolkit/UTKMenuSample.cs b/Assets/Sample/UIToolkit/UTKMenuSample.cs
new file mode 100644
index 00000000..244ad4b8
--- /dev/null
+++ b/Assets/Sample/UIToolkit/UTKMenuSample.cs
@@ -0,0 +1,681 @@
+#nullable enable
+using System;
+using Cysharp.Threading.Tasks;
+using UnityEngine;
+using UnityEngine.UIElements;
+using UVC.UIToolkit;
+using UVC.UI.Commands;
+using UVC.Log;
+
+namespace UVC.Sample.UIToolkit
+{
+ ///
+ /// UTKMenu 샘플 코드
+ /// UIToolkit 기반 TopMenu 시스템을 테스트합니다.
+ ///
+ public class UTKMenuSample : MonoBehaviour
+ {
+ [SerializeField] private UIDocument? _uiDocument;
+
+ [SerializeField]
+ [Tooltip("시작 시 적용할 테마")]
+ private UTKTheme initialTheme = UTKTheme.Dark;
+
+ private UTKToggle? _themeToggle;
+ private VisualElement? _root;
+ private UTKTopMenu? _menuView;
+ private UTKTopMenuModel? _menuModel;
+
+ private UTKTopMenu? _menuView2;
+ private UTKTopMenuModel? _menuModel2;
+
+ private UTKTopMenu? _menuView3;
+ private UTKTopMenuModel? _menuModel3;
+
+ // 상태 관리용
+ private bool _canUndo = false;
+ private bool _canRedo = false;
+ private bool _isFileOpen = false;
+
+
+ private void Start()
+ {
+ // UIDocument 참조 확인
+ var doc = GetComponent();
+ if (doc == null)
+ {
+ Debug.LogError("UIDocument가 할당되지 않았습니다.");
+ return;
+ }
+ _uiDocument = doc;
+
+ var toggle = _uiDocument.rootVisualElement.Q("toggle");
+ if (toggle == null)
+ {
+ Debug.LogError("UXML에서 UTKToggle을 찾을 수 없습니다.");
+ return;
+ }
+ _themeToggle = toggle;
+
+ UTKThemeManager.Instance.RegisterRoot(_uiDocument.rootVisualElement);
+ UTKThemeManager.Instance.SetTheme(initialTheme);
+
+ _themeToggle.OnValueChanged += (isOn) =>
+ {
+ UTKThemeManager.Instance.SetTheme(!isOn ? UTKTheme.Dark : UTKTheme.Light);
+ };
+
+ _root = _uiDocument.rootVisualElement;
+ CreateSampleUI();
+ }
+
+ private void CreateSampleUI()
+ {
+ if (_root == null) return;
+
+ // 1. UTKTopMenuView 생성
+ _menuView = new UTKTopMenu();
+ _menuView.style.position = Position.Absolute;
+ _menuView.style.top = 0;
+ _menuView.style.left = 50;
+
+ _menuView2 = new UTKTopMenu();
+ _menuView2.style.position = Position.Absolute;
+ _menuView2.style.top = 0;
+ _menuView2.style.left = 0;
+ _menuView2.SubMenuOffsetX = 30;
+ _root.Add(_menuView2);
+ _root.Add(_menuView);
+
+ // 세로 정렬 메뉴 (Vertical Orientation + ItemSpacing)
+ _menuView3 = new UTKTopMenu();
+ _menuView3.Orientation = UTKMenuOrientation.Vertical;
+ _menuView3.ItemSpacing = 4f;
+ _menuView3.SubMenuOffsetX = -10f;
+ _menuView3.SubMenuOffsetY = 4f;
+ _menuView3.style.position = Position.Absolute;
+ _menuView3.style.top = 50;
+ _menuView3.style.left = 0;
+ _menuView3.style.width = 120;
+ _root.Add(_menuView3);
+
+ // 2. UTKTopMenuModel 생성 및 메뉴 아이템 추가
+ _menuModel = new UTKTopMenuModel();
+ _menuModel2 = new UTKTopMenuModel();
+ _menuModel3 = new UTKTopMenuModel();
+
+ CreateMenuItems();
+
+ // 3. View에 메뉴 생성
+ if (_menuView.MenuContainer != null)
+ {
+ _menuView.CreateMenuItems(_menuModel.MenuItems, _menuView.MenuContainer);
+ }
+
+ if (_menuView2.MenuContainer != null)
+ {
+ _menuView2.CreateMenuItems(_menuModel2.MenuItems, _menuView2.MenuContainer);
+ }
+
+ if (_menuView3.MenuContainer != null)
+ {
+ _menuView3.CreateMenuItems(_menuModel3.MenuItems, _menuView3.MenuContainer);
+ }
+
+ // 4. 이벤트 구독
+ _menuView.OnMenuItemClicked += HandleMenuItemClicked;
+ _menuView2.OnMenuItemClicked += HandleMenuItemClicked2;
+ _menuView3.OnMenuItemClicked += HandleMenuItemClicked3;
+
+ // 5. 상태 테스트 버튼 생성
+ CreateTestButtons();
+
+ ULog.Debug("UTKTopMenu 샘플 UI 생성 완료");
+ }
+
+ ///
+ /// 메뉴 아이템들을 생성합니다.
+ ///
+ private void CreateMenuItems()
+ {
+ if (_menuModel == null || _menuModel2 == null || _menuModel3 == null) return;
+
+ // 파일 메뉴
+ var fileMenu = new UTKMenuItemData("file", "파일");
+ fileMenu.AddSubMenuItem(new UTKMenuItemData(
+ "file_new",
+ "새 파일",
+ new DebugLogCommand("새 파일 생성"),
+ shortcut: "Ctrl+N"
+ ));
+ fileMenu.AddSubMenuItem(new UTKMenuItemData(
+ "file_open",
+ "열기",
+ new DebugLogCommand("파일 열기"),
+ shortcut: "Ctrl+O"
+ ));
+ fileMenu.AddSubMenuItem(UTKMenuItemData.CreateSeparator());
+ fileMenu.AddSubMenuItem(new UTKMenuItemData(
+ "file_save",
+ "저장",
+ new DebugLogCommand("파일 저장"),
+ isEnabled: false, // 초기에는 비활성화
+ shortcut: "Ctrl+S"
+ ));
+ fileMenu.AddSubMenuItem(new UTKMenuItemData(
+ "file_save_as",
+ "다른 이름으로 저장",
+ new DebugLogCommand("다른 이름으로 저장"),
+ isEnabled: false,
+ shortcut: "Ctrl+Shift+S"
+ ));
+ fileMenu.AddSubMenuItem(UTKMenuItemData.CreateSeparator());
+ fileMenu.AddSubMenuItem(new UTKMenuItemData(
+ "file_exit",
+ "종료",
+ new DebugLogCommand("애플리케이션 종료"),
+ shortcut: "Alt+F4"
+ ));
+ _menuModel.AddMenuItem(fileMenu);
+
+ // 편집 메뉴
+ var editMenu = new UTKMenuItemData("edit", "편집");
+ editMenu.AddSubMenuItem(new UTKMenuItemData(
+ "edit_undo",
+ "실행 취소",
+ new DebugLogCommand("실행 취소"),
+ isEnabled: false,
+ shortcut: "Ctrl+Z"
+ ));
+ editMenu.AddSubMenuItem(new UTKMenuItemData(
+ "edit_redo",
+ "다시 실행",
+ new DebugLogCommand("다시 실행"),
+ isEnabled: false,
+ shortcut: "Ctrl+Y"
+ ));
+ editMenu.AddSubMenuItem(UTKMenuItemData.CreateSeparator());
+ editMenu.AddSubMenuItem(new UTKMenuItemData(
+ "edit_cut",
+ "잘라내기",
+ new DebugLogCommand("잘라내기"),
+ shortcut: "Ctrl+X"
+ ));
+ editMenu.AddSubMenuItem(new UTKMenuItemData(
+ "edit_copy",
+ "복사",
+ new DebugLogCommand("복사"),
+ shortcut: "Ctrl+C"
+ ));
+ editMenu.AddSubMenuItem(new UTKMenuItemData(
+ "edit_paste",
+ "붙여넣기",
+ new DebugLogCommand("붙여넣기"),
+ shortcut: "Ctrl+V"
+ ));
+ _menuModel.AddMenuItem(editMenu);
+
+ // 보기 메뉴 (하위 메뉴 테스트)
+ var viewMenu = new UTKMenuItemData("view", "보기");
+
+ var layoutMenu = new UTKMenuItemData("view_layout", "레이아웃");
+ layoutMenu.AddSubMenuItem(new UTKMenuItemData("view_layout_default", "기본", new DebugLogCommand("기본 레이아웃")));
+ layoutMenu.AddSubMenuItem(new UTKMenuItemData("view_layout_wide", "와이드", new DebugLogCommand("와이드 레이아웃")));
+ layoutMenu.AddSubMenuItem(new UTKMenuItemData("view_layout_compact", "컴팩트", new DebugLogCommand("컴팩트 레이아웃")));
+
+ viewMenu.AddSubMenuItem(layoutMenu);
+ viewMenu.AddSubMenuItem(UTKMenuItemData.CreateSeparator());
+ viewMenu.AddSubMenuItem(new UTKMenuItemData("view_fullscreen", "전체 화면", new DebugLogCommand("전체 화면 전환"), shortcut: "F11"));
+ _menuModel.AddMenuItem(viewMenu);
+
+ // 도구 메뉴
+ var toolsMenu = new UTKMenuItemData("tools", "도구");
+ toolsMenu.AddSubMenuItem(new UTKMenuItemData("tools_options", "옵션", new DebugLogCommand("옵션 열기")));
+ toolsMenu.AddSubMenuItem(new UTKMenuItemData("tools_settings", "설정", new DebugLogCommand("설정 열기")));
+ _menuModel.AddMenuItem(toolsMenu);
+
+ // 도움말 메뉴
+ var helpMenu = new UTKMenuItemData("help", "도움말");
+ helpMenu.AddSubMenuItem(new UTKMenuItemData("help_documentation", "문서", new DebugLogCommand("문서 열기"), shortcut: "F1"));
+ helpMenu.AddSubMenuItem(UTKMenuItemData.CreateSeparator());
+ helpMenu.AddSubMenuItem(new UTKMenuItemData("help_about", "정보", new DebugLogCommand("정보 표시")));
+ _menuModel.AddMenuItem(helpMenu);
+
+ // 이미지 메뉴 (4 depth 테스트)
+ var imageMenu = new UTKMenuImageItemData(
+ "image_menu",
+ UTKMaterialIcons.Settings, // Material Icon 사용
+ useMaterialIcon: true,
+ imageSize: 24f
+ );
+
+ // Depth 1 아이템
+ var depth1Item = new UTKMenuItemData("depth1", "레벨 1 메뉴");
+ var depth1Item1 = new UTKMenuItemData("depth11", "레벨 1 1메뉴");
+ var depth1Item2 = new UTKMenuItemData("depth12", "레벨 1 2메뉴");
+ var depth1Item3 = new UTKMenuItemData("depth13", "레벨 1 3메뉴");
+
+ // Depth 2 아이템
+ var depth2Item = new UTKMenuItemData("depth2", "레벨 2 메뉴");
+ var depth2Item1 = new UTKMenuItemData("depth21", "레벨 2 1 메뉴");
+ var depth2Item2 = new UTKMenuItemData("depth22", "레벨 2 2 메뉴");
+ var depth2Item3 = new UTKMenuItemData("depth23", "레벨 2 3 메뉴");
+
+ // Depth 3 아이템
+ var depth3Item = new UTKMenuItemData("depth3", "레벨 3 메뉴");
+
+ // Depth 4 아이템들 (실제 액션)
+ var depth4Action1 = new UTKMenuItemData("depth4_action1", "액션 1", new DebugLogCommand("4 Depth 액션 1 실행"));
+ var depth4Action2 = new UTKMenuItemData("depth4_action2", "액션 2", new DebugLogCommand("4 Depth 액션 2 실행"));
+ var depth4Action3 = new UTKMenuItemData("depth4_action3", "액션 3", new DebugLogCommand("4 Depth 액션 3 실행"));
+
+ // 계층 구조 구성 (역순으로)
+ depth3Item.AddSubMenuItem(depth4Action1);
+ depth3Item.AddSubMenuItem(depth4Action2);
+ depth3Item.AddSubMenuItem(depth4Action3);
+ depth2Item.AddSubMenuItem(depth3Item);
+ depth1Item.AddSubMenuItem(depth2Item);
+ depth1Item.AddSubMenuItem(depth2Item1);
+ depth1Item.AddSubMenuItem(depth2Item2);
+ depth1Item.AddSubMenuItem(depth2Item3);
+ imageMenu.AddSubMenuItem(depth1Item1);
+ imageMenu.AddSubMenuItem(depth1Item2);
+ imageMenu.AddSubMenuItem(depth1Item3);
+ imageMenu.AddSubMenuItem(depth1Item);
+
+ _menuModel2.AddMenuItem(imageMenu);
+
+ // === 세로 메뉴 (menuView3) ===
+ var vertFileMenu = new UTKMenuItemData("v_file", "파일");
+ vertFileMenu.AddSubMenuItem(new UTKMenuItemData("v_file_new", "새 파일", new DebugLogCommand("세로 메뉴: 새 파일"), shortcut: "Ctrl+N"));
+ vertFileMenu.AddSubMenuItem(new UTKMenuItemData("v_file_open", "열기", new DebugLogCommand("세로 메뉴: 열기"), shortcut: "Ctrl+O"));
+ vertFileMenu.AddSubMenuItem(UTKMenuItemData.CreateSeparator());
+ vertFileMenu.AddSubMenuItem(new UTKMenuItemData("v_file_save", "저장", new DebugLogCommand("세로 메뉴: 저장"), shortcut: "Ctrl+S"));
+ _menuModel3.AddMenuItem(vertFileMenu);
+
+ var vertEditMenu = new UTKMenuItemData("v_edit", "편집");
+ vertEditMenu.AddSubMenuItem(new UTKMenuItemData("v_edit_undo", "실행 취소", new DebugLogCommand("세로 메뉴: 실행 취소"), shortcut: "Ctrl+Z"));
+ vertEditMenu.AddSubMenuItem(new UTKMenuItemData("v_edit_redo", "다시 실행", new DebugLogCommand("세로 메뉴: 다시 실행"), shortcut: "Ctrl+Y"));
+ _menuModel3.AddMenuItem(vertEditMenu);
+
+ var vertViewMenu = new UTKMenuItemData("v_view", "보기");
+ vertViewMenu.AddSubMenuItem(new UTKMenuItemData("v_view_fullscreen", "전체 화면", new DebugLogCommand("세로 메뉴: 전체 화면"), shortcut: "F11"));
+ _menuModel3.AddMenuItem(vertViewMenu);
+
+ var vertHelpMenu = new UTKMenuItemData("v_help", "도움말");
+ vertHelpMenu.AddSubMenuItem(new UTKMenuItemData("v_help_about", "정보", new DebugLogCommand("세로 메뉴: 정보")));
+ _menuModel3.AddMenuItem(vertHelpMenu);
+
+ ULog.Debug($"메뉴 아이템 생성 완료: {_menuModel.MenuItems.Count}개 최상위 메뉴, 세로 메뉴: {_menuModel3.MenuItems.Count}개");
+ }
+
+ ///
+ /// 테스트 버튼들을 생성합니다.
+ ///
+ private void CreateTestButtons()
+ {
+ if (_root == null) return;
+
+ // 테스트 버튼 컨테이너
+ var buttonContainer = new VisualElement();
+ buttonContainer.style.position = Position.Absolute;
+ buttonContainer.style.top = 60;
+ buttonContainer.style.left = 300;
+ buttonContainer.style.flexDirection = FlexDirection.Column;
+ buttonContainer.style.width = 250;
+ _root.Insert(0, buttonContainer);
+
+ // 타이틀
+ var title = new Label("메뉴 상태 테스트");
+ title.style.fontSize = 16;
+ title.style.unityFontStyleAndWeight = FontStyle.Bold;
+ title.style.marginBottom = 10;
+ buttonContainer.Add(title);
+
+ // 파일 열기/닫기 버튼
+ var fileToggleBtn = new Button(() => ToggleFileOpen())
+ {
+ text = "파일 열기 (Save 활성화)"
+ };
+ fileToggleBtn.style.marginBottom = 5;
+ buttonContainer.Add(fileToggleBtn);
+
+ // Undo/Redo 토글 버튼
+ var undoToggleBtn = new Button(() => ToggleUndoRedo())
+ {
+ text = "Undo/Redo 활성화"
+ };
+ undoToggleBtn.style.marginBottom = 5;
+ buttonContainer.Add(undoToggleBtn);
+
+ // 모든 하위 메뉴 닫기
+ var closeAllBtn = new Button(() => _menuView?.CloseAllOpenSubMenus())
+ {
+ text = "모든 하위 메뉴 닫기"
+ };
+ closeAllBtn.style.marginBottom = 5;
+ buttonContainer.Add(closeAllBtn);
+
+ // 메뉴 아이템 추가
+ var addMenuBtn = new Button(() => AddDynamicMenu())
+ {
+ text = "동적 메뉴 추가"
+ };
+ addMenuBtn.style.marginBottom = 5;
+ buttonContainer.Add(addMenuBtn);
+
+ // 메뉴 아이템 제거
+ var removeMenuBtn = new Button(() => RemoveDynamicMenu())
+ {
+ text = "동적 메뉴 제거"
+ };
+ removeMenuBtn.style.marginBottom = 5;
+ buttonContainer.Add(removeMenuBtn);
+
+ // 단축키 변경
+ var changeShortcutBtn = new Button(() => ChangeShortcut())
+ {
+ text = "Save 단축키 변경"
+ };
+ changeShortcutBtn.style.marginBottom = 5;
+ buttonContainer.Add(changeShortcutBtn);
+
+ // ExecuteCommand 테스트
+ var executeCommandBtn = new Button(() => TestExecuteCommand())
+ {
+ text = "ExecuteCommand 테스트"
+ };
+ executeCommandBtn.style.marginBottom = 5;
+ buttonContainer.Add(executeCommandBtn);
+
+ // TryGetMenuItemData 테스트
+ var getDataBtn = new Button(() => TestTryGetMenuItemData())
+ {
+ text = "TryGetMenuItemData 테스트"
+ };
+ getDataBtn.style.marginBottom = 5;
+ buttonContainer.Add(getDataBtn);
+
+ // 상태 표시 레이블
+ var statusLabel = new Label();
+ statusLabel.style.marginTop = 20;
+ statusLabel.style.fontSize = 12;
+ statusLabel.style.color = new Color(0.7f, 0.7f, 0.7f);
+ buttonContainer.Add(statusLabel);
+
+ UpdateStatusLabel(statusLabel);
+ }
+
+ ///
+ /// 파일 열기/닫기 상태를 토글합니다.
+ ///
+ private void ToggleFileOpen()
+ {
+ _isFileOpen = !_isFileOpen;
+
+ var saveItem = _menuModel?.FindMenuItem("file_save");
+ var saveAsItem = _menuModel?.FindMenuItem("file_save_as");
+
+ if (saveItem != null)
+ {
+ saveItem.IsEnabled = _isFileOpen;
+ if (_menuView != null && _menuView.TryGetMenuItemElement("file_save", out var element))
+ {
+ var button = element.Q