[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"package:filament-form-builder":3},{"type":4,"package":5,"activeDoc":37,"seo":331,"alternates":333,"editable":336},"package",{"id":6,"title":7,"slug":8,"url":9,"excerpt":10,"formatted_price":11,"type":12,"github_url":15,"external_url":16,"plumb":17,"category":26,"tags":30,"cover":37,"blocks":38,"toc":91,"docs":330},2,"Form Builder","filament-form-builder","\u002Ftr\u002Fpaketler\u002Ffilament-form-builder","Build and manage dynamic Filament forms with fields, submissions, email templates, and bulk sending.","$50",{"value":13,"label":14},"paid","Paid","https:\u002F\u002Fgithub.com\u002Fafsakar\u002Ffilament-form-builder-docs","https:\u002F\u002Fafsakar.lemonsqueezy.com\u002Fcheckout\u002Fbuy\u002Ffe53daf2-14d2-4e1d-b2d8-7edf794f56c7",{"version":18,"security":19,"abandoned":20,"composite":21,"ecosystem":22,"checked_at":23,"maintenance":24,"url":25},"v1.3.0",85,false,88.18,100,"2026-08-15T00:30:11+00:00",88.1,"https:\u002F\u002Fplumbphp.dev\u002Fafsakar\u002Ffilament-form-builder",{"id":27,"title":28,"slug":29},3,"FilamentPHP","filamentphp",[31,34],{"id":32,"title":33,"slug":33},13,"v4",{"id":35,"title":36,"slug":36},14,"v5",null,[39,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88],{"type":40,"data":41},"general.rich-text",{"content":42},"\u003Cdiv style=\"text-align: center;\">\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fcover.png\" alt=\"Filament Form Builder Logo\" \u002F>\n\u003C\u002Fdiv>\n\u003Cp>A powerful, flexible form builder package for FilamentPHP that enables you to create, manage, and process dynamic forms with advanced features including custom field types, email templates, bulk sending capabilities, and comprehensive submission tracking.\u003C\u002Fp>",{"type":40,"data":44},{"content":45},"\u003Ch2 id=\"overview\">Overview\u003C\u002Fh2>\n\u003Cp>Filament Form Builder is a comprehensive solution for building and managing forms within the FilamentPHP ecosystem. It provides a visual form builder interface, customizable field types, advanced email templating, and robust submission management.\u003C\u002Fp>\n\u003Ch3 id=\"key-features\">Key Features\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>\u003Cstrong>Visual Form Builder\u003C\u002Fstrong>: Intuitive drag-and-drop interface for creating forms with sections and fields\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Multiple Form Types\u003C\u002Fstrong>: Support for both site-facing and panel forms\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Custom Field Types\u003C\u002Fstrong>: 12+ built-in field types with extensibility for custom fields\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Advanced Email System\u003C\u002Fstrong>:\n\u003Cul>\n\u003Cli>Visual email template builder with block-based design\u003C\u002Fli>\n\u003Cli>Bulk email sending with chunk processing\u003C\u002Fli>\n\u003Cli>\u003Cstrong>CSV Email Import\u003C\u002Fstrong>: Import email addresses from CSV files with automatic validation\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Email Tracking\u003C\u002Fstrong>: Track opens, engagement, and analytics with automatic tracking pixels\u003C\u002Fli>\n\u003Cli>Queue support for optimized performance\u003C\u002Fli>\n\u003Cli>Custom email blocks\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Template Snapshot\u003C\u002Fstrong>: Automatic preservation of email templates at send\u002Fsubmission time\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Submission Management\u003C\u002Fstrong>: Track, view, and manage form submissions with metadata\u003C\u002Fli>\n\u003Cli>\u003Cstrong>File Handling\u003C\u002Fstrong>: Upload and manage file submissions with Spatie Media Library integration\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Events &amp; Listeners\u003C\u002Fstrong>: Comprehensive event system for form submissions and email sending\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Form Sends\u003C\u002Fstrong>: Send templated emails to multiple recipients with tracking\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Extensible Architecture\u003C\u002Fstrong>: Create custom field types and email blocks using artisan commands\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Validation\u003C\u002Fstrong>: Built-in validation with customizable rules per field type\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Responsive\u003C\u002Fstrong>: Works seamlessly on desktop and mobile devices\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Data Integrity\u003C\u002Fstrong>: Template snapshot feature ensures sent emails remain consistent even after template changes\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Analytics Widgets\u003C\u002Fstrong>: Comprehensive dashboard widgets for submission and send tracking with charts and statistics\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Localization\u003C\u002Fstrong>: Full internationalization support with English and Turkish translations (easily extendable to other languages)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"built-in-field-types\">Built-in Field Types\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Text\u003C\u002Fli>\n\u003Cli>Textarea\u003C\u002Fli>\n\u003Cli>Email\u003C\u002Fli>\n\u003Cli>Number\u003C\u002Fli>\n\u003Cli>Phone\u003C\u002Fli>\n\u003Cli>URL\u003C\u002Fli>\n\u003Cli>Date\u003C\u002Fli>\n\u003Cli>Select (single\u002Fmultiple)\u003C\u002Fli>\n\u003Cli>Radio\u003C\u002Fli>\n\u003Cli>Checkbox\u003C\u002Fli>\n\u003Cli>File Upload\u003C\u002Fli>\n\u003Cli>Hidden\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"built-in-email-blocks\">Built-in Email Blocks\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Text Block\u003C\u002Fli>\n\u003Cli>Heading Block\u003C\u002Fli>\n\u003Cli>Button Block\u003C\u002Fli>\n\u003Cli>Image Block\u003C\u002Fli>\n\u003Cli>Divider Block\u003C\u002Fli>\n\u003Cli>Spacer Block\u003C\u002Fli>\n\u003Cli>Submission Data Block\u003C\u002Fli>\n\u003Cli>Files Block\u003C\u002Fli>\n\u003C\u002Ful>",{"type":40,"data":47},{"content":48},"\u003Ch2 id=\"requirements\">Requirements\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>PHP 8.2 or higher\u003C\u002Fli>\n\u003Cli>Laravel 12.0 or higher\u003C\u002Fli>\n\u003Cli>FilamentPHP 4.0 or higher\u003C\u002Fli>\n\u003Cli>Spatie Laravel Media Library\u003C\u002Fli>\n\u003C\u002Ful>",{"type":40,"data":50},{"content":51},"\u003Ch2 id=\"installation\">Installation\u003C\u002Fh2>\n\u003Ch3 id=\"1-install-the-package\">1. Install the Package\u003C\u002Fh3>\n\u003Cp>This package requires a valid license to use.\nYou can get your license here: \u003Ca href=\"https:\u002F\u002Fafsakar.lemonsqueezy.com\u002Fcheckout\u002Fbuy\u002Ffe53daf2-14d2-4e1d-b2d8-7edf794f56c7\">Filament Form Builder\u003C\u002Fa>\u003C\u002Fp>\n\u003Cp>To install you'll need to add the repository to your composer.json file:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">{\n    &quot;repositories&quot;: [\n        {\n            &quot;type&quot;: &quot;composer&quot;,\n            &quot;url&quot;: &quot;https:\u002F\u002Fsatis.afsakar.com&quot;\n        }\n    ]\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Once the repository has been added to the composer.json file, you can install Filament Form builder like any other composer package using the composer require command:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">composer require afsakar\u002Ffilament-form-builder\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>You will be prompted to provide your username and password. The username will be the email address and the password will be equal to your license key.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">Loading composer repositories with package information\nAuthentication required (satis.afsakar.com):\nUsername: [license-email]\nPassword: [license-key]\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Next, add the plugin's views to your custom theme in your theme.css file:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-css\">@source '..\u002F..\u002F..\u002F..\u002Fvendor\u002Fafsakar\u002Ffilament-form-builder\u002Fresources\u002Fviews\u002F**\u002F*.blade.php';\n@source '..\u002F..\u002F..\u002F..\u002Fvendor\u002Fafsakar\u002Ffilament-form-builder\u002Fsrc\u002F**\u002F*.php';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Afterward, run \u003Ccode>npm run build\u003C\u002Fcode> or \u003Ccode>yarn build\u003C\u002Fcode> to compile assets.\u003C\u002Fp>\n\u003Ch3 id=\"2-publish-configuration\">2. Publish Configuration\u003C\u002Fh3>\n\u003Cp>Publish the configuration file:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan vendor:publish --tag=&quot;form-builder-config&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"3-publish-migrations\">3. Publish Migrations\u003C\u002Fh3>\n\u003Cp>Publish the migration files:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan vendor:publish --tag=&quot;form-builder-migrations&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"4-publish-render-type-images\">4. Publish Render Type Images\u003C\u002Fh3>\n\u003Cp>Publish the render type images used in the form builder:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan vendor:publish --tag=&quot;form-builder-images&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Publish Spatie Media Library migrations if you haven't done so:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan vendor:publish --provider=&quot;Spatie\\MediaLibrary\\MediaLibraryServiceProvider&quot; --tag=&quot;medialibrary-migrations&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"4-run-migrations\">4. Run Migrations\u003C\u002Fh3>\n\u003Cp>Execute the migrations to create the necessary database tables:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan migrate\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This will create all necessary tables including:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Core form builder tables (forms, sections, fields)\u003C\u002Fli>\n\u003Cli>Submission and send tracking tables\u003C\u002Fli>\n\u003Cli>Template snapshot columns for data integrity\u003C\u002Fli>\n\u003Cli>Media library tables for file uploads\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>The package includes backfill migrations that automatically populate template snapshots for any existing records.\u003C\u002Fp>\n\u003Ch3 id=\"5-publish-views-optional\">5. Publish Views (Optional)\u003C\u002Fh3>\n\u003Cp>If you want to customize the views:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan vendor:publish --tag=&quot;form-builder-views&quot;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"6-register-the-plugin\">6. Register the Plugin\u003C\u002Fh3>\n\u003Cp>Register the plugin in your Filament Panel provider (typically \u003Ccode>app\u002FProviders\u002FFilament\u002FAdminPanelProvider.php\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentFormBuilder\\FilamentFormBuilderPlugin;\n\npublic function panel(Panel $panel): Panel\n{\n    return $panel\n        \u002F\u002F ...\n        -&gt;plugins([\n            FilamentFormBuilderPlugin::make(),\n        ]);\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Add styles to your \u003Ccode>theme.css\u003C\u002Fcode> file and run \u003Ccode>npm run build\u003C\u002Fcode> to compile your assets.\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-css\">@source '..\u002F..\u002F..\u002F..\u002Fvendor\u002Fafsakar\u002Ffilament-form-builder\u002Fresources\u002Fviews\u002F**\u002F*.blade.php';\n@source '..\u002F..\u002F..\u002F..\u002Fvendor\u002Fafsakar\u002Ffilament-form-builder\u002Fsrc\u002F**\u002F*.php';\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"7-configure-environment-variables-optional\">7. Configure Environment Variables (Optional)\u003C\u002Fh3>\n\u003Cp>Add these variables to your \u003Ccode>.env\u003C\u002Fcode> file to customize email queue settings:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-env\">FORM_BUILDER_EMAIL_CHUNK_SIZE=50\nFORM_BUILDER_EMAIL_CHUNK_DELAY=5\nFORM_BUILDER_EMAIL_QUEUE=default\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":40,"data":53},{"content":54},"\u003Ch2 id=\"configuration\">Configuration\u003C\u002Fh2>\n\u003Cp>The configuration file \u003Ccode>config\u002Fform-builder.php\u003C\u002Fcode> allows you to customize various aspects:\u003C\u002Fp>\n\u003Ch3 id=\"models\">Models\u003C\u002Fh3>\n\u003Cp>You can override the default models:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">'models' =&gt; [\n    'form' =&gt; \\Afsakar\\FilamentFormBuilder\\Models\\Form::class,\n    'form_section' =&gt; \\Afsakar\\FilamentFormBuilder\\Models\\FormSection::class,\n    'form_field' =&gt; \\Afsakar\\FilamentFormBuilder\\Models\\FormField::class,\n    'form_submission' =&gt; \\Afsakar\\FilamentFormBuilder\\Models\\FormSubmission::class,\n    'form_send' =&gt; \\Afsakar\\FilamentFormBuilder\\Models\\FormSend::class,\n    'email_template' =&gt; \\Afsakar\\FilamentFormBuilder\\Models\\EmailTemplate::class,\n],\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"sender-model\">Sender Model\u003C\u002Fh3>\n\u003Cp>Define the model used for tracking who sends bulk emails:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">'sender' =&gt; \\App\\Models\\User::class,\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"number-prefixes\">Number Prefixes\u003C\u002Fh3>\n\u003Cp>Customize unique number prefixes for submissions and sends:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">'number_prefix' =&gt; [\n    'submission' =&gt; 'SUB-',\n    'send' =&gt; 'SEND-',\n],\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"email-queue-settings\">Email Queue Settings\u003C\u002Fh3>\n\u003Cp>Configure email sending performance:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">'email_chunk_size' =&gt; 50,        \u002F\u002F Number of emails per chunk\n'email_chunk_delay' =&gt; 5,        \u002F\u002F Seconds between chunks\n'email_queue' =&gt; 'default',      \u002F\u002F Queue name\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"custom-field-types\">Custom Field Types\u003C\u002Fh3>\n\u003Cp>Register your custom field types:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">'field_types' =&gt; [\n    \\App\\FormFields\\CustomField::class,\n],\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"custom-email-blocks\">Custom Email Blocks\u003C\u002Fh3>\n\u003Cp>Register your custom email blocks:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">'email_blocks' =&gt; [\n    \\App\\EmailBlocks\\CustomBlock::class,\n],\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"icons\">Icons\u003C\u002Fh3>\n\u003Cp>Customize field type icons:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">'icons' =&gt; [\n    'field_types' =&gt; [\n        'text' =&gt; Heroicon::OutlinedPencil,\n        'email' =&gt; Heroicon::OutlinedEnvelope,\n        \u002F\u002F ...\n    ],\n],\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":40,"data":56},{"content":57},"\u003Ch2 id=\"usage\">Usage\u003C\u002Fh2>\n\u003Ch3 id=\"creating-a-form\">Creating a Form\u003C\u002Fh3>\n\u003Col>\n\u003Cli>Navigate to \u003Cstrong>Forms\u003C\u002Fstrong> in your Filament admin panel\u003C\u002Fli>\n\u003Cli>Click \u003Cstrong>New Form\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>Fill in the form details:\n\u003Cul>\n\u003Cli>\u003Cstrong>Title\u003C\u002Fstrong>: Name of your form\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Slug\u003C\u002Fstrong>: URL-friendly identifier\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Type\u003C\u002Fstrong>: Site (public) or Panel (admin)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Description\u003C\u002Fstrong>: Optional description\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Status\u003C\u002Fstrong>: Draft, Active, or Inactive\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Email Template\u003C\u002Fstrong>: Optional template for submission notifications\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cdiv style=\"text-align: center;\">\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fsc-1.png\" alt=\"Form Builder Screenshot\"\u002F>\n\u003C\u002Fdiv>\n\u003Ch3 id=\"adding-sections-and-fields\">Adding Sections and Fields\u003C\u002Fh3>\n\u003Col>\n\u003Cli>After creating a form, add sections to organize your fields\u003C\u002Fli>\n\u003Cli>Within each section, add fields:\n\u003Cul>\n\u003Cli>Select field type\u003C\u002Fli>\n\u003Cli>Configure field properties\u003C\u002Fli>\n\u003Cli>Set validation rules\u003C\u002Fli>\n\u003Cli>Customize appearance\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Ch3 id=\"conditional-visibility\">Conditional Visibility\u003C\u002Fh3>\n\u003Cp>You can make any field conditionally visible based on other field values.\u003C\u002Fp>\n\u003Cp>In the field edit modal:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Open the \u003Cstrong>Conditions\u003C\u002Fstrong> tab\u003C\u002Fli>\n\u003Cli>Enable \u003Cstrong>Conditional Visibility\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>Choose match logic:\n\u003Cul>\n\u003Cli>\u003Cstrong>All rules must match\u003C\u002Fstrong> (\u003Ccode>all\u003C\u002Fcode>)\u003C\u002Fli>\n\u003Cli>\u003Cstrong>At least one rule must match\u003C\u002Fstrong> (\u003Ccode>any\u003C\u002Fcode>)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Add one or more rules (\u003Ccode>field\u003C\u002Fcode>, \u003Ccode>operator\u003C\u002Fcode>, \u003Ccode>value\u003C\u002Fcode>)\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>Supported operators:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Ccode>equals\u003C\u002Fcode>, \u003Ccode>not_equals\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>contains\u003C\u002Fcode>, \u003Ccode>not_contains\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>in\u003C\u002Fcode>, \u003Ccode>not_in\u003C\u002Fcode> (comma-separated values)\u003C\u002Fli>\n\u003Cli>\u003Ccode>is_empty\u003C\u002Fcode>, \u003Ccode>is_not_empty\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>\u003Ccode>greater_than\u003C\u002Fcode>, \u003Ccode>greater_or_equal\u003C\u002Fcode>, \u003Ccode>less_than\u003C\u002Fcode>, \u003Ccode>less_or_equal\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Notes:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Existing forms are fully backward-compatible. If a field has no condition, behavior is unchanged.\u003C\u002Fli>\n\u003Cli>Hidden conditional fields are not dehydrated and are not validated as required until visible.\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Programmatic example (\u003Ccode>form_fields.configuration\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-json\">{\n  &quot;visibility_condition&quot;: {\n    &quot;enabled&quot;: true,\n    &quot;logic&quot;: &quot;all&quot;,\n    &quot;rules&quot;: [\n      { &quot;field&quot;: &quot;account_type&quot;, &quot;operator&quot;: &quot;equals&quot;, &quot;value&quot;: &quot;business&quot; },\n      { &quot;field&quot;: &quot;employee_count&quot;, &quot;operator&quot;: &quot;greater_than&quot;, &quot;value&quot;: &quot;10&quot; }\n    ]\n  }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"rendering-a-form\">Rendering a Form\u003C\u002Fh3>\n\u003Cp>For site-facing forms, use the Livewire component in your Blade template:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-blade\">&lt;livewire:form-renderer form-slug=&quot;contact-form&quot; \u002F&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Or include it in your layout:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-blade\">@livewire('form-renderer', ['formSlug' =&gt; 'contact-form'])\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"form-submissions\">Form Submissions\u003C\u002Fh3>\n\u003Cp>View and manage form submissions:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Navigate to \u003Cstrong>Form Submissions\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>View submission details including:\n\u003Cul>\n\u003Cli>Unique number\u003C\u002Fli>\n\u003Cli>Form name\u003C\u002Fli>\n\u003Cli>Submission data\u003C\u002Fli>\n\u003Cli>Metadata (IP, user agent, timestamp)\u003C\u002Fli>\n\u003Cli>Uploaded files\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>Mark submissions as read\u002Funread\u003C\u002Fli>\n\u003Cli>Export submission data\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cdiv style=\"text-align: center;\">\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fsc-2.png\" alt=\"Form Submissions Screenshot\" style=\"width: 99.5%\"\u002F>\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fsc-6.png\" alt=\"Form Submissions Screenshot 2\" style=\"width: 49.5%\"\u002F>\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fsc-8.png\" alt=\"Form Submissions Screenshot 3\" style=\"width: 49.5%\"\u002F>\n\u003C\u002Fdiv>\n\u003Ch3 id=\"email-templates\">Email Templates\u003C\u002Fh3>\n\u003Cp>Create reusable email templates with a visual block builder:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Navigate to \u003Cstrong>Email Templates\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>Create a new template\u003C\u002Fli>\n\u003Cli>Add blocks to design your email:\n\u003Cul>\n\u003Cli>Text blocks for content\u003C\u002Fli>\n\u003Cli>Heading blocks for titles\u003C\u002Fli>\n\u003Cli>Button blocks for CTAs\u003C\u002Fli>\n\u003Cli>Submission data blocks to display form data\u003C\u002Fli>\n\u003Cli>File blocks for attachments\u003C\u002Fli>\n\u003Cli>And more...\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cdiv style=\"text-align: center;\">\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fsc-3.png\" alt=\"Email Template Builder Screenshot\" style=\"width: 49.5%\"\u002F>\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fsc-7.png\" alt=\"Email Template Builder Screenshot 2\" style=\"width: 49.5%\"\u002F>\n\u003C\u002Fdiv>\n\u003Ch3 id=\"bulk-email-sending-form-sends\">Bulk Email Sending (Form Sends)\u003C\u002Fh3>\n\u003Cp>Send templated emails to multiple recipients:\u003C\u002Fp>\n\u003Col>\n\u003Cli>Navigate to \u003Cstrong>Form Sends\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>Click \u003Cstrong>New Send\u003C\u002Fstrong>\u003C\u002Fli>\n\u003Cli>Select an email template\u003C\u002Fli>\n\u003Cli>Add recipients (comma-separated or one per line)\u003C\u002Fli>\n\u003Cli>Customize subject and additional data\u003C\u002Fli>\n\u003Cli>Send immediately or queue for processing\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>The system automatically chunks large recipient lists for optimal performance.\u003C\u002Fp>\n\u003Cdiv style=\"text-align: center;\">\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fsc-4.png\" alt=\"Form Sends Screenshot\" style=\"width: 49.5%\"\u002F>\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fsc-9.png\" alt=\"Create Form Send Screenshot\" style=\"width: 49.5%\"\u002F>\n\u003C\u002Fdiv>\n\u003Ch4 id=\"csv-email-import\">CSV Email Import\u003C\u002Fh4>\n\u003Cp>Quickly import multiple email addresses from CSV files:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Supported Formats:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Simple list (one email per line)\u003C\u002Fli>\n\u003Cli>CSV with &quot;email&quot; header column\u003C\u002Fli>\n\u003Cli>Multi-column CSV (automatically detects email column)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Features:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Automatic email validation\u003C\u002Fli>\n\u003Cli>Duplicate removal\u003C\u002Fli>\n\u003Cli>Merge with existing recipients\u003C\u002Fli>\n\u003Cli>Real-time import feedback\u003C\u002Fli>\n\u003Cli>Smart error handling\u003C\u002Fli>\n\u003Cli>Maximum 5MB file size\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Usage:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Col>\n\u003Cli>On the Form Send creation page, locate the \u003Cstrong>CSV File\u003C\u002Fstrong> upload field\u003C\u002Fli>\n\u003Cli>Upload your CSV file (drag &amp; drop or click to browse)\u003C\u002Fli>\n\u003Cli>Emails are automatically imported and added to the Recipients field\u003C\u002Fli>\n\u003Cli>Review the imported emails and make any manual adjustments\u003C\u002Fli>\n\u003Cli>Complete the form and send\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>Example CSV Formats:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cp>Simple list:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-csv\">john@example.com\njane@example.com\nbob@example.com\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>With header:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-csv\">email\njohn@example.com\njane@example.com\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Multi-column (email column auto-detected):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-csv\">name,email,company\nJohn Doe,john@example.com,ACME Corp\nJane Smith,jane@example.com,Tech Inc\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4 id=\"email-tracking-analytics\">Email Tracking &amp; Analytics\u003C\u002Fh4>\n\u003Cp>Track email opens and engagement with powerful analytics:\u003C\u002Fp>\n\u003Cp>\u003Cstrong>Tracking Features:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Open Tracking\u003C\u002Fstrong>: Know when recipients open your emails\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Open Count\u003C\u002Fstrong>: See how many times each email was opened\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Open Rate\u003C\u002Fstrong>: Calculate engagement percentage automatically\u003C\u002Fli>\n\u003Cli>\u003Cstrong>IP &amp; User Agent\u003C\u002Fstrong>: Track who opened from where\u003C\u002Fli>\n\u003Cli>\u003Cstrong>First &amp; Last Open\u003C\u002Fstrong>: See when emails were first and last opened\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Real-time Updates\u003C\u002Fstrong>: Tracking updates automatically when emails are opened\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>How It Works:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Col>\n\u003Cli>When you send emails, each recipient gets a unique tracking token\u003C\u002Fli>\n\u003Cli>A 1x1 transparent tracking pixel is automatically added to emails\u003C\u002Fli>\n\u003Cli>When a recipient opens the email, the pixel is loaded\u003C\u002Fli>\n\u003Cli>The system records the open event with timestamp, IP, and user agent\u003C\u002Fli>\n\u003Cli>View detailed statistics in the Form Sends list and recipient modal\u003C\u002Fli>\n\u003C\u002Fol>\n\u003Cp>\u003Cstrong>UI Features:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>Open Rate Column\u003C\u002Fstrong>: See engagement at a glance (colored badges)\n\u003Cul>\n\u003Cli>🟢 Green: ≥80% opened\u003C\u002Fli>\n\u003Cli>🟡 Yellow: 50-79% opened\u003C\u002Fli>\n\u003Cli>🔴 Red: &lt;50% opened\u003C\u002Fli>\n\u003Cli>⚪ Gray: 0% opened\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Recipient List Modal\u003C\u002Fstrong>:\n\u003Cul>\n\u003Cli>View all recipients with their open status\u003C\u002Fli>\n\u003Cli>Search and filter recipients\u003C\u002Fli>\n\u003Cli>See individual open counts (&quot;Opened 3x&quot;)\u003C\u002Fli>\n\u003Cli>View last opened timestamp\u003C\u002Fli>\n\u003Cli>Copy email addresses with one click\u003C\u002Fli>\n\u003C\u002Ful>\n\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>\u003Cstrong>Analytics Dashboard:\u003C\u002Fstrong>\u003C\u002Fp>\n\u003Cpre>\u003Ccode>Total Recipients: 500\nOpened: 350\nOpen Rate: 70%\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>\u003Cstrong>Privacy Note:\u003C\u002Fstrong> Email tracking uses standard industry practices (tracking pixels) and should be disclosed in your privacy policy. Recipients can disable image loading in their email client to opt out of tracking.\u003C\u002Fp>",{"type":40,"data":59},{"content":60},"\u003Ch2 id=\"extending-the-package\">Extending the Package\u003C\u002Fh2>\n\u003Ch3 id=\"creating-custom-field-types\">Creating Custom Field Types\u003C\u002Fh3>\n\u003Cp>Generate a new field type using the artisan command:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan make:field-type CustomField --icon=heroicon-o-star\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This creates a new field type class in \u003Ccode>app\u002FFormFields\u002FCustomFieldField.php\u003C\u002Fcode>. Implement the required methods:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">&lt;?php\n\nnamespace App\\FormFields;\n\nuse Afsakar\\FilamentFormBuilder\\FieldTypes\\AbstractFieldType;\nuse Filament\\Forms\\Components\\Field;\nuse Filament\\Forms\\Components\\TextInput;\n\nclass CustomFieldField extends AbstractFieldType\n{\n    public function getIdentifier(): string\n    {\n        return 'customfield';\n    }\n\n    public function getLabel(): string\n    {\n        return 'Custom Field';\n    }\n\n    public function getIcon(): \\BackedEnum|string\n    {\n        return 'heroicon-o-star';\n    }\n\n    public function getConfigurationSchema(): array\n    {\n        return [\n            TextInput::make('custom_option')\n                -&gt;label('Custom Option')\n                -&gt;default('default_value'),\n        ];\n    }\n\n    public function getDefaultConfiguration(): array\n    {\n        return [\n            'custom_option' =&gt; 'default_value',\n        ];\n    }\n\n    public function getValidationRules(array $configuration, bool $isRequired): array\n    {\n        $rules = $this-&gt;getBaseRules($isRequired);\n        \n        \u002F\u002F Add custom validation rules\n        $rules[] = 'string';\n        $rules[] = 'max:255';\n        \n        return $rules;\n    }\n\n    public function getFilamentComponent(\n        string $name,\n        string $label,\n        array $configuration,\n        bool $isRequired,\n        ?string $placeholder = null,\n        ?string $helpText = null,\n        ?int $columnSpan = 1\n    ): Field {\n        $component = TextInput::make($name);\n        \n        return $this-&gt;applyCommonProperties(\n            $component,\n            $label,\n            $isRequired,\n            $placeholder,\n            $helpText\n        );\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Register the field type in \u003Ccode>config\u002Fform-builder.php\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">'field_types' =&gt; [\n    \\App\\FormFields\\CustomFieldField::class,\n],\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"creating-custom-email-blocks\">Creating Custom Email Blocks\u003C\u002Fh3>\n\u003Cp>Generate a new email block using the artisan command:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan make:email-block CustomBlock --icon=heroicon-o-cube\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>This creates:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>A block class in \u003Ccode>app\u002FEmailBlocks\u002FCustomBlockBlock.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>A view file in \u003Ccode>resources\u002Fviews\u002Femail-blocks\u002Fcustom-block.blade.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Implement the block class:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">&lt;?php\n\nnamespace App\\EmailBlocks;\n\nuse Afsakar\\FilamentFormBuilder\\EmailBlocks\\AbstractEmailBlock;\nuse Filament\\Forms\\Components\\ColorPicker;\nuse Filament\\Forms\\Components\\Textarea;\n\nclass CustomBlockBlock extends AbstractEmailBlock\n{\n    public static function getIdentifier(): string\n    {\n        return 'custom-block';\n    }\n\n    public static function getLabel(): string\n    {\n        return 'Custom Block';\n    }\n\n    public static function getIcon(): \\BackedEnum|string\n    {\n        return 'heroicon-o-cube';\n    }\n\n    public static function getSchema(): array\n    {\n        return [\n            Textarea::make('content')\n                -&gt;label('Content')\n                -&gt;required()\n                -&gt;rows(3),\n            ColorPicker::make('background_color')\n                -&gt;label('Background Color')\n                -&gt;default('#ffffff'),\n        ];\n    }\n\n    public static function getDefaultData(): array\n    {\n        return [\n            'content' =&gt; 'Custom block content',\n            'background_color' =&gt; '#ffffff',\n        ];\n    }\n\n    public static function getView(): string\n    {\n        return 'email-blocks.custom-block';\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Customize the view (\u003Ccode>resources\u002Fviews\u002Femail-blocks\u002Fcustom-block.blade.php\u003C\u002Fcode>):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-blade\">&lt;div style=&quot;background-color: {{ $background_color ?? '#ffffff' }}; padding: 20px; margin: 10px 0;&quot;&gt;\n    &lt;div style=&quot;font-size: 16px; line-height: 1.5;&quot;&gt;\n        {!! nl2br(e($content ?? '')) !!}\n    &lt;\u002Fdiv&gt;\n&lt;\u002Fdiv&gt;\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Register the email block in \u003Ccode>config\u002Fform-builder.php\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">'email_blocks' =&gt; [\n    \\App\\EmailBlocks\\CustomBlockBlock::class,\n],\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":40,"data":62},{"content":63},"\u003Ch2 id=\"events\">Events\u003C\u002Fh2>\n\u003Cp>The package fires several events that you can listen to:\u003C\u002Fp>\n\u003Ch3 id=\"formsubmitted\">FormSubmitted\u003C\u002Fh3>\n\u003Cp>Fired when a form is submitted:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentFormBuilder\\Events\\FormSubmitted;\nuse Illuminate\\Support\\Facades\\Event;\n\nEvent::listen(FormSubmitted::class, function (FormSubmitted $event) {\n    $submission = $event-&gt;submission;\n    \u002F\u002F Your custom logic\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"emailsent\">EmailSent\u003C\u002Fh3>\n\u003Cp>Fired when an email is sent:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentFormBuilder\\Events\\EmailSent;\nuse Illuminate\\Support\\Facades\\Event;\n\nEvent::listen(EmailSent::class, function (EmailSent $event) {\n    $formSend = $event-&gt;formSend;\n    \u002F\u002F Your custom logic\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"formsendcreated\">FormSendCreated\u003C\u002Fh3>\n\u003Cp>Fired when a bulk email send is created:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentFormBuilder\\Events\\FormSendCreated;\nuse Illuminate\\Support\\Facades\\Event;\n\nEvent::listen(FormSendCreated::class, function (FormSendCreated $event) {\n    $formSend = $event-&gt;formSend;\n    \u002F\u002F Your custom logic\n});\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":40,"data":65},{"content":66},"\u003Ch2 id=\"testing\">Testing\u003C\u002Fh2>\n\u003Cp>The package includes comprehensive test coverage using Pest PHP.\u003C\u002Fp>\n\u003Ch3 id=\"running-tests\">Running Tests\u003C\u002Fh3>\n\u003Cp>Run all tests:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">composer test\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"running-specific-tests\">Running Specific Tests\u003C\u002Fh3>\n\u003Cp>Run only feature tests:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">vendor\u002Fbin\u002Fpest tests\u002FFeature\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Run only unit tests:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">vendor\u002Fbin\u002Fpest tests\u002FUnit\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"writing-tests\">Writing Tests\u003C\u002Fh3>\n\u003Cp>Example test structure:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentFormBuilder\\Models\\Form;\nuse Afsakar\\FilamentFormBuilder\\Services\\FormSubmissionService;\n\nit('can submit a form', function () {\n    $form = Form::factory()-&gt;create([\n        'type' =&gt; 'site',\n        'is_active' =&gt; true,\n    ]);\n    \n    $service = app(FormSubmissionService::class);\n    \n    $submission = $service-&gt;submit($form, [\n        'name' =&gt; 'John Doe',\n        'email' =&gt; 'john@example.com',\n    ]);\n    \n    expect($submission)-&gt;toBeInstanceOf(\\Afsakar\\FilamentFormBuilder\\Models\\FormSubmission::class);\n    expect($submission-&gt;data['name'])-&gt;toBe('John Doe');\n});\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"code-quality\">Code Quality\u003C\u002Fh3>\n\u003Cp>Run PHPStan analysis:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">composer analyse\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Run Laravel Pint (code formatting):\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">composer lint\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":40,"data":68},{"content":69},"\u003Ch2 id=\"database-structure\">Database Structure\u003C\u002Fh2>\n\u003Cp>The package creates the following tables:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>\u003Cstrong>forms\u003C\u002Fstrong>: Main form definitions\u003C\u002Fli>\n\u003Cli>\u003Cstrong>form_sections\u003C\u002Fstrong>: Form sections for organizing fields\u003C\u002Fli>\n\u003Cli>\u003Cstrong>form_fields\u003C\u002Fstrong>: Individual form fields with configuration\u003C\u002Fli>\n\u003Cli>\u003Cstrong>form_submissions\u003C\u002Fstrong>: User-submitted form data with template snapshot support\u003C\u002Fli>\n\u003Cli>\u003Cstrong>form_sends\u003C\u002Fstrong>: Bulk email sending records with template snapshot support\u003C\u002Fli>\n\u003Cli>\u003Cstrong>email_templates\u003C\u002Fstrong>: Reusable email templates\u003C\u002Fli>\n\u003Cli>\u003Cstrong>media\u003C\u002Fstrong>: File uploads (via Spatie Media Library)\u003C\u002Fli>\n\u003C\u002Ful>",{"type":40,"data":71},{"content":72},"\u003Ch2 id=\"api-reference\">API Reference\u003C\u002Fh2>\n\u003Ch3 id=\"services\">Services\u003C\u002Fh3>\n\u003Ch4 id=\"formsubmissionservice\">FormSubmissionService\u003C\u002Fh4>\n\u003Cp>Handles form submission processing:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">$service = app(\\Afsakar\\FilamentFormBuilder\\Services\\FormSubmissionService::class);\n\n\u002F\u002F Submit a form\n$submission = $service-&gt;submit($form, $data);\n\n\u002F\u002F Submit using DTO\n$submission = $service-&gt;submitFromDto($formSubmissionData);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4 id=\"formsendservice\">FormSendService\u003C\u002Fh4>\n\u003Cp>Handles bulk email sending:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">$service = app(\\Afsakar\\FilamentFormBuilder\\Services\\FormSendService::class);\n\n\u002F\u002F Send to multiple recipients\n$service-&gt;sendToMultipleRecipients($emailTemplate, $recipients, $subject, $data);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4 id=\"formrenderservice\">FormRenderService\u003C\u002Fh4>\n\u003Cp>Renders form components:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">$service = app(\\Afsakar\\FilamentFormBuilder\\Services\\FormRenderService::class);\n\n\u002F\u002F Get form components\n$components = $service-&gt;getFormComponents($form);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4 id=\"fieldtyperegistry\">FieldTypeRegistry\u003C\u002Fh4>\n\u003Cp>Manages field type registration:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">$registry = app(\\Afsakar\\FilamentFormBuilder\\Services\\FieldTypeRegistry::class);\n\n\u002F\u002F Get all field types\n$fieldTypes = $registry-&gt;all();\n\n\u002F\u002F Get specific field type\n$fieldType = $registry-&gt;get('text');\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":40,"data":74},{"content":75},"\u003Ch2 id=\"advanced-usage\">Advanced Usage\u003C\u002Fh2>\n\u003Ch3 id=\"template-snapshot-system\">Template Snapshot System\u003C\u002Fh3>\n\u003Cp>The package automatically preserves email templates at the time of sending or submission. This ensures data integrity and audit compliance.\u003C\u002Fp>\n\u003Ch4 id=\"how-it-works\">How It Works\u003C\u002Fh4>\n\u003Cp>When a form is submitted or an email is sent, the package creates a snapshot of the associated email template, including:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Template name\u003C\u002Fli>\n\u003Cli>Template subject (for submissions)\u003C\u002Fli>\n\u003Cli>Template content (HTML)\u003C\u002Fli>\n\u003Cli>Template content blocks (block builder configuration)\u003C\u002Fli>\n\u003Cli>Template settings (colors, logo, custom CSS, etc.)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4 id=\"benefits\">Benefits\u003C\u002Fh4>\n\u003Cul>\n\u003Cli>\u003Cstrong>Data Integrity\u003C\u002Fstrong>: Emails always display with their original template, even after template modifications\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Audit Trail\u003C\u002Fstrong>: Complete historical record of sent communications\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Template Freedom\u003C\u002Fstrong>: Update templates without affecting past records\u003C\u002Fli>\n\u003Cli>\u003Cstrong>Legal Compliance\u003C\u002Fstrong>: Maintain accurate records of all communications\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4 id=\"automatic-behavior\">Automatic Behavior\u003C\u002Fh4>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F When creating a submission - snapshot is automatic\n$service = app(\\Afsakar\\FilamentFormBuilder\\Services\\FormSubmissionService::class);\n$submission = $service-&gt;submit($form, $data);\n\u002F\u002F Template snapshot is automatically saved with the submission\n\n\u002F\u002F When sending emails - snapshot is automatic\n$service = app(\\Afsakar\\FilamentFormBuilder\\Services\\FormSendService::class);\n$formSend = $service-&gt;sendEmailFromDto($dto);\n\u002F\u002F Template snapshot is automatically saved with the send record\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch4 id=\"rendering-with-snapshot\">Rendering with Snapshot\u003C\u002Fh4>\n\u003Cp>When previewing or sending emails, the system automatically uses the snapshot if available:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F In PreviewFormSubmissionAction\nif ($submission-&gt;template_content_blocks || $submission-&gt;template_content) {\n    \u002F\u002F Uses snapshot - preserves original template\n    $snapshotTemplate = new EmailTemplate([...]);\n} else {\n    \u002F\u002F Falls back to current template for old records\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"custom-form-processing\">Custom Form Processing\u003C\u002Fh3>\n\u003Cp>Implement the \u003Ccode>CanProcessSubmission\u003C\u002Fcode> contract to add custom processing logic:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentFormBuilder\\Contracts\\CanProcessSubmission;\nuse Afsakar\\FilamentFormBuilder\\Models\\FormSubmission;\n\nclass CustomProcessor implements CanProcessSubmission\n{\n    public function process(FormSubmission $submission): void\n    {\n        \u002F\u002F Your custom logic\n        \u002F\u002F e.g., send to external API, trigger workflows, etc.\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"programmatic-form-creation\">Programmatic Form Creation\u003C\u002Fh3>\n\u003Cp>Create forms programmatically:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentFormBuilder\\Models\\Form;\nuse Afsakar\\FilamentFormBuilder\\Models\\FormSection;\nuse Afsakar\\FilamentFormBuilder\\Models\\FormField;\n\n$form = Form::create([\n    'title' =&gt; 'Contact Form',\n    'slug' =&gt; 'contact-form',\n    'type' =&gt; 'site',\n    'status' =&gt; 'active',\n    'is_active' =&gt; true,\n]);\n\n$section = $form-&gt;sections()-&gt;create([\n    'title' =&gt; 'Personal Information',\n    'grid_columns' =&gt; 2,\n    'order' =&gt; 1,\n]);\n\n$section-&gt;fields()-&gt;create([\n    'type' =&gt; 'text',\n    'name' =&gt; 'name',\n    'label' =&gt; 'Full Name',\n    'is_required' =&gt; true,\n    'order' =&gt; 1,\n]);\n\n$section-&gt;fields()-&gt;create([\n    'type' =&gt; 'email',\n    'name' =&gt; 'email',\n    'label' =&gt; 'Email Address',\n    'is_required' =&gt; true,\n    'order' =&gt; 2,\n]);\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"queue-configuration\">Queue Configuration\u003C\u002Fh3>\n\u003Cp>For high-volume email sending, configure a dedicated queue:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F config\u002Fqueue.php\n'connections' =&gt; [\n    'form-emails' =&gt; [\n        'driver' =&gt; 'redis',\n        'connection' =&gt; 'default',\n        'queue' =&gt; 'form-emails',\n        'retry_after' =&gt; 90,\n    ],\n],\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Update your \u003Ccode>.env\u003C\u002Fcode>:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-env\">FORM_BUILDER_EMAIL_QUEUE=form-emails\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Run the queue worker:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">php artisan queue:work --queue=form-emails\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":40,"data":77},{"content":78},"\u003Ch2 id=\"widgets\">Widgets\u003C\u002Fh2>\n\u003Cp>The package includes comprehensive analytics widgets for tracking form submissions and sent emails. All widgets are automatically registered and available for use.\u003C\u002Fp>\n\u003Ch3 id=\"available-widgets\">Available Widgets\u003C\u002Fh3>\n\u003Cdiv style=\"text-align: center;\">\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fsc-2.png\" alt=\"Widgets Overview Screenshot\" style=\"width: 49.5%;\"\u002F>\n    \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Frefs\u002Fheads\u002Fmain\u002Fassets\u002Fsc-4.png\" alt=\"Widgets Overview Screenshot 2\" style=\"width: 49.5%;\"\u002F>\n\u003C\u002Fdiv>\n\u003Ch4 id=\"1-formsubmissionstatswidget\">1. FormSubmissionStatsWidget\u003C\u002Fh4>\n\u003Cp>Displays key statistics about form submissions with interactive charts:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Total submissions (all time with 7-day trend chart)\u003C\u002Fli>\n\u003Cli>Today's submissions\u003C\u002Fli>\n\u003Cli>Weekly submissions with percentage change\u003C\u002Fli>\n\u003Cli>Unread submissions count\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4 id=\"2-formsendstatswidget\">2. FormSendStatsWidget\u003C\u002Fh4>\n\u003Cp>Displays key statistics about sent forms:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Total sent forms (all time with 7-day trend chart)\u003C\u002Fli>\n\u003Cli>Today's sent forms\u003C\u002Fli>\n\u003Cli>Monthly sent forms with percentage change\u003C\u002Fli>\n\u003Cli>Total recipients reached\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4 id=\"3-formsubmissionschartwidget\">3. FormSubmissionsChartWidget\u003C\u002Fh4>\n\u003Cp>Interactive line chart showing submission trends with multiple time range filters:\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Last 7 days\u003C\u002Fli>\n\u003Cli>Last 30 days\u003C\u002Fli>\n\u003Cli>Last 3 months (weekly aggregation)\u003C\u002Fli>\n\u003Cli>This year (monthly aggregation)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch4 id=\"4-formsubmissionsbyformwidget\">4. FormSubmissionsByFormWidget\u003C\u002Fh4>\n\u003Cp>Bar chart displaying submission counts per form (top 10 active forms with color-coded bars).\u003C\u002Fp>\n\u003Ch4 id=\"5-latestformsubmissionswidget\">5. LatestFormSubmissionsWidget\u003C\u002Fh4>\n\u003Cp>Table widget showing the 5 most recent submissions with quick view actions.\u003C\u002Fp>\n\u003Ch4 id=\"6-latestformsendswidget\">6. LatestFormSendsWidget\u003C\u002Fh4>\n\u003Cp>Table widget showing the 5 most recent sent forms with quick view actions.\u003C\u002Fp>\n\u003Ch3 id=\"using-widgets-on-resource-pages\">Using Widgets on Resource Pages\u003C\u002Fh3>\n\u003Cp>Widgets are automatically displayed on their respective resource list pages:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F In ListFormSubmissions.php\nprotected function getHeaderWidgets(): array\n{\n    return [\n        FormSubmissionStatsWidget::class,\n        FormSubmissionsChartWidget::class,\n        FormSubmissionsByFormWidget::class,\n    ];\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"using-widgets-on-dashboard\">Using Widgets on Dashboard\u003C\u002Fh3>\n\u003Cp>To display widgets on your Filament dashboard, add them to your dashboard configuration:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\u002F\u002F In your Dashboard page\nuse Afsakar\\FilamentFormBuilder\\Filament\\Widgets\\FormSubmissionStatsWidget;\nuse Afsakar\\FilamentFormBuilder\\Filament\\Widgets\\FormSendStatsWidget;\nuse Afsakar\\FilamentFormBuilder\\Filament\\Widgets\\LatestFormSubmissionsWidget;\n\nprotected function getHeaderWidgets(): array\n{\n    return [\n        FormSubmissionStatsWidget::class,\n        FormSendStatsWidget::class,\n    ];\n}\n\nprotected function getFooterWidgets(): array\n{\n    return [\n        LatestFormSubmissionsWidget::class,\n    ];\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3 id=\"customizing-widgets\">Customizing Widgets\u003C\u002Fh3>\n\u003Cp>You can customize widgets by extending them:\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">use Afsakar\\FilamentFormBuilder\\Filament\\Widgets\\FormSubmissionStatsWidget;\n\nclass CustomSubmissionStats extends FormSubmissionStatsWidget\n{\n    protected static ?int $sort = 10;\n    \n    protected function getStats(): array\n    {\n        $stats = parent::getStats();\n        \n        \u002F\u002F Add your custom stats\n        $stats[] = Stat::make('Custom Metric', $value)\n            -&gt;description('Custom description')\n            -&gt;color('info');\n            \n        return $stats;\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>",{"type":40,"data":80},{"content":81},"\u003Ch2 id=\"troubleshooting\">Troubleshooting\u003C\u002Fh2>\n\u003Ch3 id=\"forms-not-appearing\">Forms Not Appearing\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Verify \u003Ccode>is_active\u003C\u002Fcode> is set to \u003Ccode>true\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"file-uploads-not-working\">File Uploads Not Working\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Ensure Spatie Media Library is properly configured\u003C\u002Fli>\n\u003Cli>Check storage permissions: \u003Ccode>php artisan storage:link\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Verify disk configuration in \u003Ccode>config\u002Ffilesystems.php\u003C\u002Fcode>\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"emails-not-sending\">Emails Not Sending\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Check queue configuration and ensure workers are running\u003C\u002Fli>\n\u003Cli>Verify email credentials in \u003Ccode>.env\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Check the \u003Ccode>failed_jobs\u003C\u002Fcode> table for errors\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3 id=\"performance-issues-with-large-recipient-lists\">Performance Issues with Large Recipient Lists\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>Reduce \u003Ccode>FORM_BUILDER_EMAIL_CHUNK_SIZE\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Increase \u003Ccode>FORM_BUILDER_EMAIL_CHUNK_DELAY\u003C\u002Fcode>\u003C\u002Fli>\n\u003Cli>Use a dedicated queue for form emails\u003C\u002Fli>\n\u003C\u002Ful>",{"type":40,"data":83},{"content":84},"\u003Ch2 id=\"security\">Security\u003C\u002Fh2>\n\u003Cp>If you discover any security-related issues, please email \u003Ca href=\"mailto:afsakarr@gmail.com\">afsakarr@gmail.com\u003C\u002Fa> instead of using the issue tracker.\u003C\u002Fp>",{"type":40,"data":86},{"content":87},"\u003Ch2 id=\"credits\">Credits\u003C\u002Fh2>\n\u003Cul>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fafsakar\">Azad Furkan ŞAKAR\u003C\u002Fa>\u003C\u002Fli>\n\u003Cli>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fafsakar\u002Ffilament-form-builder-docs\u002Fblob\u002Fmain\u002F..\u002F..\u002Fcontributors\">All Contributors\u003C\u002Fa>\u003C\u002Fli>\n\u003C\u002Ful>",{"type":40,"data":89},{"content":90},"\u003Ch2 id=\"support\">Support\u003C\u002Fh2>\n\u003Cp>If you have a question, bug or feature request, please e-mail me at \u003Ca href=\"mailto:afsakarr@gmail.com\">afsakarr@gmail.com\u003C\u002Fa> Love to hear from you!\u003C\u002Fp>",[92,95,98,101,104,107,110,113,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,176,179,182,186,189,192,195,198,201,204,207,210,213,216,219,222,225,228,231,234,237,240,243,246,249,252,255,258,261,264,267,270,273,276,279,282,285,288,291,294,297,300,303,306,309,312,315,318,321,324,327],{"id":93,"label":94,"level":6},"overview","Overview",{"id":96,"label":97,"level":27},"key-features","Key Features",{"id":99,"label":100,"level":27},"built-in-field-types","Built-in Field Types",{"id":102,"label":103,"level":27},"built-in-email-blocks","Built-in Email Blocks",{"id":105,"label":106,"level":6},"requirements","Requirements",{"id":108,"label":109,"level":6},"installation","Installation",{"id":111,"label":112,"level":27},"1-install-the-package","1. Install the Package",{"id":114,"label":115,"level":27},"2-publish-configuration","2. Publish Configuration",{"id":117,"label":118,"level":27},"3-publish-migrations","3. Publish Migrations",{"id":120,"label":121,"level":27},"4-publish-render-type-images","4. Publish Render Type Images",{"id":123,"label":124,"level":27},"4-run-migrations","4. Run Migrations",{"id":126,"label":127,"level":27},"5-publish-views-optional","5. Publish Views (Optional)",{"id":129,"label":130,"level":27},"6-register-the-plugin","6. Register the Plugin",{"id":132,"label":133,"level":27},"7-configure-environment-variables-optional","7. Configure Environment Variables (Optional)",{"id":135,"label":136,"level":6},"configuration","Configuration",{"id":138,"label":139,"level":27},"models","Models",{"id":141,"label":142,"level":27},"sender-model","Sender Model",{"id":144,"label":145,"level":27},"number-prefixes","Number Prefixes",{"id":147,"label":148,"level":27},"email-queue-settings","Email Queue Settings",{"id":150,"label":151,"level":27},"custom-field-types","Custom Field Types",{"id":153,"label":154,"level":27},"custom-email-blocks","Custom Email Blocks",{"id":156,"label":157,"level":27},"icons","Icons",{"id":159,"label":160,"level":6},"usage","Usage",{"id":162,"label":163,"level":27},"creating-a-form","Creating a Form",{"id":165,"label":166,"level":27},"adding-sections-and-fields","Adding Sections and Fields",{"id":168,"label":169,"level":27},"conditional-visibility","Conditional Visibility",{"id":171,"label":172,"level":27},"rendering-a-form","Rendering a Form",{"id":174,"label":175,"level":27},"form-submissions","Form Submissions",{"id":177,"label":178,"level":27},"email-templates","Email Templates",{"id":180,"label":181,"level":27},"bulk-email-sending-form-sends","Bulk Email Sending (Form Sends)",{"id":183,"label":184,"level":185},"csv-email-import","CSV Email Import",4,{"id":187,"label":188,"level":185},"email-tracking-analytics","Email Tracking & Analytics",{"id":190,"label":191,"level":6},"extending-the-package","Extending the Package",{"id":193,"label":194,"level":27},"creating-custom-field-types","Creating Custom Field Types",{"id":196,"label":197,"level":27},"creating-custom-email-blocks","Creating Custom Email Blocks",{"id":199,"label":200,"level":6},"events","Events",{"id":202,"label":203,"level":27},"formsubmitted","FormSubmitted",{"id":205,"label":206,"level":27},"emailsent","EmailSent",{"id":208,"label":209,"level":27},"formsendcreated","FormSendCreated",{"id":211,"label":212,"level":6},"testing","Testing",{"id":214,"label":215,"level":27},"running-tests","Running Tests",{"id":217,"label":218,"level":27},"running-specific-tests","Running Specific Tests",{"id":220,"label":221,"level":27},"writing-tests","Writing Tests",{"id":223,"label":224,"level":27},"code-quality","Code Quality",{"id":226,"label":227,"level":6},"database-structure","Database Structure",{"id":229,"label":230,"level":6},"api-reference","API Reference",{"id":232,"label":233,"level":27},"services","Services",{"id":235,"label":236,"level":185},"formsubmissionservice","FormSubmissionService",{"id":238,"label":239,"level":185},"formsendservice","FormSendService",{"id":241,"label":242,"level":185},"formrenderservice","FormRenderService",{"id":244,"label":245,"level":185},"fieldtyperegistry","FieldTypeRegistry",{"id":247,"label":248,"level":6},"advanced-usage","Advanced Usage",{"id":250,"label":251,"level":27},"template-snapshot-system","Template Snapshot System",{"id":253,"label":254,"level":185},"how-it-works","How It Works",{"id":256,"label":257,"level":185},"benefits","Benefits",{"id":259,"label":260,"level":185},"automatic-behavior","Automatic Behavior",{"id":262,"label":263,"level":185},"rendering-with-snapshot","Rendering with Snapshot",{"id":265,"label":266,"level":27},"custom-form-processing","Custom Form Processing",{"id":268,"label":269,"level":27},"programmatic-form-creation","Programmatic Form Creation",{"id":271,"label":272,"level":27},"queue-configuration","Queue Configuration",{"id":274,"label":275,"level":6},"widgets","Widgets",{"id":277,"label":278,"level":27},"available-widgets","Available Widgets",{"id":280,"label":281,"level":185},"1-formsubmissionstatswidget","1. FormSubmissionStatsWidget",{"id":283,"label":284,"level":185},"2-formsendstatswidget","2. FormSendStatsWidget",{"id":286,"label":287,"level":185},"3-formsubmissionschartwidget","3. FormSubmissionsChartWidget",{"id":289,"label":290,"level":185},"4-formsubmissionsbyformwidget","4. FormSubmissionsByFormWidget",{"id":292,"label":293,"level":185},"5-latestformsubmissionswidget","5. LatestFormSubmissionsWidget",{"id":295,"label":296,"level":185},"6-latestformsendswidget","6. LatestFormSendsWidget",{"id":298,"label":299,"level":27},"using-widgets-on-resource-pages","Using Widgets on Resource Pages",{"id":301,"label":302,"level":27},"using-widgets-on-dashboard","Using Widgets on Dashboard",{"id":304,"label":305,"level":27},"customizing-widgets","Customizing Widgets",{"id":307,"label":308,"level":6},"troubleshooting","Troubleshooting",{"id":310,"label":311,"level":27},"forms-not-appearing","Forms Not Appearing",{"id":313,"label":314,"level":27},"file-uploads-not-working","File Uploads Not Working",{"id":316,"label":317,"level":27},"emails-not-sending","Emails Not Sending",{"id":319,"label":320,"level":27},"performance-issues-with-large-recipient-lists","Performance Issues with Large Recipient Lists",{"id":322,"label":323,"level":6},"security","Security",{"id":325,"label":326,"level":6},"credits","Credits",{"id":328,"label":329,"level":6},"support","Support",[],{"html":332},"\u003Ctitle>FilamentPHP Form Builder Plugin - Azad Furkan Şakar\u003C\u002Ftitle>\n\u003Cmeta name=\"description\" content=\"Alanlar, gönderimler, e-posta şablonları ve toplu gönderim özellikleriyle dinamik Filament formları oluşturun ve yönetin.\">\n\u003Cmeta name=\"keywords\" content=\"laravel, backend, developer, php\">\n\u003Clink rel=\"canonical\" href=\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-form-builder\">\n\u003Clink rel=\"alternate\" hreflang=\"en\" href=\"https:\u002F\u002Fafsakar.dev\u002Fpackages\u002Ffilament-form-builder\">\n\u003Clink rel=\"alternate\" hreflang=\"tr\" href=\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-form-builder\">\n\u003Clink rel=\"alternate\" hreflang=\"x-default\" href=\"https:\u002F\u002Fafsakar.dev\u002Fpackages\u002Ffilament-form-builder\">\n\u003Cmeta name=\"robots\" content=\"index, follow\">\n\u003Cmeta property=\"og:title\" content=\"FilamentPHP Form Builder Plugin\">\n\u003Cmeta property=\"og:description\" content=\"Alanlar, gönderimler, e-posta şablonları ve toplu gönderim özellikleriyle dinamik Filament formları oluşturun ve yönetin.\">\n\u003Cmeta property=\"og:type\" content=\"website\">\n\u003Cmeta property=\"og:site_name\" content=\"Azad Furkan Şakar\">\n\u003Cmeta property=\"og:url\" content=\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-form-builder\">\n\u003Cmeta property=\"og:image\" content=\"https:\u002F\u002Fafsakar.dev\u002Fstorage\u002Fog-images\u002Fpackages\u002F2-tr.png\">\n\n\u003Cmeta name=\"twitter:site\" content=\"afsakar\">\n\u003Cmeta name=\"twitter:card\" content=\"summary_large_image\">\n\u003Cmeta name=\"twitter:image\" content=\"https:\u002F\u002Fafsakar.dev\u002Fstorage\u002Fog-images\u002Fpackages\u002F2-tr.png\">\n\u003Cmeta name=\"twitter:title\" content=\"FilamentPHP Form Builder Plugin\">\n\u003Cmeta name=\"twitter:description\" content=\"Alanlar, gönderimler, e-posta şablonları ve toplu gönderim özellikleriyle dinamik Filament formları oluşturun ve yönetin.\">\n\u003Cmeta name=\"twitter:url\" content=\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-form-builder\">\n\u003Cscript type=\"application\u002Fld+json\">{\"@context\":\"https:\u002F\u002Fschema.org\",\"@type\":\"WebPage\",\"name\":\"FilamentPHP Form Builder Plugin\",\"description\":\"Alanlar, gönderimler, e-posta şablonları ve toplu gönderim özellikleriyle dinamik Filament formları oluşturun ve yönetin.\",\"url\":\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-form-builder\",\"image\":\"https:\u002F\u002Fafsakar.dev\u002Fstorage\u002Fog-images\u002Fpackages\u002F2-tr.png\",\"mainEntityOfPage\":{\"@type\":\"WebPage\",\"@id\":\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-form-builder\"}}\u003C\u002Fscript>\u003Cscript type=\"application\u002Fld+json\">{\"@context\":\"https:\u002F\u002Fschema.org\",\"@type\":\"BreadcrumbList\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\u002F\u002Fafsakar.dev\u002Ftr\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Paketler\",\"item\":\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Form Builder\",\"item\":\"https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-form-builder\"}]}\u003C\u002Fscript>\u003Cscript type=\"application\u002Fld+json\">{\"@context\":\"https:\u002F\u002Fschema.org\",\"@type\":\"Person\",\"name\":\"Azad Furkan Şakar\",\"url\":\"https:\u002F\u002Fafsakar.dev\",\"@id\":\"https:\u002F\u002Fafsakar.dev\u002F#person\",\"jobTitle\":\"Backend Developer\",\"image\":\"https:\u002F\u002Fafsakar.dev\u002Fstorage\u002Fsettings\u002Fseo\u002F01KZB42F3FQQSDTQRYYX861RAA.jpeg\",\"sameAs\":[\"https:\u002F\u002Fx.com\u002Fafsakar\",\"https:\u002F\u002Flinkedin.com\u002Fin\u002Fafsakar\",\"https:\u002F\u002Fgithub.com\u002Fafsakar\"]}\u003C\u002Fscript>",{"en":334,"tr":335},"https:\u002F\u002Fafsakar.dev\u002Fpackages\u002Ffilament-form-builder","https:\u002F\u002Fafsakar.dev\u002Ftr\u002Fpaketler\u002Ffilament-form-builder",{"type":4,"id":6}]