label('Download') ->icon('heroicon-o-arrow-down-tray') ->color('success') ->visible(fn (): bool => $this->record->status === ReviewPackStatus::Ready->value) ->url(fn (): string => app(ReviewPackService::class)->generateDownloadUrl($this->record)) ->openUrlInNewTab(), UiEnforcement::forAction( Actions\Action::make('regenerate') ->label('Regenerate') ->icon('heroicon-o-arrow-path') ->color('primary') ->requiresConfirmation() ->modalDescription('This will generate a new review pack with the same options. The current pack will remain available until it expires.') ->action(function (array $data): void { /** @var ReviewPack $record */ $record = $this->record; $options = array_merge($record->options ?? [], [ 'include_pii' => (bool) ($data['include_pii'] ?? ($record->options['include_pii'] ?? true)), 'include_operations' => (bool) ($data['include_operations'] ?? ($record->options['include_operations'] ?? true)), ]); ReviewPackResource::executeGeneration($options); }) ->form(function (): array { /** @var ReviewPack $record */ $record = $this->record; $currentOptions = $record->options ?? []; return [ Section::make('Pack options') ->schema([ Toggle::make('include_pii') ->label('Include PII') ->helperText('Include personally identifiable information in the export.') ->default((bool) ($currentOptions['include_pii'] ?? true)), Toggle::make('include_operations') ->label('Include operations') ->helperText('Include recent operation history in the export.') ->default((bool) ($currentOptions['include_operations'] ?? true)), ]), ]; }) ) ->requireCapability(Capabilities::REVIEW_PACK_MANAGE) ->apply(), ]; } }