This is how a widget builder addon class look like
<?php
namespace Modules\YourModuleName\Http\WidgetBuilder\Widgets;
use App\Helpers\SanitizeInput;
use Plugins\PageBuilder\Fields\Image;
use Plugins\PageBuilder\Fields\Repeater;
use Plugins\PageBuilder\Fields\Text;
use Plugins\PageBuilder\Fields\Textarea;
use Plugins\PageBuilder\Helpers\RepeaterField;
use Plugins\WidgetBuilder\Traits\LanguageFallbackForWidgetBuilder;
use Plugins\WidgetBuilder\WidgetBase;
class YourWidgetClassName extends WidgetBase
{
    use LanguageFallbackForWidgetBuilder;
 
// this function is responsible for rending form in admin panel, when it //drag into the widget area
    public function admin_render()
    {
        $output = $this->admin_form_before();
        $output .= $this->admin_form_start();
        $output .= $this->default_fields();
        $widget_saved_values = $this->get_settings();
        $output .= Image::get([
            'name' => 'image',
            'label' => __('Image / Logo'),
            'value' => $widget_saved_values['image'] ?? null
        ]);
        $output .= Textarea::get([
            'name' => 'description',
            'label' => __('Description'),
            'value' => $widget_saved_values['description'] ?? null
        ]);
        $output .= $this->admin_form_submit_button();
        $output .= $this->admin_form_end();
        $output .= $this->admin_form_after();
        return $output;
    }
    public function frontend_render()
    {
        // TODO: Implement frontend_render() method.
        $widget_saved_values = $this->get_settings();
        $widget_title = SanitizeInput::esc_html($widget_saved_values['description'] ?? '');
        $widget_logo = $widget_saved_values['image'] ?? '';
        $image = render_image_markup_by_attachment_id($widget_logo, '', 'full');
        $markup = $this->widget_column_start();
        $markup .= '<div class="footer-widget widget center-text">
                            <div class="about_us_widget">
                                <a href="'.url('/').'" class="footer-logo">
                                    '.$image.'
                                </a>
                            </div>
                            <div class="footer-inner mt-4">
                                <div class="about-us-para"> '. $widget_title .' </div>
                            </div>
                        </div>';
        $markup .= $this->widget_column_end();
        return $markup;
    }
    public function enable(): bool
    {
        return (bool)!is_null(tenant());
    }
    public function widget_title()
    {
        return __('Your Custom Widget Name');
    }
}
Put the widget name along with the namespace in the module.json file “widgetBuilderAddon” array, make sure you add widget class with full namespace, as like below example

 
                