schema([ Forms\Components\TextInput::make('name') ->required() ->maxLength(255), Forms\Components\Textarea::make('description') ->maxLength(65535) ->columnSpanFull(), Forms\Components\TextInput::make('cost_per_meter') ->required() ->numeric() ->prefix('R') ->label('Cost per Meter'), Forms\Components\TextInput::make('cost_per_m2') ->required() ->numeric() ->prefix('R') ->label('Cost per m²'), Forms\Components\Select::make('type') ->options([ 'wallpaper' => 'Wallpaper', 'mural' => 'Mural', 'both' => 'Both', ]) ->required(), Forms\Components\TextInput::make('width') ->label('Width (meters)') ->numeric() ->step(0.01) ->minValue(0.1) ->default(1) ->helperText('Width of wallpaper roll in meters'), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('name') ->searchable(), Tables\Columns\TextColumn::make('cost_per_meter') ->money('ZAR') ->label('Cost/m') ->sortable(), Tables\Columns\TextColumn::make('cost_per_m2') ->money('ZAR') ->label('Cost/m²') ->sortable(), Tables\Columns\TextColumn::make('type') ->badge() ->color(fn (string $state): string => match ($state) { 'wallpaper' => 'success', 'mural' => 'info', 'both' => 'warning', }), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable() ->toggleable(isToggledHiddenByDefault: true), ]) ->filters([ Tables\Filters\SelectFilter::make('type') ->options([ 'wallpaper' => 'Wallpaper', 'mural' => 'Mural', 'both' => 'Both', ]), ]) ->actions([ // ]) ->bulkActions([ // ]); } public static function getPages(): array { return [ 'index' => Pages\ManagePrintStocks::route('/'), ]; } }