/home/bdqbpbxa/dev-subdomains/api-uniferx.goodface.com.ua/vendor/laravel/nova/src/ResourceTool.php
<?php

namespace Laravel\Nova;

use Closure;
use Illuminate\Support\Str;

/**
 * @method static static make()
 */
#[\AllowDynamicProperties]
class ResourceTool extends Panel
{
    use Makeable, ProxiesCanSeeToGate;

    /**
     * The resource tool element.
     *
     * @var \Laravel\Nova\Element
     */
    public $element;

    /**
     * The resource tool's component.
     *
     * @var string|null
     */
    public $toolComponent;

    /**
     * Create a new resource tool instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct($this->name(), [new ResourceToolElement($this->toolComponent())]);

        $this->element = $this->data[0];
    }

    /**
     * Get the displayable name of the resource tool.
     *
     * @return string
     */
    public function name()
    {
        return $this->name ?: Str::title(Str::snake(class_basename(get_class($this)), ' '));
    }

    /**
     * Get the component name for the resource tool.
     *
     * @return string
     */
    public function toolComponent()
    {
        return $this->toolComponent ?? Str::kebab(class_basename(get_class($this)));
    }

    /**
     * Set the callback to be run to authorize viewing the card.
     *
     * @param  \Closure(\Illuminate\Http\Request):bool  $callback
     * @return $this
     */
    public function canSee(Closure $callback)
    {
        $this->element->canSee($callback);

        return $this;
    }

    /**
     * Set additional meta information for the resource tool.
     *
     * @param  array<string, mixed>  $meta
     * @return $this
     */
    public function withMeta(array $meta)
    {
        $this->element->withMeta($meta);

        return $this;
    }

    /**
     * Dynamically proxy method calls to meta information.
     *
     * @param  string  $method
     * @param  array  $parameters
     * @return $this
     */
    public function __call($method, $parameters)
    {
        return $this->withMeta([$method => ($parameters[0] ?? true)]);
    }
}