slug = $slug; $this->name = $name; $this->description = trim((string) ($definition['description'] ?? '')); $this->group = (string) ($definition['group'] ?? 'general'); $this->renderer = (string) ($definition['renderer'] ?? $slug); $size = (string) ($definition['size'] ?? 'any'); $this->size = in_array($size, ['any', 'wide', 'sidebar'], true) ? $size : 'any'; $this->fields = array_values((array) ($definition['fields'] ?? [])); $this->common = array_merge( [ 'title' => true, 'affix' => false, 'visibility' => true, 'animation' => true, 'layout' => true, ], (array) ($definition['common'] ?? []) ); $this->assets = array_values(array_unique(array_map('strval', (array) ($definition['assets'] ?? [])))); } public function slug(): string { return $this->slug; } public function id_base(): string { return 'aksrt_widget_' . $this->slug; } public function name(): string { return $this->name; } public function description(): string { return $this->description; } public function group(): string { return $this->group; } public function renderer(): string { return $this->renderer; } public function size(): string { return $this->size; } public function assets(): array { return $this->assets; } public function fields(): array { return array_merge(CommonFields::for_definition($this->common), $this->fields); } public function defaults(): array { return FieldSchema::defaults($this->fields()); } public function normalize(array $input): array { return FieldSchema::normalize($this->fields(), $input); } }