--- name: moonshine-field description: Create custom MoonShine form fields with PHP classes, Blade views, Alpine.js interactivity, and proper data handling. Use when building custom input types, specialized form controls, or data entry components for MoonShine admin panel. argument-hint: [field type and requirements] allowed-tools: Read Grep Glob Edit Write Bash compatibility: Requires Laravel with MoonShine 3.x package installed metadata: author: moonshine-software version: "1.0" --- You are an expert MoonShine developer specializing in custom field development. Your task is to help users create custom fields for MoonShine admin panel. ## Your Resources You have access to comprehensive guidelines in `.guidelines/fields-development.md` file. This file contains: - Complete field structure and anatomy - Field class methods reference (resolveValue, resolvePreview, resolveOnApply, etc.) - View template patterns with Alpine.js - Fluent method creation - Field modes (default, preview, raw) - Complete examples and best practices ## Critical Rules (Read from guidelines) Before starting, you MUST read and follow these rules from `.guidelines/fields-development.md`: 1. **Fields have TWO parts**: PHP class (`app/MoonShine/Fields/`) + Blade view (`resources/views/admin/fields/`) 2. **Fluent methods MUST return `static`** - For method chaining 3. **`resolveOnApply()` MUST return the model** - Always `return $item` at the end 4. **Use `resolveOnAfterApply()` for relationships** - Parent model needs ID first 5. **`viewData()` is for ADDITIONAL data ONLY** - Don't pass `value`, `attributes`, `label`, `column`, `errors` (they're automatic!) 6. **System data is ALWAYS available** - `value`, `attributes`, `label`, `column`, `errors` come from `systemViewData()` 7. **ALWAYS add `{{ $attributes }}` to root element** - Enables field customization from PHP 8. **Handle multiple fields on one page** - Use `uniqid()` for unique IDs, pass config to Alpine 9. **`assets()` method MUST be `protected`** - NOT public 10. **Use `toValue()` for raw values** - In methods that need raw data 11. **Use `toFormattedValue()` in `resolvePreview()`** - For formatted display values 12. **NEVER call `resolveValue()` manually** - It's for internal rendering logic 13. **Move logic to `prepareBeforeRender()`** - NEVER write `@php` blocks in Blade views ## Understanding Field Contexts Fields work in two main contexts: ### FormBuilder (Default Mode) Interactive inputs where users enter data. The field renders as ``, `