151 lines
2.9 KiB
PHP
151 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace Laravel\Nova\Fields;
|
|
|
|
use Illuminate\Support\Arr;
|
|
|
|
class Line extends Text implements Unfillable
|
|
{
|
|
const HEADING = 'extra-large';
|
|
|
|
const BASE = 'large';
|
|
|
|
const SUBTITLE = 'medium';
|
|
|
|
const SMALL = 'small';
|
|
|
|
/**
|
|
* The type for the line field.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $type = self::BASE;
|
|
|
|
/**
|
|
* Extra CSS classes to apply to the line.
|
|
*
|
|
* @var mixed
|
|
*/
|
|
public $extraClasses = '';
|
|
|
|
/**
|
|
* The line's component.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $component = 'line-field';
|
|
|
|
/**
|
|
* CSS class lookup table for lines.
|
|
*
|
|
* @var array<string, string>
|
|
*/
|
|
public static $classes = [
|
|
self::HEADING => 'text-base font-semibold',
|
|
self::BASE => 'text-sm',
|
|
self::SUBTITLE => 'text-xs tracking-loose font-bold uppercase text-80',
|
|
self::SMALL => 'text-xs',
|
|
];
|
|
|
|
/**
|
|
* Create a new field.
|
|
*
|
|
* @param string $name
|
|
* @param string|callable|null $attribute
|
|
* @param (callable(mixed, mixed, ?string):(mixed))|null $resolveCallback
|
|
* @return void
|
|
*/
|
|
public function __construct($name, $attribute = null, callable $resolveCallback = null)
|
|
{
|
|
parent::__construct($name, $attribute, $resolveCallback);
|
|
|
|
$this->exceptOnForms();
|
|
}
|
|
|
|
/**
|
|
* Display the line as a heading.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function asHeading()
|
|
{
|
|
$this->type = static::HEADING;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Display the line as a subtitle.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function asSubTitle()
|
|
{
|
|
$this->type = static::SUBTITLE;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Display the line with small styles.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function asSmall()
|
|
{
|
|
$this->type = static::SMALL;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Display the line with base styles.
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function asBase()
|
|
{
|
|
$this->type = static::BASE;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Set the extra CSS classes to be applied to the line field.
|
|
*
|
|
* @param mixed $classes
|
|
* @return $this
|
|
*/
|
|
public function extraClasses($classes)
|
|
{
|
|
$this->extraClasses = $classes;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Get the display classes for the line.
|
|
*
|
|
* @return array<string, string>
|
|
*/
|
|
public function getClasses()
|
|
{
|
|
return array_merge(
|
|
Arr::wrap(self::$classes[$this->type]),
|
|
array_filter(Arr::wrap($this->extraClasses))
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Prepare the line for JSON serialization.
|
|
*
|
|
* @return array<string, mixed>
|
|
*/
|
|
public function jsonSerialize(): array
|
|
{
|
|
return array_merge(parent::jsonSerialize(), [
|
|
'classes' => $this->getClasses(),
|
|
]);
|
|
}
|
|
}
|