Skip to content

arqel-dev/fields — Referencia de API

Namespace Arqel\Fields\. 21 tipos canónicos de Field + ValidationBridge + registry de macros.

Arqel\Fields\Field (abstract)

Base de cada Field. __construct es final por diseño — las subclases solo declaran protected string $type y protected string $component.

Setters fluidos (vía traits)

TraitSetters
baselabel, placeholder, helperText, default, readonly, disabled, columnSpan, columnSpanFull, dehydrated, live, liveDebounced, afterStateUpdated
HasValidationrequired, nullable, rules, rule, unique, maxLength, minLength, requiredIf, requiredWith, requiredWithout, validationAttribute, validationMessage
HasVisibilityhidden, hiddenOnCreate, hiddenOnEdit, hiddenOnDetail, hiddenOnTable, visibleOn(string|array), hiddenOn(string|array), visibleIf(Closure), hiddenIf(Closure)
HasDependenciesdependsOn(string|array), resolveOptionsUsing(Closure)
HasAuthorizationcanSee(Closure), canEdit(Closure)

Oráculos

php
isVisibleIn(string $context, ?Model $record = null): bool   // create|edit|detail|table
canBeSeenBy(?Authenticatable $user, ?Model $record = null): bool
canBeEditedBy(?Authenticatable $user, ?Model $record = null): bool
isDisabled(?Model $record = null): bool
isDehydrated(?Model $record = null): bool
getValidationRules(): array
handleDependencyUpdate(array $formState, string $changedField): array

Arqel\Fields\FieldFactory (final)

Factory pública. No llames new TextField('name') — usa FieldFactory::text('name') (alias común: use Arqel\Fields\FieldFactory as Field;).

MétodoRetorna
Field::text/textarea/email/url/password/slug(name)TextField/TextareaField/...
Field::number/currency(name)NumberField/CurrencyField
Field::boolean/toggle(name)BooleanField/ToggleField
Field::select/multiSelect/radio(name)SelectField/MultiSelectField/RadioField
Field::belongsTo(name, Resource)BelongsToField
Field::hasMany(name, Resource)HasManyField
Field::date/dateTime(name)DateField/DateTimeField
Field::file/image(name)FileField/ImageField
Field::color/hidden(name)ColorField/HiddenField
Field::macro(name, Closure) / Field::hasMacro(name)registry de macros
Field::register(type, class)registry de tipos personalizados

Tipos de Field — props específicas

ClaseSetters extra
TextFieldmaxLength, minLength, pattern, autocomplete, mask
TextareaFieldrows, cols
EmailField(regla por defecto email)
UrlField(regla por defecto url)
PasswordFieldrevealable
SlugFieldfromField, separator, reservedSlugs, uniqueIn
NumberFieldmin, max, step, integer, decimals
CurrencyFieldprefix, suffix, thousandsSeparator, decimalSeparator, decimals
BooleanFieldinline
ToggleFieldonColor, offColor, onIcon, offIcon
SelectFieldoptions(array|Closure), optionsRelationship, searchable, multiple, native, creatable, createOptionUsing, allowCustomValues
BelongsToFieldfactory make($name, $relatedResource), searchable, preload, searchColumns, optionLabel(Closure), relationship(name, ?query)
HasManyFieldfactory make($name, $relatedResource), canAddRecords, canEditRecords
DateFieldformat, displayFormat, minDate, maxDate, closeOnDateSelection, timezone
DateTimeFieldañade seconds(bool)
FileFielddisk, directory, visibility, maxSize, acceptedFileTypes, multiple, reorderable, using(STRATEGY_*)
ImageFieldañade imageCropAspectRatio, imageResizeTargetWidth
ColorFieldpresets, format('hex'|'rgb'|'hsl'), alpha
HiddenField(sin setters extra)

Arqel\Fields\ValidationBridge (final)

Traduce arrays de reglas Laravel a un schema Zod. 19 traductores incorporados.

MétodoFunción
translate(array $rules): stringSchema Zod (e.g.: z.string().email().min(1).max(255).nullable())
register(string $rule, Closure)Registra un traductor personalizado
hasRule(string), flush()Utilidades

Las reglas desconocidas se omiten en silencio (confirmed, password, current_password son solo del servidor).

Arqel\Fields\EagerLoadingResolver (final)

resolve(array<Field>): array<int, string> extrae nombres de relaciones de BelongsToField y HasManyField para Builder::with(...). Auto dedupe.

HTTP Controllers

ControllerEndpointFunción
FieldSearchControllerGET {panel}/{resource}/fields/{field}/search?q=Búsqueda asíncrona para BelongsToField (máx 20 resultados, throttle 30/min)
FieldUploadControllerPOST/DELETE {panel}/{resource}/fields/{field}/uploadUpload/delete para FileField

Macros & Custom

php
// AppServiceProvider::boot
Field::macro('priceBRL', fn (string $name) =>
    Field::currency($name)->prefix('R$ ')->thousandsSeparator('.')->decimalSeparator(',')
);

// Custom type
Field::register('rating', RatingField::class);

Comandos Artisan

ComandoFunción
arqel:field {name} {--force}Genera stubs app/Arqel/Fields/{Name}Field.php + resources/js/Arqel/Fields/{Name}Input.tsx

Relacionado

Licencia MIT — construido con Inertia + React + Laravel.