schema([ Section::make('Style Basics') ->schema([ TextInput::make('key') ->required() ->maxLength(120) ->unique(ignoreRecord: true), TextInput::make('name') ->required() ->maxLength(120), TextInput::make('version') ->numeric() ->default(1) ->disabled() ->dehydrated(false) ->helperText('Auto-increments when core style configuration changes.'), TextInput::make('category') ->maxLength(50), TextInput::make('sort') ->numeric() ->default(0) ->required(), Toggle::make('is_active') ->default(true), Toggle::make('is_premium') ->default(false), Toggle::make('requires_source_image') ->default(true), ]) ->columns(3), Section::make('Provider Binding') ->schema([ Select::make('provider') ->options([ 'runware' => 'runware.ai', ]) ->required() ->default('runware'), TextInput::make('provider_model') ->maxLength(120), ]) ->columns(2), Section::make('Prompts') ->schema([ Textarea::make('description') ->rows(2), Textarea::make('prompt_template') ->rows(5), Textarea::make('negative_prompt_template') ->rows(4), ]), Section::make('Metadata') ->schema([ KeyValue::make('metadata') ->nullable(), ]), ]); } public static function table(Table $table): Table { return $table ->defaultSort('sort') ->columns([ Tables\Columns\TextColumn::make('key') ->searchable() ->copyable(), Tables\Columns\TextColumn::make('name') ->searchable(), Tables\Columns\TextColumn::make('version') ->sortable() ->toggleable(), Tables\Columns\TextColumn::make('provider') ->badge(), Tables\Columns\TextColumn::make('provider_model') ->toggleable(), Tables\Columns\IconColumn::make('is_active') ->boolean(), Tables\Columns\IconColumn::make('is_premium') ->boolean(), Tables\Columns\TextColumn::make('sort') ->sortable(), Tables\Columns\TextColumn::make('updated_at') ->since() ->toggleable(), ]) ->filters([ Tables\Filters\TernaryFilter::make('is_active'), Tables\Filters\TernaryFilter::make('is_premium'), ]) ->actions([ Actions\EditAction::make() ->after(fn (array $data, AiStyle $record) => app(SuperAdminAuditLogger::class)->recordModelMutation( 'updated', $record, SuperAdminAuditLogger::fieldsMetadata(array_keys($data)), static::class )), Actions\DeleteAction::make() ->after(fn (AiStyle $record) => app(SuperAdminAuditLogger::class)->recordModelMutation( 'deleted', $record, source: static::class )), ]) ->bulkActions([ Actions\DeleteBulkAction::make(), ]); } public static function getPages(): array { return [ 'index' => ManageAiStyles::route('/'), ]; } }