Laravel AT Protocol Client (alpha & unstable)
at dev 1.9 kB view raw
1<?php 2 3namespace SocialDept\AtpClient\Builders\Embeds; 4 5class ImagesBuilder 6{ 7 protected array $images = []; 8 9 /** 10 * Create a new images builder instance 11 */ 12 public static function make(): self 13 { 14 return new self; 15 } 16 17 /** 18 * Add an image to the embed 19 * 20 * @param mixed $blob BlobReference or blob array 21 * @param string $alt Alt text for the image 22 * @param array|null $aspectRatio [width, height] aspect ratio 23 */ 24 public function add(mixed $blob, string $alt, ?array $aspectRatio = null): self 25 { 26 $image = [ 27 'image' => $this->normalizeBlob($blob), 28 'alt' => $alt, 29 ]; 30 31 if ($aspectRatio !== null) { 32 $image['aspectRatio'] = [ 33 'width' => $aspectRatio[0], 34 'height' => $aspectRatio[1], 35 ]; 36 } 37 38 $this->images[] = $image; 39 40 return $this; 41 } 42 43 /** 44 * Get all images 45 */ 46 public function getImages(): array 47 { 48 return $this->images; 49 } 50 51 /** 52 * Check if builder has images 53 */ 54 public function hasImages(): bool 55 { 56 return ! empty($this->images); 57 } 58 59 /** 60 * Get the count of images 61 */ 62 public function count(): int 63 { 64 return count($this->images); 65 } 66 67 /** 68 * Convert to embed array format 69 */ 70 public function toArray(): array 71 { 72 return [ 73 '$type' => 'app.bsky.embed.images', 74 'images' => $this->images, 75 ]; 76 } 77 78 /** 79 * Normalize blob to array format 80 */ 81 protected function normalizeBlob(mixed $blob): array 82 { 83 if (is_array($blob)) { 84 return $blob; 85 } 86 87 if (method_exists($blob, 'toArray')) { 88 return $blob->toArray(); 89 } 90 91 return (array) $blob; 92 } 93}