Skip to content

arqel-dev/fields — API Reference

Namespace Arqel\Fields\. 21 field types canónicos + ValidationBridge + macro registry.

Arqel\Fields\Field (abstract)

Base de todos os Fields. __construct é final por design — subclasses só declaram protected string $type e protected string $component.

Setters fluentes (via 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)

Oracles

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. Não chame new TextField('name') — use FieldFactory::text('name') (alias comum: 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 types custom

Field Types — props específicas

ClassSetters extra
TextFieldmaxLength, minLength, pattern, autocomplete, mask
TextareaFieldrows, cols
EmailField(default rule email)
UrlField(default rule 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
DateTimeFieldadiciona seconds(bool)
FileFielddisk, directory, visibility, maxSize, acceptedFileTypes, multiple, reorderable, using(STRATEGY_*)
ImageFieldadiciona imageCropAspectRatio, imageResizeTargetWidth
ColorFieldpresets, format('hex'|'rgb'|'hsl'), alpha
HiddenField(sem setters extra)

Arqel\Fields\ValidationBridge (final)

Traduz arrays de regras Laravel para schema Zod. 19 translators built-in.

MétodoFunção
translate(array $rules): stringSchema Zod (ex: z.string().email().min(1).max(255).nullable())
register(string $rule, Closure)Registrar translator custom
hasRule(string), flush()Utilitários

Regras desconhecidas são saltadas silenciosamente (confirmed, password, current_password são server-only).

Arqel\Fields\EagerLoadingResolver (final)

resolve(array<Field>): array<int, string> extrai relation names de BelongsToField e HasManyField para Builder::with(...). Dedupe automático.

HTTP Controllers

ControllerEndpointFunção
FieldSearchControllerGET {panel}/{resource}/fields/{field}/search?q=Async search para BelongsToField (max 20 results, 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

ComandoFunção
arqel:field {name} {--force}Gera app/Arqel/Fields/{Name}Field.php + resources/js/Arqel/Fields/{Name}Input.tsx stubs

Licença MIT — construído com Inertia + React + Laravel.