*/ public function addonKeys(): array { return array_values(array_filter(array_map( static fn (mixed $key): string => trim((string) $key), (array) config('ai-editing.entitlements.addon_keys', ['ai_styling_unlock']) ))); } public function lockedMessage(): string { $message = trim((string) config('ai-editing.entitlements.locked_message', '')); if ($message !== '') { return $message; } return 'AI editing requires the Premium package or the AI Styling add-on.'; } /** * @return array{ * allowed: bool, * granted_by: 'package'|'addon'|null, * required_feature: string, * addon_keys: array * } */ public function resolveForEvent(Event $event): array { return $this->featureEntitlements->resolveForEvent( $event, $this->packageFeatureKey(), $this->addonKeys(), ); } public function hasAccessForEvent(Event $event): bool { return (bool) $this->resolveForEvent($event)['allowed']; } }