Skip to content

Commit d1e8b06

Browse files
Merge pull request #25 from MapColonies/feature/MAPCO-9822-Yahalom-Input-Field
feat: Yahalom input field (MAPCO-9822)
2 parents ab97036 + a7796d0 commit d1e8b06

File tree

16 files changed

+1423
-0
lines changed

16 files changed

+1423
-0
lines changed

Assets/YahalomUIPackage/Editor/YahalomInputField.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
using TMPro.EditorUtilities;
2+
using UnityEditor;
3+
4+
namespace YahalomUIPackage.Editor.YahalomInputField
5+
{
6+
[CustomEditor(typeof(Runtime.YahalomInputField.YahalomInputField))]
7+
[CanEditMultipleObjects]
8+
public class YahalomInputFieldEditor : TMP_InputFieldEditor
9+
{
10+
private SerializedProperty _closeButton;
11+
private SerializedProperty _normalTextColor;
12+
private SerializedProperty _highlightedTextColor;
13+
private SerializedProperty _pressedTextColor;
14+
private SerializedProperty _selectedTextColor;
15+
private SerializedProperty _disabledTextColor;
16+
17+
private SerializedProperty _errorTextColor;
18+
private SerializedProperty _errorImageColor;
19+
20+
protected override void OnEnable()
21+
{
22+
base.OnEnable();
23+
24+
_closeButton = serializedObject.FindProperty("_closeButton");
25+
_normalTextColor = serializedObject.FindProperty("_normalTextColor");
26+
_highlightedTextColor = serializedObject.FindProperty("_highlightedTextColor");
27+
_pressedTextColor = serializedObject.FindProperty("_pressedTextColor");
28+
_selectedTextColor = serializedObject.FindProperty("_selectedTextColor");
29+
_disabledTextColor = serializedObject.FindProperty("_disabledTextColor");
30+
_errorTextColor = serializedObject.FindProperty("_errorTextColor");
31+
_errorImageColor = serializedObject.FindProperty("_errorImageColor");
32+
}
33+
34+
public override void OnInspectorGUI()
35+
{
36+
serializedObject.Update();
37+
38+
base.OnInspectorGUI();
39+
40+
EditorGUILayout.Space(10);
41+
EditorGUILayout.PropertyField(_closeButton);
42+
EditorGUILayout.LabelField("Image Colors", EditorStyles.boldLabel);
43+
EditorGUI.indentLevel++;
44+
EditorGUILayout.PropertyField(_errorImageColor);
45+
EditorGUI.indentLevel--;
46+
EditorGUILayout.Space(5);
47+
EditorGUILayout.LabelField("Text Colors", EditorStyles.boldLabel);
48+
EditorGUI.indentLevel++;
49+
EditorGUILayout.PropertyField(_normalTextColor);
50+
EditorGUILayout.PropertyField(_highlightedTextColor);
51+
EditorGUILayout.PropertyField(_pressedTextColor);
52+
EditorGUILayout.PropertyField(_selectedTextColor);
53+
EditorGUILayout.PropertyField(_disabledTextColor);
54+
EditorGUILayout.PropertyField(_errorTextColor);
55+
EditorGUI.indentLevel--;
56+
57+
serializedObject.ApplyModifiedProperties();
58+
}
59+
}
60+
}

