# Popup System Samples

## Contents

### Prefabs

Reference prefabs for the popup system. Copy these into your project as a starting point. After copying, add entries to your `PopupSettings` asset's Element Prefabs list mapping `PopupElementType` values to these prefabs.

| Prefab | PopupElementType | Description |
|---|---|---|
| `PopupReferencePrefab` | N/A | Main popup container with Canvas, CanvasGroup, Background, and Content |
| `PopupHeader` | `Header` ("header") | Header text element (TMP_Text, bold, larger font) |
| `PopupText` | `Text` ("text") | Body text element (TMP_Text, regular) |
| `PopupStat` | `LabelValueText` ("label_value_text") | Label + value row (HorizontalLayoutGroup with two TMP_Text children) |
| `PopupIcon` | `Image` ("image") | Image element for icons or artwork |
| `PopupSeparator` | `Separator` ("separator") | Horizontal divider line (Image, thin) |

To add variants, duplicate a prefab, style it differently, and register it with a variant type. Use `PopupElementType.Header.Variant("gold")` in code, and set the type to "header_gold" in the PopupSettings Inspector.

### Settings

| Asset | Description |
|---|---|
| `PopupSettings` | Pre-configured PopupSettings ScriptableObject with sensible defaults |

### Scripts

| Script | Description |
|---|---|
| `PopupSystemExample` | Basic setup with auto-scanned triggers, `GetTriggerHandler` by name, and `GetTriggerHandlers` by category |
| `DynamicTriggersExample` | Setting up triggers on dynamically instantiated UI using `InitializeTriggersInChildren` with (trigger, view) callback |
| `CodeOnlyPopupExample` | Showing popups from code (anchored, fixed position, follow mouse), `PopupElementType` variants, and generic `Add()` for custom types |

### Architecture Overview

```
PopupTrigger (MonoBehaviour)     -- reference holder, forwards pointer events
    |
PopupTriggerView (C# class)     -- behavior: calls IPopupSystem.Show/Hide
    |
IPopupSystem / PopupSystem       -- manages categories, delays, priority, triggers
    |
PopupView (C# class)             -- behavior: generic element cache, positioning
    |
PopupReference (MonoBehaviour)   -- reference holder: content, canvasGroup, background
    |
PopupSettings (ScriptableObject) -- configuration + element prefab registry (PopupElementType -> prefab)
    |
PopupElementType (struct)        -- type-safe element identifier (Header, Text, LabelValueText, Image, Separator + custom)
```

## How to use

1. Import the samples via the Unity Package Manager (select the package, expand Samples, click Import)
2. Copy the prefabs into your project's Prefabs folder
3. Create a PopupSettings asset or use the provided one
4. Add Element Prefab entries to PopupSettings using the dropdown (Header, Text, LabelValueText, Image, Separator) mapped to the copied prefabs
5. Reference the example scripts for integration patterns
