Laravel AT Protocol Client (alpha & unstable)
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}