Files
ABSDEV/Modules/Builder/Services/BuilderRegistry.php
T
Mark Gregory 412e8134a1 Builder administration area
* Page builder foundation
* Form builder document type
* Dashboard builder document type
* Report builder document type
* Menu builder document type
* Email builder document type
* Query builder document type
* Workflow builder document type
* Reusable component registry
* Form-field registry
* Dashboard-widget registry
* Hero, heading, and rich-content components
* JSON document schema
* Saved builder documents
* Draft, published, and archived states
* Document version history
* Reusable builder templates
* Component rendering service
* Extensible BuilderComponent contract
* Authenticated Builder REST endpoints
* Administration navigation
* Builder permissions
* Module registration and test
2026-07-24 13:29:58 +01:00

25 lines
1.6 KiB
PHP

<?php
namespace Modules\Builder\Services;
use InvalidArgumentException;
use Modules\Builder\Contracts\BuilderComponent;
use Modules\Builder\Components\ContentComponent;
use Modules\Builder\Components\HeadingComponent;
use Modules\Builder\Components\HeroComponent;
final class BuilderRegistry
{
private array $components=[];
private array $widgets=[];
private array $fields=[];
public function registerDefaults(): void
{
foreach ([HeroComponent::class, HeadingComponent::class, ContentComponent::class] as $component) $this->registerComponent(new $component());
foreach (['metric','chart','table','activity','calendar'] as $widget) $this->widgets[$widget]=['type'=>$widget,'label'=>str($widget)->headline()->toString()];
foreach (['text','textarea','email','number','select','checkbox','date','file'] as $field) $this->fields[$field]=['type'=>$field,'label'=>str($field)->headline()->toString()];
}
public function registerComponent(BuilderComponent $component): void { $this->components[$component->type()]=$component; }
public function component(string $type): BuilderComponent { return $this->components[$type] ?? throw new InvalidArgumentException("Unknown builder component [$type]."); }
public function components(): array { return array_map(fn(BuilderComponent $c)=>['type'=>$c->type(),'label'=>$c->label(),'category'=>$c->category(),'schema'=>$c->schema(),'defaults'=>$c->defaults()],array_values($this->components)); }
public function widgets(): array { return array_values($this->widgets); }
public function fields(): array { return array_values($this->fields); }
}