Assets/YahalomUIPackage/Editor/YahalomInputField/YahalomInputFieldEditor.cs.meta

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/YahalomUIPackage/README.md

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ A custom Unity UI component library for MapColonies projects with built-in Hebre
1212
- [Package Structure](#package-structure)
1313
- [UI Components](#ui-components)
1414
- [YahalomButton](#yahalombutton)
15+
- [YahalomInputField](#yahalominputfield)
1516
- [Compass](#compass)
1617
- [Fonts](#fonts)
1718
- [Testing](#testing)
@@ -47,11 +48,15 @@ YahalomUIPackage/
4748
├── Runtime/
4849
│ ├── YahalomButton/
4950
│ │ └── YahalomButton.cs # Button component script
51+
│ ├── YahalomInputField/
52+
│ │ └── YahalomInputField.cs # Input field component script
5053
│ ├── Compass/
5154
│ │ └── Compass.cs # Compass component script
5255
│ └── Resources/
5356
│ ├── YahalomButton/
5457
│ │ └── YahalomButton.prefab # Button prefab
58+
│ ├── YahalomInputField/
59+
│ │ └── YahalomInputField.prefab # Input field prefab
5560
│ └── Compass/
5661
│ └── Compass.prefab # Compass prefab
5762
├── Editor/
@@ -123,6 +128,79 @@ YahalomButton (Button, Image, HorizontalLayoutGroup)
123128

124129
---
125130

131+
### YahalomInputField
132+
133+
A customizable input field component with state-based color transitions, error validation support, and a clear button.
134+
135+
**Location:** `Runtime/YahalomInputField/YahalomInputField.cs`
136+
**Prefab:** `Runtime/Resources/YahalomInputField/YahalomInputField.prefab`
137+
138+
#### Features
139+
140+
- Extends Unity's `TMP_InputField` class
141+
- State-based text and placeholder color transitions
142+
- Built-in error state with custom validation predicate
143+
- Clear/close button to reset input content
144+
- RTL text support via TextMeshPro
145+
146+
#### Input States
147+
148+
| State | Description |
149+
|-------|-------------|
150+
| Normal | Default appearance |
151+
| Highlighted | Hover/focus state |
152+
| Pressed | Click/tap state |
153+
| Selected | Active/selected state with content |
154+
| Disabled | Inactive state |
155+
| Error | Validation failed state |
156+
157+
#### Usage
158+
159+
**Adding to Scene:**
160+
161+
1. **Via Prefab:** Drag `YahalomInputField.prefab` from `Runtime/Resources/YahalomInputField/` into your Canvas
162+
2. **Via Code:**
163+
```csharp
164+
var inputPrefab = Resources.Load<GameObject>("YahalomInputField/YahalomInputField");
165+
var inputField = Instantiate(inputPrefab, parentCanvas.transform);
166+
```
167+
168+
**Setting Up Error Validation:**
169+
170+
```csharp
171+
using YahalomUIPackage.Runtime.YahalomInputField;
172+
173+
// Get reference to input field component
174+
YahalomInputField inputField = GetComponent<YahalomInputField>();
175+
176+
// Set custom error validation (e.g., minimum length)
177+
inputField.SetErrorPredicate(value => value.Length < 3);
178+
179+
// Or validate email format
180+
inputField.SetErrorPredicate(value => !value.Contains("@"));
181+
```
182+
183+
#### Public API
184+
185+
| Method | Parameters | Description |
186+
|--------|------------|-------------|
187+
| `SetErrorPredicate(Func<string, bool>)` | `predicate`: validation function | Sets the error validation function. Returns true if input is invalid. |
188+
189+
#### Inspector Properties
190+
191+
| Property | Description |
192+
|----------|-------------|
193+
| Close Button | Reference to the clear/delete button |
194+
| Normal Text Color | Text color in default state |
195+
| Highlighted Text Color | Text color when focused/hovered |
196+
| Pressed Text Color | Text color when pressed |
197+
| Selected Text Color | Text color when selected with content |
198+
| Disabled Text Color | Text color when disabled |
199+
| Error Text Color | Text color in error state |
200+
| Error Image Color | Background color in error state |
201+
202+
---
203+
126204
### Compass
127205

128206
A navigation compass component displaying heading direction, angle, and geographic coordinates.
@@ -225,6 +303,35 @@ These fonts are pre-configured as TextMesh Pro SDF assets for high-quality text
225303
- Observe text and icon color changes between states
226304
- Adjust fade duration to test transition smoothness
227305

306+
### Testing YahalomInputField
307+
308+
1. Create a Canvas in your scene
309+
2. Drag the `YahalomInputField.prefab` into the Canvas
310+
3. Enter Play Mode
311+
4. Interact with the input field to verify:
312+
- Focus state (click on input)
313+
- Text input and color changes
314+
- Clear button functionality (click X to clear text)
315+
- Disabled state (disable via Inspector)
316+
317+
**Testing Error Validation:**
318+
319+
```csharp
320+
using UnityEngine;
321+
using YahalomUIPackage.Runtime.YahalomInputField;
322+
323+
public class InputFieldTester : MonoBehaviour
324+
{
325+
public YahalomInputField inputField;
326+
327+
void Start()
328+
{
329+
// Set validation: error if less than 3 characters
330+
inputField.SetErrorPredicate(value => value.Length > 0 && value.Length < 3);
331+
}
332+
}
333+
```
334+
228335
### Testing Compass
229336

230337
1. Create a Canvas in your scene
@@ -299,6 +406,32 @@ public class YahalomButton : Button
299406
}
300407
```
301408

409+
### YahalomInputField
410+
411+
**Namespace:** `YahalomUIPackage.Runtime.YahalomInputField`
412+
413+
```csharp
414+
public class YahalomInputField : TMP_InputField
415+
{
416+
// Public Methods
417+
public void SetErrorPredicate(Func<string, bool> predicate);
418+
419+
// Serialized Fields (configurable in Inspector)
420+
[SerializeField] private Button _closeButton;
421+
422+
// Text color states
423+
[SerializeField] private Color _normalTextColor;
424+
[SerializeField] private Color _highlightedTextColor;
425+
[SerializeField] private Color _pressedTextColor;
426+
[SerializeField] private Color _selectedTextColor;
427+
[SerializeField] private Color _disabledTextColor;
428+
[SerializeField] private Color _errorTextColor;
429+
430+
// Image color states
431+
[SerializeField] private Color _errorImageColor;
432+
}
433+
```
434+
302435
### Compass
303436

304437
**Namespace:** `YahalomUIPackage.Runtime.Compass`

Assets/YahalomUIPackage/Runtime/Resources/YahalomInputField.meta

Lines changed: 8 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)