components([ Tabs::make('Employee') ->tabs([ Tab::make('Personal') ->schema([ HrForm::fileUpload('profile_photo_path') ->label('Photo') ->image() ->avatar() ->imageEditor(), TextInput::make('employee_number') ->required() ->maxLength(50) ->unique(ignoreRecord: true), TextInput::make('full_name') ->required() ->maxLength(255), TextInput::make('national_id') ->label('National ID') ->maxLength(50), Select::make('gender') ->options(Gender::class) ->required() ->native(false), DatePicker::make('birth_date') ->required(), TextInput::make('phone') ->tel() ->default(config('hr.default_phone')) ->required(), Textarea::make('address') ->rows(3) ->columnSpanFull(), ]) ->columns(2), Tab::make('Employment') ->schema([ Select::make('department_id') ->relationship('department', 'name') ->searchable() ->preload() ->required(), Select::make('position_id') ->relationship('position', 'name') ->searchable() ->preload() ->required(), Select::make('shift_id') ->relationship('shift', 'name') ->searchable() ->preload() ->required(), Select::make('employment_status') ->options(EmploymentStatus::class) ->default(EmploymentStatus::Active) ->required() ->native(false), DatePicker::make('hire_date') ->required(), DatePicker::make('termination_date'), Textarea::make('notes') ->rows(4) ->columnSpanFull(), ]) ->columns(2), ]) ->columnSpanFull(), ]); } }