| Closure */ protected array | Closure $data = []; protected string | Closure $component; /** * @param array | Closure $data */ final public function __construct(string | Closure $component, array | Closure $data = []) { $this->component($component); $this->data($data); } /** * @param array | Closure $data */ public static function make(string | Closure $component, array | Closure $data = []): static { $static = app(static::class, [ 'component' => $component, 'data' => $data, ]); $static->configure(); return $static; } public function component(string | Closure $component): static { $this->component = $component; return $this; } public function getComponent(): string { return $this->evaluate($this->component); } public function lazy(bool | Closure $condition = true): static { $this->isLazy = $condition; return $this; } public function isLazy(): bool { return (bool) $this->evaluate($this->isLazy); } /** * @param array | Closure $data */ public function data(array | Closure $data): static { $this->data = $data; return $this; } /** * @return array */ public function getData(): array { return $this->evaluate($this->data); } /** * @return array */ public function getComponentProperties(): array { $properties = [ 'record' => $this->getRecord(), ]; if ($this->isLazy()) { $properties['lazy'] = true; } return [ ...$properties, ...$this->getData(), ]; } }