+26
bskyembed/README.md
+26
bskyembed/README.md
···
1
+
## Run / Test
2
+
3
+
Install dependencies:
4
+
5
+
```bash
6
+
cd bskyembed
7
+
yarn
8
+
```
9
+
10
+
Run the dev server:
11
+
12
+
```bash
13
+
yarn dev
14
+
```
15
+
16
+
You can see the embed homepage at http://localhost:5173
17
+
18
+
### Testbed
19
+
20
+
In another terminal window, run the snippet dev script:
21
+
22
+
```bash
23
+
yarn dev-snippet
24
+
```
25
+
26
+
You can then see the testbed page at http://localhost:5173/test
+2
bskyembed/package.json
+2
bskyembed/package.json
···
4
4
"type": "module",
5
5
"scripts": {
6
6
"dev": "vite",
7
+
"dev-snippet": "tsc --project tsconfig.snippet.json && serve -s dist -p 3000 -n",
7
8
"build": "tsc && vite build",
8
9
"build-snippet": "tsc --project tsconfig.snippet.json",
9
10
"lint": "eslint --cache --ext .js,.jsx,.ts,.tsx src",
···
21
22
"eslint-config-preact": "^1.3.0",
22
23
"eslint-plugin-simple-import-sort": "^12.0.0",
23
24
"postcss": "^8.4.38",
25
+
"serve": "^14.2.5",
24
26
"tailwindcss": "^3.4.3",
25
27
"terser": "^5.43.1",
26
28
"typescript": "^5.8.3",
+11
-1
bskyembed/snippet/embed.ts
+11
-1
bskyembed/snippet/embed.ts
···
3
3
bluesky: {
4
4
scan: (element?: Pick<Element, 'querySelectorAll'>) => void
5
5
}
6
+
BSKY_DEV_EMBED_URL?: string
6
7
}
7
8
8
-
const EMBED_URL = 'https://embed.bsky.app'
9
+
/**
10
+
* Allow url to be overwritten during development
11
+
*/
12
+
const IS_DEV =
13
+
window.location.protocol === 'file:' ||
14
+
window.location.hostname === 'localhost'
15
+
const EMBED_URL =
16
+
IS_DEV && window.BSKY_DEV_EMBED_URL
17
+
? window.BSKY_DEV_EMBED_URL
18
+
: 'https://embed.bsky.app'
9
19
10
20
window.bluesky = window.bluesky || {
11
21
scan,
+1054
bskyembed/test.html
+1054
bskyembed/test.html
···
1
+
<!doctype html>
2
+
<html>
3
+
<head>
4
+
<link
5
+
rel="stylesheet"
6
+
href="https://unpkg.com/svbstrate@5.1.0/svbstrate.css" />
7
+
<style>
8
+
body {
9
+
padding: 2rem;
10
+
}
11
+
section {
12
+
margin-bottom: 4rem;
13
+
}
14
+
h1 {
15
+
margin-bottom: 1rem;
16
+
}
17
+
.grid {
18
+
display: grid;
19
+
grid-template-columns: repeat(auto-fill, minmax(400px, 1fr));
20
+
gap: 2rem;
21
+
}
22
+
.item {
23
+
text-align: center;
24
+
}
25
+
.item img {
26
+
width: 100%;
27
+
max-width: 400px;
28
+
display: block;
29
+
margin: 0 auto 0.5rem;
30
+
transition: opacity 0.2s ease-in-out;
31
+
}
32
+
</style>
33
+
<script>
34
+
// This overrides the default embed URL that the script uses
35
+
// (https://embed.bsky.app)
36
+
window.BSKY_DEV_EMBED_URL = 'http://localhost:5173'
37
+
</script>
38
+
<script
39
+
async
40
+
src="http://localhost:3000/embed.js"
41
+
charset="utf-8"></script>
42
+
</head>
43
+
<body class="p12">
44
+
<!-- Base embeds -->
45
+
<section>
46
+
<h1>Base embeds test</h1>
47
+
<div class="grid">
48
+
<div class="item">
49
+
<blockquote
50
+
class="bluesky-embed"
51
+
data-bluesky-uri="at://did:plc:yaqf6zpqlko6hkm5zukoilix/app.bsky.feed.post/3lkcj4xgmdc2l"
52
+
data-bluesky-cid="bafyreicsat53vek22bcwiciquqdffd7dyrpnink6dhf2nfdlvt5olvb5hm"
53
+
data-bluesky-embed-color-mode="system">
54
+
<p lang="en">
55
+
<br /><br /><a
56
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix/post/3lkcj4xgmdc2l?ref_src=embed"
57
+
>[image or embed]</a
58
+
>
59
+
</p>
60
+
— test-all-embeds-b.bsky.social (<a
61
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix?ref_src=embed"
62
+
>@test-all-embeds-b.bsky.social</a
63
+
>)
64
+
<a
65
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix/post/3lkcj4xgmdc2l?ref_src=embed"
66
+
>Mar 13, 2025 at 6:58 PM</a
67
+
>
68
+
</blockquote>
69
+
<div>Image</div>
70
+
</div>
71
+
72
+
<div class="item">
73
+
<blockquote
74
+
class="bluesky-embed"
75
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchac5lbs23"
76
+
data-bluesky-cid="bafyreihcgknwgp7kgph3w3mmqqa7mrw4f2rw2e7chrjsuy6viruajiw7di"
77
+
data-bluesky-embed-color-mode="system">
78
+
<p lang="en">
79
+
Test with self-label<br /><br /><a
80
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchac5lbs23?ref_src=embed"
81
+
>[image or embed]</a
82
+
>
83
+
</p>
84
+
— Embed Tester (<a
85
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
86
+
>@test-all-embeds-a.bsky.social</a
87
+
>)
88
+
<a
89
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchac5lbs23?ref_src=embed"
90
+
>Mar 13, 2025 at 6:24 PM</a
91
+
>
92
+
</blockquote>
93
+
<div>Image w/ label</div>
94
+
</div>
95
+
96
+
<div class="item">
97
+
<blockquote
98
+
class="bluesky-embed"
99
+
data-bluesky-uri="at://did:plc:yaqf6zpqlko6hkm5zukoilix/app.bsky.feed.post/3lkcj64e3x22l"
100
+
data-bluesky-cid="bafyreidafwmfabuo2fkz445of7pwetbud7vc4u4mcdjrflv46iivx4dmni"
101
+
data-bluesky-embed-color-mode="system">
102
+
<p lang="en">
103
+
<br /><br /><a
104
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix/post/3lkcj64e3x22l?ref_src=embed"
105
+
>[image or embed]</a
106
+
>
107
+
</p>
108
+
— test-all-embeds-b.bsky.social (<a
109
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix?ref_src=embed"
110
+
>@test-all-embeds-b.bsky.social</a
111
+
>)
112
+
<a
113
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix/post/3lkcj64e3x22l?ref_src=embed"
114
+
>Mar 13, 2025 at 6:59 PM</a
115
+
>
116
+
</blockquote>
117
+
<div>Image</div>
118
+
</div>
119
+
120
+
<div class="item">
121
+
<blockquote
122
+
class="bluesky-embed"
123
+
data-bluesky-uri="at://did:plc:5veiziiwyjpv5qmrlovrq2go/app.bsky.feed.post/3lwrv45dgzc2p"
124
+
data-bluesky-cid="bafyreiaik27g4gu5egf7k3gd3ut6lfbvjeggwavsvw6g3e2rtrsmhqwikq"
125
+
data-bluesky-embed-color-mode="system">
126
+
<p lang="en">
127
+
De Reclame, 11e Jaargang, No 8, 1932
128
+
designreviewed.com/artefacts/de...<br /><br /><a
129
+
href="https://bsky.app/profile/did:plc:5veiziiwyjpv5qmrlovrq2go/post/3lwrv45dgzc2p?ref_src=embed"
130
+
>[image or embed]</a
131
+
>
132
+
</p>
133
+
— Design Reviewed (<a
134
+
href="https://bsky.app/profile/did:plc:5veiziiwyjpv5qmrlovrq2go?ref_src=embed"
135
+
>@designreviewed.com</a
136
+
>)
137
+
<a
138
+
href="https://bsky.app/profile/did:plc:5veiziiwyjpv5qmrlovrq2go/post/3lwrv45dgzc2p?ref_src=embed"
139
+
>Aug 19, 2025 at 2:45 PM</a
140
+
>
141
+
</blockquote>
142
+
<div>Image x2</div>
143
+
</div>
144
+
145
+
<div class="item">
146
+
<blockquote
147
+
class="bluesky-embed"
148
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkjhqtunc22v"
149
+
data-bluesky-cid="bafyreiflpcym2ggfoyaj7rppnx3sds3vxw6oz3735a3tpmqmm7oupeatra"
150
+
data-bluesky-embed-color-mode="system">
151
+
<p lang="en">
152
+
Test with 3 images<br /><br /><a
153
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkjhqtunc22v?ref_src=embed"
154
+
>[image or embed]</a
155
+
>
156
+
</p>
157
+
— Embed Tester (<a
158
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
159
+
>@test-all-embeds-a.bsky.social</a
160
+
>)
161
+
<a
162
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkjhqtunc22v?ref_src=embed"
163
+
>Mar 16, 2025 at 1:22 PM</a
164
+
>
165
+
</blockquote>
166
+
<div>Image x3</div>
167
+
</div>
168
+
169
+
<div class="item">
170
+
<blockquote
171
+
class="bluesky-embed"
172
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkjhsgb4vk2z"
173
+
data-bluesky-cid="bafyreiafnxubhqmidi7tppgqepddcwcdarbpsobrccoihwdqkrcat4dpxy"
174
+
data-bluesky-embed-color-mode="system">
175
+
<p lang="en">
176
+
Test with 4 images<br /><br /><a
177
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkjhsgb4vk2z?ref_src=embed"
178
+
>[image or embed]</a
179
+
>
180
+
</p>
181
+
— Embed Tester (<a
182
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
183
+
>@test-all-embeds-a.bsky.social</a
184
+
>)
185
+
<a
186
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkjhsgb4vk2z?ref_src=embed"
187
+
>Mar 16, 2025 at 1:23 PM</a
188
+
>
189
+
</blockquote>
190
+
<div>Image x4</div>
191
+
</div>
192
+
193
+
<div class="item">
194
+
<blockquote
195
+
class="bluesky-embed"
196
+
data-bluesky-uri="at://did:plc:yaqf6zpqlko6hkm5zukoilix/app.bsky.feed.post/3lkcj5shusk2l"
197
+
data-bluesky-cid="bafyreif74k7knls6upxuxwl2e6jn7m2us7tn6t5rcx63zipujwqyioibi4"
198
+
data-bluesky-embed-color-mode="system">
199
+
<p lang="en">
200
+
<br /><br /><a
201
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix/post/3lkcj5shusk2l?ref_src=embed"
202
+
>[image or embed]</a
203
+
>
204
+
</p>
205
+
— test-all-embeds-b.bsky.social (<a
206
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix?ref_src=embed"
207
+
>@test-all-embeds-b.bsky.social</a
208
+
>)
209
+
<a
210
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix/post/3lkcj5shusk2l?ref_src=embed"
211
+
>Mar 13, 2025 at 6:58 PM</a
212
+
>
213
+
</blockquote>
214
+
<div>Video</div>
215
+
</div>
216
+
217
+
<div class="item">
218
+
<blockquote
219
+
class="bluesky-embed"
220
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchdnqmzc23"
221
+
data-bluesky-cid="bafyreiaegqfmhl63vxm3uuipkdn2dqivyrqy65gyygqib4upse7djnauqy"
222
+
data-bluesky-embed-color-mode="system">
223
+
<p lang="en">
224
+
Test video with self-label<br /><br /><a
225
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchdnqmzc23?ref_src=embed"
226
+
>[image or embed]</a
227
+
>
228
+
</p>
229
+
— Embed Tester (<a
230
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
231
+
>@test-all-embeds-a.bsky.social</a
232
+
>)
233
+
<a
234
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchdnqmzc23?ref_src=embed"
235
+
>Mar 13, 2025 at 6:26 PM</a
236
+
>
237
+
</blockquote>
238
+
<div>Video w/ label</div>
239
+
</div>
240
+
241
+
<div class="item">
242
+
<blockquote
243
+
class="bluesky-embed"
244
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchef5c2c23"
245
+
data-bluesky-cid="bafyreigua3qzj7qjgygwsyl325l6za3rrmkohc467ozaf7pdpd33trn3pu"
246
+
data-bluesky-embed-color-mode="system">
247
+
<p lang="en">
248
+
Test gif<br /><br /><a
249
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchef5c2c23?ref_src=embed"
250
+
>[image or embed]</a
251
+
>
252
+
</p>
253
+
— Embed Tester (<a
254
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
255
+
>@test-all-embeds-a.bsky.social</a
256
+
>)
257
+
<a
258
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchef5c2c23?ref_src=embed"
259
+
>Mar 13, 2025 at 6:26 PM</a
260
+
>
261
+
</blockquote>
262
+
<div>GIF</div>
263
+
</div>
264
+
265
+
<div class="item">
266
+
<blockquote
267
+
class="bluesky-embed"
268
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchgiinq22h"
269
+
data-bluesky-cid="bafyreiau42wvwdzikxev26hpogwmzaox7lxqygfkisoxfjlsl7epcldxa4"
270
+
data-bluesky-embed-color-mode="system">
271
+
<p lang="en">
272
+
Test with list<br /><br /><a
273
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchgiinq22h?ref_src=embed"
274
+
>[image or embed]</a
275
+
>
276
+
</p>
277
+
— Embed Tester (<a
278
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
279
+
>@test-all-embeds-a.bsky.social</a
280
+
>)
281
+
<a
282
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchgiinq22h?ref_src=embed"
283
+
>Mar 13, 2025 at 6:27 PM</a
284
+
>
285
+
</blockquote>
286
+
<div>List</div>
287
+
</div>
288
+
289
+
<div class="item">
290
+
<blockquote
291
+
class="bluesky-embed"
292
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchgwpy222h"
293
+
data-bluesky-cid="bafyreibnfmqwydsi7bfrcxjcafhvajo53n52uiwdpb4kvyksz2ffsa53ua"
294
+
data-bluesky-embed-color-mode="system">
295
+
<p lang="en">
296
+
Test list with self-label<br /><br /><a
297
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchgwpy222h?ref_src=embed"
298
+
>[image or embed]</a
299
+
>
300
+
</p>
301
+
— Embed Tester (<a
302
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
303
+
>@test-all-embeds-a.bsky.social</a
304
+
>)
305
+
<a
306
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchgwpy222h?ref_src=embed"
307
+
>Mar 13, 2025 at 6:28 PM</a
308
+
>
309
+
</blockquote>
310
+
<div>List w/ label</div>
311
+
</div>
312
+
313
+
<div class="item">
314
+
<blockquote
315
+
class="bluesky-embed"
316
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchhfft722h"
317
+
data-bluesky-cid="bafyreiangyijdechqaapd2obxxvyby6c6dwhrlva4qiwhdxji3yjdlrcby"
318
+
data-bluesky-embed-color-mode="system">
319
+
<p lang="en">
320
+
Test with moderated list<br /><br /><a
321
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchhfft722h?ref_src=embed"
322
+
>[image or embed]</a
323
+
>
324
+
</p>
325
+
— Embed Tester (<a
326
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
327
+
>@test-all-embeds-a.bsky.social</a
328
+
>)
329
+
<a
330
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchhfft722h?ref_src=embed"
331
+
>Mar 13, 2025 at 6:28 PM</a
332
+
>
333
+
</blockquote>
334
+
<div>List (takendown)</div>
335
+
</div>
336
+
337
+
<div class="item">
338
+
<blockquote
339
+
class="bluesky-embed"
340
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchj6t27k2h"
341
+
data-bluesky-cid="bafyreidzyg3tpx5widxfhjvz3hcyrqozxj2nsnep3u652a3qzlljsc5if4"
342
+
data-bluesky-embed-color-mode="system">
343
+
<p lang="en">
344
+
Test feed<br /><br /><a
345
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchj6t27k2h?ref_src=embed"
346
+
>[image or embed]</a
347
+
>
348
+
</p>
349
+
— Embed Tester (<a
350
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
351
+
>@test-all-embeds-a.bsky.social</a
352
+
>)
353
+
<a
354
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchj6t27k2h?ref_src=embed"
355
+
>Mar 13, 2025 at 6:29 PM</a
356
+
>
357
+
</blockquote>
358
+
<div>Feed</div>
359
+
</div>
360
+
361
+
<div class="item">
362
+
<blockquote
363
+
class="bluesky-embed"
364
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkjid3khps2r"
365
+
data-bluesky-cid="bafyreiadznx3fxyzc5dw76uydxvrz6vn2ccfh7i5nzaa5o6fmiwrcyie5m"
366
+
data-bluesky-embed-color-mode="system">
367
+
<p lang="en">
368
+
Test adult content feed<br /><br /><a
369
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkjid3khps2r?ref_src=embed"
370
+
>[image or embed]</a
371
+
>
372
+
</p>
373
+
— Embed Tester (<a
374
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
375
+
>@test-all-embeds-a.bsky.social</a
376
+
>)
377
+
<a
378
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkjid3khps2r?ref_src=embed"
379
+
>Mar 16, 2025 at 1:32 PM</a
380
+
>
381
+
</blockquote>
382
+
<div>Feed w/ label</div>
383
+
</div>
384
+
385
+
<div class="item">
386
+
<blockquote
387
+
class="bluesky-embed"
388
+
data-bluesky-uri="at://did:plc:yaqf6zpqlko6hkm5zukoilix/app.bsky.feed.post/3lkcja4gxus2i"
389
+
data-bluesky-cid="bafyreicf6jrpv2it74re5ce7o6nvxcs24qg3s7blb2vy4vdoaaaunbuhru"
390
+
data-bluesky-embed-color-mode="system">
391
+
<p lang="en">
392
+
<br /><br /><a
393
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix/post/3lkcja4gxus2i?ref_src=embed"
394
+
>[image or embed]</a
395
+
>
396
+
</p>
397
+
— test-all-embeds-b.bsky.social (<a
398
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix?ref_src=embed"
399
+
>@test-all-embeds-b.bsky.social</a
400
+
>)
401
+
<a
402
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix/post/3lkcja4gxus2i?ref_src=embed"
403
+
>Mar 13, 2025 at 7:00 PM</a
404
+
>
405
+
</blockquote>
406
+
<div>Link</div>
407
+
</div>
408
+
409
+
<div class="item">
410
+
<blockquote
411
+
class="bluesky-embed"
412
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkcinqa4t22o"
413
+
data-bluesky-cid="bafyreicinqmddgw6ccmmbo3q4exz6phmekbwwyxn5jklycvfsq3aknw7gy"
414
+
data-bluesky-embed-color-mode="system">
415
+
<p lang="en">
416
+
Quote post of self-labeled moderated image<br /><br /><a
417
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkcinqa4t22o?ref_src=embed"
418
+
>[image or embed]</a
419
+
>
420
+
</p>
421
+
— Embed Tester (<a
422
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
423
+
>@test-all-embeds-a.bsky.social</a
424
+
>)
425
+
<a
426
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkcinqa4t22o?ref_src=embed"
427
+
>Mar 13, 2025 at 6:49 PM</a
428
+
>
429
+
</blockquote>
430
+
<div>Link w/ label</div>
431
+
</div>
432
+
433
+
<div class="item">
434
+
<blockquote
435
+
class="bluesky-embed"
436
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchnlwlbs2h"
437
+
data-bluesky-cid="bafyreigyilbttv6kasvf2gdciju56xofmwvnls2angvur4y3c5m2lc4byi"
438
+
data-bluesky-embed-color-mode="system">
439
+
<p lang="en">
440
+
Test starter pack<br /><br /><a
441
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchnlwlbs2h?ref_src=embed"
442
+
>[image or embed]</a
443
+
>
444
+
</p>
445
+
— Embed Tester (<a
446
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
447
+
>@test-all-embeds-a.bsky.social</a
448
+
>)
449
+
<a
450
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchnlwlbs2h?ref_src=embed"
451
+
>Mar 13, 2025 at 6:31 PM</a
452
+
>
453
+
</blockquote>
454
+
<div>Starter pack</div>
455
+
</div>
456
+
457
+
<div class="item">
458
+
<blockquote
459
+
class="bluesky-embed"
460
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchnwmycs2h"
461
+
data-bluesky-cid="bafyreibdxzxyldghjvzahpceasx7wkzwmycx2zdyak2c3cx2ouaivls2da"
462
+
data-bluesky-embed-color-mode="system">
463
+
<p lang="en">
464
+
Test starter pack with self-label<br /><br /><a
465
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchnwmycs2h?ref_src=embed"
466
+
>[image or embed]</a
467
+
>
468
+
</p>
469
+
— Embed Tester (<a
470
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
471
+
>@test-all-embeds-a.bsky.social</a
472
+
>)
473
+
<a
474
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchnwmycs2h?ref_src=embed"
475
+
>Mar 13, 2025 at 6:32 PM</a
476
+
>
477
+
</blockquote>
478
+
<div>Starter pack w/ self label</div>
479
+
</div>
480
+
481
+
<div class="item">
482
+
<blockquote
483
+
class="bluesky-embed"
484
+
data-bluesky-uri="at://did:plc:ykoz7xgzdig674y6k4723vzf/app.bsky.feed.post/3lxdwwigues2y"
485
+
data-bluesky-cid="bafyreibpgpvyx6vozaxn557ngffzbvvucdrpflfnjw73tr3qi5e7tfitpy"
486
+
data-bluesky-embed-color-mode="system">
487
+
<p lang="en">
488
+
go.bsky.app/FVMZBTc test<br /><br /><a
489
+
href="https://bsky.app/profile/did:plc:ykoz7xgzdig674y6k4723vzf/post/3lxdwwigues2y?ref_src=embed"
490
+
>[image or embed]</a
491
+
>
492
+
</p>
493
+
— h 🪽 partner @ INTDEV (<a
494
+
href="https://bsky.app/profile/did:plc:ykoz7xgzdig674y6k4723vzf?ref_src=embed"
495
+
>@hannah-final.bsky.social</a
496
+
>)
497
+
<a
498
+
href="https://bsky.app/profile/did:plc:ykoz7xgzdig674y6k4723vzf/post/3lxdwwigues2y?ref_src=embed"
499
+
>Aug 26, 2025 at 7:05 PM</a
500
+
>
501
+
</blockquote>
502
+
<div>Starter pack w/ signups</div>
503
+
</div>
504
+
</div>
505
+
</section>
506
+
507
+
<!-- Quote posts -->
508
+
<section>
509
+
<h1>Quote posts</h1>
510
+
<div class="grid">
511
+
<div class="item">
512
+
<blockquote
513
+
class="bluesky-embed"
514
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchp7oaq22h"
515
+
data-bluesky-cid="bafyreidq6y2zee36am3xdt3lfb4yhgn3u5pil7ljgkdx74biluw424ck3m"
516
+
data-bluesky-embed-color-mode="system">
517
+
<p lang="en">
518
+
Quote post<br /><br /><a
519
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchp7oaq22h?ref_src=embed"
520
+
>[image or embed]</a
521
+
>
522
+
</p>
523
+
— Embed Tester (<a
524
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
525
+
>@test-all-embeds-a.bsky.social</a
526
+
>)
527
+
<a
528
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchp7oaq22h?ref_src=embed"
529
+
>Mar 13, 2025 at 6:32 PM</a
530
+
>
531
+
</blockquote>
532
+
<div>Image</div>
533
+
</div>
534
+
535
+
<div class="item">
536
+
<blockquote
537
+
class="bluesky-embed"
538
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchpijwu22h"
539
+
data-bluesky-cid="bafyreifblfh6mhb4zrhjzkfwa2ytgzrr7jueukhzwj2nfifmy77h7v74ji"
540
+
data-bluesky-embed-color-mode="system">
541
+
<p lang="en">
542
+
Quote post with moderated embed<br /><br /><a
543
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchpijwu22h?ref_src=embed"
544
+
>[image or embed]</a
545
+
>
546
+
</p>
547
+
— Embed Tester (<a
548
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
549
+
>@test-all-embeds-a.bsky.social</a
550
+
>)
551
+
<a
552
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchpijwu22h?ref_src=embed"
553
+
>Mar 13, 2025 at 6:32 PM</a
554
+
>
555
+
</blockquote>
556
+
<div>Image w/ label</div>
557
+
</div>
558
+
559
+
<div class="item">
560
+
<blockquote
561
+
class="bluesky-embed"
562
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchpvu6is2h"
563
+
data-bluesky-cid="bafyreidm573hmhxt65d6xvoxki4omvoaltkta7s3efoydrxxod37bdhree"
564
+
data-bluesky-embed-color-mode="system">
565
+
<p lang="en">
566
+
Quote post of video<br /><br /><a
567
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchpvu6is2h?ref_src=embed"
568
+
>[image or embed]</a
569
+
>
570
+
</p>
571
+
— Embed Tester (<a
572
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
573
+
>@test-all-embeds-a.bsky.social</a
574
+
>)
575
+
<a
576
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchpvu6is2h?ref_src=embed"
577
+
>Mar 13, 2025 at 6:33 PM</a
578
+
>
579
+
</blockquote>
580
+
<div>Video</div>
581
+
</div>
582
+
583
+
<div class="item">
584
+
<blockquote
585
+
class="bluesky-embed"
586
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchq5dfrk2h"
587
+
data-bluesky-cid="bafyreiba4sabzwtomrhede6tnhmgddj2q4m4ksxhud3g7flldrbwritlzq"
588
+
data-bluesky-embed-color-mode="system">
589
+
<p lang="en">
590
+
Quote post of moderated video<br /><br /><a
591
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchq5dfrk2h?ref_src=embed"
592
+
>[image or embed]</a
593
+
>
594
+
</p>
595
+
— Embed Tester (<a
596
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
597
+
>@test-all-embeds-a.bsky.social</a
598
+
>)
599
+
<a
600
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchq5dfrk2h?ref_src=embed"
601
+
>Mar 13, 2025 at 6:33 PM</a
602
+
>
603
+
</blockquote>
604
+
<div>Moderated Video</div>
605
+
</div>
606
+
607
+
<div class="item">
608
+
<blockquote
609
+
class="bluesky-embed"
610
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkjip5qduk2l"
611
+
data-bluesky-cid="bafyreib4ddu6imsar7hjm6bsunrrumts4b3pftmr23qlrnytcthkingilu"
612
+
data-bluesky-embed-color-mode="system">
613
+
<p lang="en">
614
+
Quote post of gif<br /><br /><a
615
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkjip5qduk2l?ref_src=embed"
616
+
>[image or embed]</a
617
+
>
618
+
</p>
619
+
— Embed Tester (<a
620
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
621
+
>@test-all-embeds-a.bsky.social</a
622
+
>)
623
+
<a
624
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkjip5qduk2l?ref_src=embed"
625
+
>Mar 16, 2025 at 1:39 PM</a
626
+
>
627
+
</blockquote>
628
+
<div>GIF</div>
629
+
</div>
630
+
631
+
<div class="item">
632
+
<blockquote
633
+
class="bluesky-embed"
634
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkjip5qduk2l"
635
+
data-bluesky-cid="bafyreib4ddu6imsar7hjm6bsunrrumts4b3pftmr23qlrnytcthkingilu"
636
+
data-bluesky-embed-color-mode="system">
637
+
<p lang="en">
638
+
Quote post of gif<br /><br /><a
639
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkjip5qduk2l?ref_src=embed"
640
+
>[image or embed]</a
641
+
>
642
+
</p>
643
+
— Embed Tester (<a
644
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
645
+
>@test-all-embeds-a.bsky.social</a
646
+
>)
647
+
<a
648
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkjip5qduk2l?ref_src=embed"
649
+
>Mar 16, 2025 at 1:39 PM</a
650
+
>
651
+
</blockquote>
652
+
<div>List</div>
653
+
</div>
654
+
655
+
<div class="item">
656
+
<blockquote
657
+
class="bluesky-embed"
658
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchqmp2722h"
659
+
data-bluesky-cid="bafyreicwzdm3qlx567fznroqija6rryl4ghjwn7hz2o47ygy2kd6bsmsou"
660
+
data-bluesky-embed-color-mode="system">
661
+
<p lang="en">
662
+
Quote post of moderated list<br /><br /><a
663
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchqmp2722h?ref_src=embed"
664
+
>[image or embed]</a
665
+
>
666
+
</p>
667
+
— Embed Tester (<a
668
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
669
+
>@test-all-embeds-a.bsky.social</a
670
+
>)
671
+
<a
672
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchqmp2722h?ref_src=embed"
673
+
>Mar 13, 2025 at 6:33 PM</a
674
+
>
675
+
</blockquote>
676
+
<div>List (takedown)</div>
677
+
</div>
678
+
679
+
<div class="item">
680
+
<blockquote
681
+
class="bluesky-embed"
682
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchqrrigs2h"
683
+
data-bluesky-cid="bafyreiakfe2qer733rl5ncq2auwoay3zc5qeiepiwzz3yuvds6acbdnjti"
684
+
data-bluesky-embed-color-mode="system">
685
+
<p lang="en">
686
+
Quote post of feed<br /><br /><a
687
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchqrrigs2h?ref_src=embed"
688
+
>[image or embed]</a
689
+
>
690
+
</p>
691
+
— Embed Tester (<a
692
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
693
+
>@test-all-embeds-a.bsky.social</a
694
+
>)
695
+
<a
696
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchqrrigs2h?ref_src=embed"
697
+
>Mar 13, 2025 at 6:33 PM</a
698
+
>
699
+
</blockquote>
700
+
<div>Feed</div>
701
+
</div>
702
+
703
+
<div class="item">
704
+
<blockquote
705
+
class="bluesky-embed"
706
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchqyf6u22h"
707
+
data-bluesky-cid="bafyreicbaf4h437o656jsuygqsyv2z4ff5wu46gjiw7z7rwnhaiwjpa2ia"
708
+
data-bluesky-embed-color-mode="system">
709
+
<p lang="en">
710
+
Quote post of link<br /><br /><a
711
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchqyf6u22h?ref_src=embed"
712
+
>[image or embed]</a
713
+
>
714
+
</p>
715
+
— Embed Tester (<a
716
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
717
+
>@test-all-embeds-a.bsky.social</a
718
+
>)
719
+
<a
720
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchqyf6u22h?ref_src=embed"
721
+
>Mar 13, 2025 at 6:33 PM</a
722
+
>
723
+
</blockquote>
724
+
<div>Link</div>
725
+
</div>
726
+
727
+
<div class="item">
728
+
<blockquote
729
+
class="bluesky-embed"
730
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchremdhc2h"
731
+
data-bluesky-cid="bafyreifexo35hh6x7cfmxzyewfqoufyidaz6ko5dtycwrezspidph3ydnu"
732
+
data-bluesky-embed-color-mode="system">
733
+
<p lang="en">
734
+
Quote post of moderated link<br /><br /><a
735
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchremdhc2h?ref_src=embed"
736
+
>[image or embed]</a
737
+
>
738
+
</p>
739
+
— Embed Tester (<a
740
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
741
+
>@test-all-embeds-a.bsky.social</a
742
+
>)
743
+
<a
744
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchremdhc2h?ref_src=embed"
745
+
>Mar 13, 2025 at 6:33 PM</a
746
+
>
747
+
</blockquote>
748
+
<div>Link w/label</div>
749
+
</div>
750
+
751
+
<div class="item">
752
+
<blockquote
753
+
class="bluesky-embed"
754
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkchrlw4vk2h"
755
+
data-bluesky-cid="bafyreihcwafgvujqkzts3spunit6ku6mpix76m2s2iz3gbxhyw33b4k3uq"
756
+
data-bluesky-embed-color-mode="system">
757
+
<p lang="en">
758
+
Quote post of starter pack<br /><br /><a
759
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchrlw4vk2h?ref_src=embed"
760
+
>[image or embed]</a
761
+
>
762
+
</p>
763
+
— Embed Tester (<a
764
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
765
+
>@test-all-embeds-a.bsky.social</a
766
+
>)
767
+
<a
768
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkchrlw4vk2h?ref_src=embed"
769
+
>Mar 13, 2025 at 6:34 PM</a
770
+
>
771
+
</blockquote>
772
+
<div>Starter pack</div>
773
+
</div>
774
+
</div>
775
+
</section>
776
+
777
+
<!-- Quote post states -->
778
+
<section>
779
+
<h1>Quote post states</h1>
780
+
<div class="grid">
781
+
<div class="item">
782
+
<blockquote
783
+
class="bluesky-embed"
784
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkcieaeil22a"
785
+
data-bluesky-cid="bafyreihsujirmypaycahu2dqc7oxcrhohgtqclljudc2s2drqqxmvpgrem"
786
+
data-bluesky-embed-color-mode="system">
787
+
<p lang="en">
788
+
Quoted post of deleted post<br /><br /><a
789
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkcieaeil22a?ref_src=embed"
790
+
>[image or embed]</a
791
+
>
792
+
</p>
793
+
— Embed Tester (<a
794
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
795
+
>@test-all-embeds-a.bsky.social</a
796
+
>)
797
+
<a
798
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkcieaeil22a?ref_src=embed"
799
+
>Mar 13, 2025 at 6:44 PM</a
800
+
>
801
+
</blockquote>
802
+
<div>Deleted</div>
803
+
</div>
804
+
805
+
<div class="item">
806
+
<blockquote
807
+
class="bluesky-embed"
808
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkciefiepk2a"
809
+
data-bluesky-cid="bafyreihvgdhd65s3e2e2uhkcyet2apdfo6zfmbbkf6jvn5v6holejae2ya"
810
+
data-bluesky-embed-color-mode="system">
811
+
<p lang="en">
812
+
Quoted post of detached post<br /><br /><a
813
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkciefiepk2a?ref_src=embed"
814
+
>[image or embed]</a
815
+
>
816
+
</p>
817
+
— Embed Tester (<a
818
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
819
+
>@test-all-embeds-a.bsky.social</a
820
+
>)
821
+
<a
822
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkciefiepk2a?ref_src=embed"
823
+
>Mar 13, 2025 at 6:44 PM</a
824
+
>
825
+
</blockquote>
826
+
<div>Detached quoted post</div>
827
+
</div>
828
+
829
+
<div class="item">
830
+
<blockquote
831
+
class="bluesky-embed"
832
+
data-bluesky-uri="at://did:plc:2b5zvgrtdw5mlariyuvgd7tv/app.bsky.feed.post/3lkcikkheys2c"
833
+
data-bluesky-cid="bafyreibez43l4k4yxm6472igwosrzeefyn2xmjgxtpezj2ktzx66zi6gyy"
834
+
data-bluesky-embed-color-mode="system">
835
+
<p lang="en">
836
+
Quoted post of user who blocks me<br /><br /><a
837
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkcikkheys2c?ref_src=embed"
838
+
>[image or embed]</a
839
+
>
840
+
</p>
841
+
— Embed Tester (<a
842
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv?ref_src=embed"
843
+
>@test-all-embeds-a.bsky.social</a
844
+
>)
845
+
<a
846
+
href="https://bsky.app/profile/did:plc:2b5zvgrtdw5mlariyuvgd7tv/post/3lkcikkheys2c?ref_src=embed"
847
+
>Mar 13, 2025 at 6:48 PM</a
848
+
>
849
+
</blockquote>
850
+
<div>Blocked</div>
851
+
</div>
852
+
</div>
853
+
</section>
854
+
855
+
<!-- Default avatars -->
856
+
<section>
857
+
<h1>Default avatars</h1>
858
+
<div class="grid">
859
+
<div class="item">
860
+
<blockquote
861
+
class="bluesky-embed"
862
+
data-bluesky-uri="at://did:plc:yaqf6zpqlko6hkm5zukoilix/app.bsky.feed.post/3lkcivbqv522o"
863
+
data-bluesky-cid="bafyreicekaiu4nqpdlltvbohbuslw4g4xs5sqk4d6bngfrn3y3e5web63i"
864
+
data-bluesky-embed-color-mode="system">
865
+
<p lang="en">test</p>
866
+
— test-all-embeds-b.bsky.social (<a
867
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix?ref_src=embed"
868
+
>@test-all-embeds-b.bsky.social</a
869
+
>)
870
+
<a
871
+
href="https://bsky.app/profile/did:plc:yaqf6zpqlko6hkm5zukoilix/post/3lkcivbqv522o?ref_src=embed"
872
+
>Mar 13, 2025 at 6:54 PM</a
873
+
>
874
+
</blockquote>
875
+
<div>Default avatar</div>
876
+
</div>
877
+
878
+
<div class="item">
879
+
<blockquote
880
+
class="bluesky-embed"
881
+
data-bluesky-uri="at://did:plc:464y3vjt35kayax3f3fhk2to/app.bsky.feed.post/3lr6qrk74rc2o"
882
+
data-bluesky-cid="bafyreihtxhy56u2im7hki3bgiesll7ofv63glev3xtf677bdnygzaooaq4"
883
+
data-bluesky-embed-color-mode="system">
884
+
<p lang="en">
885
+
quote<br /><br /><a
886
+
href="https://bsky.app/profile/did:plc:464y3vjt35kayax3f3fhk2to/post/3lr6qrk74rc2o?ref_src=embed"
887
+
>[image or embed]</a
888
+
>
889
+
</p>
890
+
— beep boop 2 (<a
891
+
href="https://bsky.app/profile/did:plc:464y3vjt35kayax3f3fhk2to?ref_src=embed"
892
+
>@bleh-5.bsky.social</a
893
+
>)
894
+
<a
895
+
href="https://bsky.app/profile/did:plc:464y3vjt35kayax3f3fhk2to/post/3lr6qrk74rc2o?ref_src=embed"
896
+
>Jun 9, 2025 at 9:00 AM</a
897
+
>
898
+
</blockquote>
899
+
<div>Default avi quote</div>
900
+
</div>
901
+
902
+
<div class="item">
903
+
<blockquote
904
+
class="bluesky-embed"
905
+
data-bluesky-uri="at://did:plc:464y3vjt35kayax3f3fhk2to/app.bsky.feed.post/3lr6qsegoy22o"
906
+
data-bluesky-cid="bafyreig3btwlldbmhkfygczijtexpsvxjcisseldiwlnoc3ovgdejoashm"
907
+
data-bluesky-embed-color-mode="system">
908
+
<p lang="en">
909
+
bsky.app/profile/did:...<br /><br /><a
910
+
href="https://bsky.app/profile/did:plc:464y3vjt35kayax3f3fhk2to/post/3lr6qsegoy22o?ref_src=embed"
911
+
>[image or embed]</a
912
+
>
913
+
</p>
914
+
— beep boop 2 (<a
915
+
href="https://bsky.app/profile/did:plc:464y3vjt35kayax3f3fhk2to?ref_src=embed"
916
+
>@bleh-5.bsky.social</a
917
+
>)
918
+
<a
919
+
href="https://bsky.app/profile/did:plc:464y3vjt35kayax3f3fhk2to/post/3lr6qsegoy22o?ref_src=embed"
920
+
>Jun 9, 2025 at 9:01 AM</a
921
+
>
922
+
</blockquote>
923
+
<div>Default avi list</div>
924
+
</div>
925
+
926
+
<div class="item">
927
+
<blockquote
928
+
class="bluesky-embed"
929
+
data-bluesky-uri="at://did:plc:464y3vjt35kayax3f3fhk2to/app.bsky.feed.post/3lr6qy3dpu22o"
930
+
data-bluesky-cid="bafyreihdd7kzpnqr73bvpbvwwxv6fcwr7oyi7tveylozj3psiyppfv7bku"
931
+
data-bluesky-embed-color-mode="system">
932
+
<p lang="en">
933
+
feed bsky.app/profile/why....<br /><br /><a
934
+
href="https://bsky.app/profile/did:plc:464y3vjt35kayax3f3fhk2to/post/3lr6qy3dpu22o?ref_src=embed"
935
+
>[image or embed]</a
936
+
>
937
+
</p>
938
+
— beep boop 2 (<a
939
+
href="https://bsky.app/profile/did:plc:464y3vjt35kayax3f3fhk2to?ref_src=embed"
940
+
>@bleh-5.bsky.social</a
941
+
>)
942
+
<a
943
+
href="https://bsky.app/profile/did:plc:464y3vjt35kayax3f3fhk2to/post/3lr6qy3dpu22o?ref_src=embed"
944
+
>Jun 9, 2025 at 9:04 AM</a
945
+
>
946
+
</blockquote>
947
+
<div>Default avi feed</div>
948
+
</div>
949
+
</div>
950
+
</section>
951
+
952
+
<!-- Verification -->
953
+
<section>
954
+
<h1>Verification</h1>
955
+
<div class="grid">
956
+
<div class="item">
957
+
<blockquote
958
+
class="bluesky-embed"
959
+
data-bluesky-uri="at://did:plc:inz4fkbbp7ms3ixufw6xuvdi/app.bsky.feed.post/3lxjdltb4ts27"
960
+
data-bluesky-cid="bafyreiaybsdmauo65e7sz5jmpfh4xnuho5lsurwpeunxxrzec5kesb6v5y"
961
+
data-bluesky-embed-color-mode="system">
962
+
<p lang="">
963
+
Viewers in Africa, Asia, and Australia will be able to see the
964
+
blood moon in the sky—but those in the Americas will have to
965
+
settle for a live feed this time around.
966
+
www.wired.com/story/how-to...<br /><br /><a
967
+
href="https://bsky.app/profile/did:plc:inz4fkbbp7ms3ixufw6xuvdi/post/3lxjdltb4ts27?ref_src=embed"
968
+
>[image or embed]</a
969
+
>
970
+
</p>
971
+
— WIRED (<a
972
+
href="https://bsky.app/profile/did:plc:inz4fkbbp7ms3ixufw6xuvdi?ref_src=embed"
973
+
>@wired.com</a
974
+
>)
975
+
<a
976
+
href="https://bsky.app/profile/did:plc:inz4fkbbp7ms3ixufw6xuvdi/post/3lxjdltb4ts27?ref_src=embed"
977
+
>Aug 28, 2025 at 10:35 PM</a
978
+
>
979
+
</blockquote>
980
+
<div>Trusted verifier</div>
981
+
</div>
982
+
983
+
<div class="item">
984
+
<blockquote
985
+
class="bluesky-embed"
986
+
data-bluesky-uri="at://did:plc:idd5adskstkxy3fzsmer6dtn/app.bsky.feed.post/3lx7j264p7s25"
987
+
data-bluesky-cid="bafyreih2kxdfmpvtrfhudho6untfityh3bw3mvlialhvbzcfpdqbuhtrdi"
988
+
data-bluesky-embed-color-mode="system">
989
+
<p lang="en">
990
+
Wired is one of the few US media organisations which fully
991
+
appreciates what's happening.<br /><br /><a
992
+
href="https://bsky.app/profile/did:plc:idd5adskstkxy3fzsmer6dtn/post/3lx7j264p7s25?ref_src=embed"
993
+
>[image or embed]</a
994
+
>
995
+
</p>
996
+
— TJ McIntyre (<a
997
+
href="https://bsky.app/profile/did:plc:idd5adskstkxy3fzsmer6dtn?ref_src=embed"
998
+
>@tjmcintyre.com</a
999
+
>)
1000
+
<a
1001
+
href="https://bsky.app/profile/did:plc:idd5adskstkxy3fzsmer6dtn/post/3lx7j264p7s25?ref_src=embed"
1002
+
>Aug 25, 2025 at 12:46 AM</a
1003
+
>
1004
+
</blockquote>
1005
+
<div>Trusted verifier quoted</div>
1006
+
</div>
1007
+
1008
+
<div class="item">
1009
+
<blockquote
1010
+
class="bluesky-embed"
1011
+
data-bluesky-uri="at://did:plc:p2cp5gopk7mgjegy6wadk3ep/app.bsky.feed.post/3lxciw4rf4c2p"
1012
+
data-bluesky-cid="bafyreicctppfb44vitkn73rx546wvvybs7e7ftkc3dhsz56vm7a6my5fdq"
1013
+
data-bluesky-embed-color-mode="system">
1014
+
<p lang="en">test</p>
1015
+
— Samuel (<a
1016
+
href="https://bsky.app/profile/did:plc:p2cp5gopk7mgjegy6wadk3ep?ref_src=embed"
1017
+
>@samuel.bsky.team</a
1018
+
>)
1019
+
<a
1020
+
href="https://bsky.app/profile/did:plc:p2cp5gopk7mgjegy6wadk3ep/post/3lxciw4rf4c2p?ref_src=embed"
1021
+
>Aug 26, 2025 at 5:22 AM</a
1022
+
>
1023
+
</blockquote>
1024
+
<div>Verified</div>
1025
+
</div>
1026
+
1027
+
<div class="item">
1028
+
<blockquote
1029
+
class="bluesky-embed"
1030
+
data-bluesky-uri="at://did:plc:p2cp5gopk7mgjegy6wadk3ep/app.bsky.feed.post/3lxdeaccemk2j"
1031
+
data-bluesky-cid="bafyreibmveixwjpcc2a4va2c5wihztsgdlysxvi4bz4xe7ilxe7uvuzn3u"
1032
+
data-bluesky-embed-color-mode="system">
1033
+
<p lang="en">
1034
+
atproto in one post<br /><br /><a
1035
+
href="https://bsky.app/profile/did:plc:p2cp5gopk7mgjegy6wadk3ep/post/3lxdeaccemk2j?ref_src=embed"
1036
+
>[image or embed]</a
1037
+
>
1038
+
</p>
1039
+
— Samuel (<a
1040
+
href="https://bsky.app/profile/did:plc:p2cp5gopk7mgjegy6wadk3ep?ref_src=embed"
1041
+
>@samuel.bsky.team</a
1042
+
>)
1043
+
<a
1044
+
href="https://bsky.app/profile/did:plc:p2cp5gopk7mgjegy6wadk3ep/post/3lxdeaccemk2j?ref_src=embed"
1045
+
>Aug 26, 2025 at 1:30 PM</a
1046
+
>
1047
+
</blockquote>
1048
+
1049
+
<div>Verified quoted</div>
1050
+
</div>
1051
+
</div>
1052
+
</section>
1053
+
</body>
1054
+
</html>
+32
-1
bskyembed/vite.config.ts
+32
-1
bskyembed/vite.config.ts
···
1
+
import fs from 'node:fs'
1
2
import {resolve} from 'node:path'
2
3
3
4
import preact from '@preact/preset-vite'
4
5
import legacy from '@vitejs/plugin-legacy'
5
-
import type {UserConfig} from 'vite'
6
+
import type {Plugin, UserConfig} from 'vite'
6
7
import paths from 'vite-tsconfig-paths'
7
8
9
+
/**
10
+
* World's hackiest router, for dev only. Serves `/post.html` to requests that start with `/embed/`
11
+
*/
12
+
function devOnlyRouter(): Plugin {
13
+
return {
14
+
name: 'embed-to-post-html',
15
+
configureServer(server) {
16
+
server.middlewares.use((req, res, next) => {
17
+
const url = req.url || ''
18
+
if (!url.startsWith('/embed/')) return next()
19
+
20
+
const html = fs.readFileSync(
21
+
resolve(process.cwd(), 'post.html'),
22
+
'utf8',
23
+
)
24
+
25
+
server
26
+
.transformIndexHtml(url, html)
27
+
.then(transformed => {
28
+
res.statusCode = 200
29
+
res.setHeader('Content-Type', 'text/html')
30
+
res.end(transformed)
31
+
})
32
+
.catch(next)
33
+
})
34
+
},
35
+
}
36
+
}
37
+
8
38
const config: UserConfig = {
9
39
plugins: [
10
40
preact(),
···
12
42
legacy({
13
43
targets: ['defaults', 'not IE 11'],
14
44
}),
45
+
devOnlyRouter(),
15
46
],
16
47
build: {
17
48
assetsDir: 'static',
+376
-5
bskyembed/yarn.lock
+376
-5
bskyembed/yarn.lock
···
1447
1447
regenerator-runtime "^0.14.1"
1448
1448
systemjs "^6.15.1"
1449
1449
1450
+
"@zeit/schemas@2.36.0":
1451
+
version "2.36.0"
1452
+
resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.36.0.tgz#7a1b53f4091e18d0b404873ea3e3c83589c765f2"
1453
+
integrity sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==
1454
+
1450
1455
acorn-jsx@^5.3.2:
1451
1456
version "5.3.2"
1452
1457
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
···
1461
1466
version "8.11.3"
1462
1467
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
1463
1468
integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
1469
+
1470
+
ajv@8.12.0:
1471
+
version "8.12.0"
1472
+
resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
1473
+
integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
1474
+
dependencies:
1475
+
fast-deep-equal "^3.1.1"
1476
+
json-schema-traverse "^1.0.0"
1477
+
require-from-string "^2.0.2"
1478
+
uri-js "^4.2.2"
1464
1479
1465
1480
ajv@^6.12.4:
1466
1481
version "6.12.6"
···
1472
1487
json-schema-traverse "^0.4.1"
1473
1488
uri-js "^4.2.2"
1474
1489
1490
+
ansi-align@^3.0.1:
1491
+
version "3.0.1"
1492
+
resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59"
1493
+
integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==
1494
+
dependencies:
1495
+
string-width "^4.1.0"
1496
+
1475
1497
ansi-regex@^5.0.1:
1476
1498
version "5.0.1"
1477
1499
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
···
1507
1529
normalize-path "^3.0.0"
1508
1530
picomatch "^2.0.4"
1509
1531
1510
-
arg@^5.0.2:
1532
+
arch@^2.2.0:
1533
+
version "2.2.0"
1534
+
resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11"
1535
+
integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==
1536
+
1537
+
arg@5.0.2, arg@^5.0.2:
1511
1538
version "5.0.2"
1512
1539
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
1513
1540
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
···
1684
1711
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
1685
1712
integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
1686
1713
1714
+
boxen@7.0.0:
1715
+
version "7.0.0"
1716
+
resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.0.0.tgz#9e5f8c26e716793fc96edcf7cf754cdf5e3fbf32"
1717
+
integrity sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==
1718
+
dependencies:
1719
+
ansi-align "^3.0.1"
1720
+
camelcase "^7.0.0"
1721
+
chalk "^5.0.1"
1722
+
cli-boxes "^3.0.0"
1723
+
string-width "^5.1.2"
1724
+
type-fest "^2.13.0"
1725
+
widest-line "^4.0.1"
1726
+
wrap-ansi "^8.0.1"
1727
+
1687
1728
brace-expansion@^1.1.7:
1688
1729
version "1.1.11"
1689
1730
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
···
1738
1779
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
1739
1780
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
1740
1781
1782
+
bytes@3.0.0:
1783
+
version "3.0.0"
1784
+
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
1785
+
integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==
1786
+
1787
+
bytes@3.1.2:
1788
+
version "3.1.2"
1789
+
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5"
1790
+
integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
1791
+
1741
1792
call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
1742
1793
version "1.0.7"
1743
1794
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
···
1759
1810
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
1760
1811
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
1761
1812
1813
+
camelcase@^7.0.0:
1814
+
version "7.0.1"
1815
+
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048"
1816
+
integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==
1817
+
1762
1818
caniuse-lite@^1.0.30001524:
1763
1819
version "1.0.30001606"
1764
1820
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz#b4d5f67ab0746a3b8b5b6d1f06e39c51beb39a9e"
···
1769
1825
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz#22e9706422ad37aa50556af8c10e40e2d93a8b85"
1770
1826
integrity sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==
1771
1827
1772
-
chalk@^4.0.0:
1828
+
chalk-template@0.4.0:
1829
+
version "0.4.0"
1830
+
resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-0.4.0.tgz#692c034d0ed62436b9062c1707fadcd0f753204b"
1831
+
integrity sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==
1832
+
dependencies:
1833
+
chalk "^4.1.2"
1834
+
1835
+
chalk@5.0.1:
1836
+
version "5.0.1"
1837
+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6"
1838
+
integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==
1839
+
1840
+
chalk@^4.0.0, chalk@^4.1.2:
1773
1841
version "4.1.2"
1774
1842
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
1775
1843
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
···
1777
1845
ansi-styles "^4.1.0"
1778
1846
supports-color "^7.1.0"
1779
1847
1848
+
chalk@^5.0.1:
1849
+
version "5.6.2"
1850
+
resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea"
1851
+
integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==
1852
+
1780
1853
chokidar@^3.5.3:
1781
1854
version "3.6.0"
1782
1855
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
···
1792
1865
optionalDependencies:
1793
1866
fsevents "~2.3.2"
1794
1867
1868
+
cli-boxes@^3.0.0:
1869
+
version "3.0.0"
1870
+
resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145"
1871
+
integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==
1872
+
1873
+
clipboardy@3.0.0:
1874
+
version "3.0.0"
1875
+
resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-3.0.0.tgz#f3876247404d334c9ed01b6f269c11d09a5e3092"
1876
+
integrity sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==
1877
+
dependencies:
1878
+
arch "^2.2.0"
1879
+
execa "^5.1.1"
1880
+
is-wsl "^2.2.0"
1881
+
1795
1882
color-convert@^2.0.1:
1796
1883
version "2.0.1"
1797
1884
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
···
1814
1901
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
1815
1902
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
1816
1903
1904
+
compressible@~2.0.18:
1905
+
version "2.0.18"
1906
+
resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba"
1907
+
integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==
1908
+
dependencies:
1909
+
mime-db ">= 1.43.0 < 2"
1910
+
1911
+
compression@1.8.1:
1912
+
version "1.8.1"
1913
+
resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79"
1914
+
integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==
1915
+
dependencies:
1916
+
bytes "3.1.2"
1917
+
compressible "~2.0.18"
1918
+
debug "2.6.9"
1919
+
negotiator "~0.6.4"
1920
+
on-headers "~1.1.0"
1921
+
safe-buffer "5.2.1"
1922
+
vary "~1.1.2"
1923
+
1817
1924
concat-map@0.0.1:
1818
1925
version "0.0.1"
1819
1926
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
1820
1927
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
1928
+
1929
+
content-disposition@0.5.2:
1930
+
version "0.5.2"
1931
+
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
1932
+
integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==
1821
1933
1822
1934
convert-source-map@^2.0.0:
1823
1935
version "2.0.0"
···
1845
1957
shebang-command "^2.0.0"
1846
1958
which "^2.0.1"
1847
1959
1960
+
cross-spawn@^7.0.3:
1961
+
version "7.0.6"
1962
+
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
1963
+
integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
1964
+
dependencies:
1965
+
path-key "^3.1.0"
1966
+
shebang-command "^2.0.0"
1967
+
which "^2.0.1"
1968
+
1848
1969
css-select@^5.1.0:
1849
1970
version "5.2.2"
1850
1971
resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e"
···
1893
2014
es-errors "^1.3.0"
1894
2015
is-data-view "^1.0.1"
1895
2016
2017
+
debug@2.6.9:
2018
+
version "2.6.9"
2019
+
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
2020
+
integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
2021
+
dependencies:
2022
+
ms "2.0.0"
2023
+
1896
2024
debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1:
1897
2025
version "4.4.1"
1898
2026
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
···
1906
2034
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
1907
2035
dependencies:
1908
2036
ms "2.1.2"
2037
+
2038
+
deep-extend@^0.6.0:
2039
+
version "0.6.0"
2040
+
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
2041
+
integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
1909
2042
1910
2043
deep-is@^0.1.3:
1911
2044
version "0.1.4"
···
2356
2489
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
2357
2490
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
2358
2491
2492
+
execa@^5.1.1:
2493
+
version "5.1.1"
2494
+
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
2495
+
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
2496
+
dependencies:
2497
+
cross-spawn "^7.0.3"
2498
+
get-stream "^6.0.0"
2499
+
human-signals "^2.1.0"
2500
+
is-stream "^2.0.0"
2501
+
merge-stream "^2.0.0"
2502
+
npm-run-path "^4.0.1"
2503
+
onetime "^5.1.2"
2504
+
signal-exit "^3.0.3"
2505
+
strip-final-newline "^2.0.0"
2506
+
2359
2507
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
2360
2508
version "3.1.3"
2361
2509
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
···
2496
2644
has-symbols "^1.0.3"
2497
2645
hasown "^2.0.0"
2498
2646
2647
+
get-stream@^6.0.0:
2648
+
version "6.0.1"
2649
+
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
2650
+
integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
2651
+
2499
2652
get-symbol-description@^1.0.2:
2500
2653
version "1.0.2"
2501
2654
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5"
···
2631
2784
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
2632
2785
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
2633
2786
2787
+
human-signals@^2.1.0:
2788
+
version "2.1.0"
2789
+
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
2790
+
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
2791
+
2634
2792
ignore@^5.2.0:
2635
2793
version "5.3.1"
2636
2794
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
···
2661
2819
version "2.0.4"
2662
2820
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
2663
2821
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
2822
+
2823
+
ini@~1.3.0:
2824
+
version "1.3.8"
2825
+
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
2826
+
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
2664
2827
2665
2828
internal-slot@^1.0.7:
2666
2829
version "1.0.7"
···
2741
2904
dependencies:
2742
2905
has-tostringtag "^1.0.0"
2743
2906
2907
+
is-docker@^2.0.0:
2908
+
version "2.2.1"
2909
+
resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
2910
+
integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
2911
+
2744
2912
is-extglob@^2.1.1:
2745
2913
version "2.1.1"
2746
2914
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
···
2799
2967
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
2800
2968
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
2801
2969
2970
+
is-port-reachable@4.0.0:
2971
+
version "4.0.0"
2972
+
resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-4.0.0.tgz#dac044091ef15319c8ab2f34604d8794181f8c2d"
2973
+
integrity sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==
2974
+
2802
2975
is-regex@^1.1.4:
2803
2976
version "1.1.4"
2804
2977
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
···
2819
2992
dependencies:
2820
2993
call-bind "^1.0.7"
2821
2994
2995
+
is-stream@^2.0.0:
2996
+
version "2.0.1"
2997
+
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
2998
+
integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
2999
+
2822
3000
is-string@^1.0.5, is-string@^1.0.7:
2823
3001
version "1.0.7"
2824
3002
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
···
2859
3037
dependencies:
2860
3038
call-bind "^1.0.7"
2861
3039
get-intrinsic "^1.2.4"
3040
+
3041
+
is-wsl@^2.2.0:
3042
+
version "2.2.0"
3043
+
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
3044
+
integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
3045
+
dependencies:
3046
+
is-docker "^2.0.0"
2862
3047
2863
3048
isarray@^2.0.5:
2864
3049
version "2.0.5"
···
2932
3117
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
2933
3118
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
2934
3119
3120
+
json-schema-traverse@^1.0.0:
3121
+
version "1.0.0"
3122
+
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
3123
+
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
3124
+
2935
3125
json-stable-stringify-without-jsonify@^1.0.1:
2936
3126
version "1.0.1"
2937
3127
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
···
3047
3237
resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f"
3048
3238
integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==
3049
3239
3240
+
merge-stream@^2.0.0:
3241
+
version "2.0.0"
3242
+
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
3243
+
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
3244
+
3050
3245
merge2@^1.3.0, merge2@^1.4.1:
3051
3246
version "1.4.1"
3052
3247
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
···
3060
3255
braces "^3.0.2"
3061
3256
picomatch "^2.3.1"
3062
3257
3063
-
minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
3258
+
"mime-db@>= 1.43.0 < 2":
3259
+
version "1.54.0"
3260
+
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
3261
+
integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==
3262
+
3263
+
mime-db@~1.33.0:
3264
+
version "1.33.0"
3265
+
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db"
3266
+
integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==
3267
+
3268
+
mime-types@2.1.18:
3269
+
version "2.1.18"
3270
+
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8"
3271
+
integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==
3272
+
dependencies:
3273
+
mime-db "~1.33.0"
3274
+
3275
+
mimic-fn@^2.1.0:
3276
+
version "2.1.0"
3277
+
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
3278
+
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
3279
+
3280
+
minimatch@3.1.2, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
3064
3281
version "3.1.2"
3065
3282
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
3066
3283
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
···
3074
3291
dependencies:
3075
3292
brace-expansion "^2.0.1"
3076
3293
3294
+
minimist@^1.2.0:
3295
+
version "1.2.8"
3296
+
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
3297
+
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
3298
+
3077
3299
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4:
3078
3300
version "7.0.4"
3079
3301
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
3080
3302
integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
3303
+
3304
+
ms@2.0.0:
3305
+
version "2.0.0"
3306
+
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
3307
+
integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==
3081
3308
3082
3309
ms@2.1.2:
3083
3310
version "2.1.2"
···
3118
3345
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
3119
3346
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
3120
3347
3348
+
negotiator@~0.6.4:
3349
+
version "0.6.4"
3350
+
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7"
3351
+
integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==
3352
+
3121
3353
node-html-parser@^6.1.12:
3122
3354
version "6.1.13"
3123
3355
resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-6.1.13.tgz#a1df799b83df5c6743fcd92740ba14682083b7e4"
···
3141
3373
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
3142
3374
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
3143
3375
3376
+
npm-run-path@^4.0.1:
3377
+
version "4.0.1"
3378
+
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
3379
+
integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
3380
+
dependencies:
3381
+
path-key "^3.0.0"
3382
+
3144
3383
nth-check@^2.0.1:
3145
3384
version "2.1.1"
3146
3385
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
···
3215
3454
define-properties "^1.2.1"
3216
3455
es-object-atoms "^1.0.0"
3217
3456
3457
+
on-headers@~1.1.0:
3458
+
version "1.1.0"
3459
+
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65"
3460
+
integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==
3461
+
3218
3462
once@^1.3.0:
3219
3463
version "1.4.0"
3220
3464
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
3221
3465
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
3222
3466
dependencies:
3223
3467
wrappy "1"
3468
+
3469
+
onetime@^5.1.2:
3470
+
version "5.1.2"
3471
+
resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
3472
+
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
3473
+
dependencies:
3474
+
mimic-fn "^2.1.0"
3224
3475
3225
3476
optionator@^0.9.3:
3226
3477
version "0.9.3"
···
3265
3516
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
3266
3517
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
3267
3518
3268
-
path-key@^3.1.0:
3519
+
path-is-inside@1.0.2:
3520
+
version "1.0.2"
3521
+
resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
3522
+
integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==
3523
+
3524
+
path-key@^3.0.0, path-key@^3.1.0:
3269
3525
version "3.1.1"
3270
3526
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
3271
3527
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
···
3282
3538
dependencies:
3283
3539
lru-cache "^10.2.0"
3284
3540
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
3541
+
3542
+
path-to-regexp@3.3.0:
3543
+
version "3.3.0"
3544
+
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b"
3545
+
integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==
3285
3546
3286
3547
path-type@^4.0.0:
3287
3548
version "4.0.0"
···
3409
3670
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
3410
3671
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
3411
3672
3673
+
range-parser@1.2.0:
3674
+
version "1.2.0"
3675
+
resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e"
3676
+
integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==
3677
+
3678
+
rc@^1.0.1, rc@^1.1.6:
3679
+
version "1.2.8"
3680
+
resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
3681
+
integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
3682
+
dependencies:
3683
+
deep-extend "^0.6.0"
3684
+
ini "~1.3.0"
3685
+
minimist "^1.2.0"
3686
+
strip-json-comments "~2.0.1"
3687
+
3412
3688
react-is@^16.13.1:
3413
3689
version "16.13.1"
3414
3690
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
···
3480
3756
unicode-match-property-ecmascript "^2.0.0"
3481
3757
unicode-match-property-value-ecmascript "^2.1.0"
3482
3758
3759
+
registry-auth-token@3.3.2:
3760
+
version "3.3.2"
3761
+
resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20"
3762
+
integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==
3763
+
dependencies:
3764
+
rc "^1.1.6"
3765
+
safe-buffer "^5.0.1"
3766
+
3767
+
registry-url@3.1.0:
3768
+
version "3.1.0"
3769
+
resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942"
3770
+
integrity sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==
3771
+
dependencies:
3772
+
rc "^1.0.1"
3773
+
3483
3774
regjsgen@^0.8.0:
3484
3775
version "0.8.0"
3485
3776
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab"
···
3491
3782
integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==
3492
3783
dependencies:
3493
3784
jsesc "~3.0.2"
3785
+
3786
+
require-from-string@^2.0.2:
3787
+
version "2.0.2"
3788
+
resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
3789
+
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
3494
3790
3495
3791
resolve-from@^4.0.0:
3496
3792
version "4.0.0"
···
3582
3878
has-symbols "^1.0.3"
3583
3879
isarray "^2.0.5"
3584
3880
3881
+
safe-buffer@5.2.1, safe-buffer@^5.0.1:
3882
+
version "5.2.1"
3883
+
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
3884
+
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
3885
+
3585
3886
safe-regex-test@^1.0.3:
3586
3887
version "1.0.3"
3587
3888
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
···
3603
3904
dependencies:
3604
3905
lru-cache "^6.0.0"
3605
3906
3907
+
serve-handler@6.1.6:
3908
+
version "6.1.6"
3909
+
resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.6.tgz#50803c1d3e947cd4a341d617f8209b22bd76cfa1"
3910
+
integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==
3911
+
dependencies:
3912
+
bytes "3.0.0"
3913
+
content-disposition "0.5.2"
3914
+
mime-types "2.1.18"
3915
+
minimatch "3.1.2"
3916
+
path-is-inside "1.0.2"
3917
+
path-to-regexp "3.3.0"
3918
+
range-parser "1.2.0"
3919
+
3920
+
serve@^14.2.5:
3921
+
version "14.2.5"
3922
+
resolved "https://registry.yarnpkg.com/serve/-/serve-14.2.5.tgz#569e333b99a484b3a6d25acce4a569c8c4f96373"
3923
+
integrity sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA==
3924
+
dependencies:
3925
+
"@zeit/schemas" "2.36.0"
3926
+
ajv "8.12.0"
3927
+
arg "5.0.2"
3928
+
boxen "7.0.0"
3929
+
chalk "5.0.1"
3930
+
chalk-template "0.4.0"
3931
+
clipboardy "3.0.0"
3932
+
compression "1.8.1"
3933
+
is-port-reachable "4.0.0"
3934
+
serve-handler "6.1.6"
3935
+
update-check "1.5.4"
3936
+
3606
3937
set-function-length@^1.2.1:
3607
3938
version "1.2.2"
3608
3939
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
···
3646
3977
es-errors "^1.3.0"
3647
3978
get-intrinsic "^1.2.4"
3648
3979
object-inspect "^1.13.1"
3980
+
3981
+
signal-exit@^3.0.3:
3982
+
version "3.0.7"
3983
+
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
3984
+
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
3649
3985
3650
3986
signal-exit@^4.0.1:
3651
3987
version "4.1.0"
···
3791
4127
dependencies:
3792
4128
ansi-regex "^6.0.1"
3793
4129
4130
+
strip-final-newline@^2.0.0:
4131
+
version "2.0.0"
4132
+
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
4133
+
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
4134
+
3794
4135
strip-json-comments@^3.1.1:
3795
4136
version "3.1.1"
3796
4137
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
3797
4138
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
4139
+
4140
+
strip-json-comments@~2.0.1:
4141
+
version "2.0.1"
4142
+
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
4143
+
integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
3798
4144
3799
4145
sucrase@^3.32.0:
3800
4146
version "3.35.0"
···
3937
4283
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
3938
4284
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
3939
4285
4286
+
type-fest@^2.13.0:
4287
+
version "2.19.0"
4288
+
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
4289
+
integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
4290
+
3940
4291
typed-array-buffer@^1.0.2:
3941
4292
version "1.0.2"
3942
4293
resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
···
4034
4385
escalade "^3.2.0"
4035
4386
picocolors "^1.1.1"
4036
4387
4388
+
update-check@1.5.4:
4389
+
version "1.5.4"
4390
+
resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.5.4.tgz#5b508e259558f1ad7dbc8b4b0457d4c9d28c8743"
4391
+
integrity sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==
4392
+
dependencies:
4393
+
registry-auth-token "3.3.2"
4394
+
registry-url "3.1.0"
4395
+
4037
4396
uri-js@^4.2.2:
4038
4397
version "4.4.1"
4039
4398
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
···
4046
4405
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
4047
4406
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
4048
4407
4408
+
vary@~1.1.2:
4409
+
version "1.1.2"
4410
+
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"
4411
+
integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==
4412
+
4049
4413
vite-prerender-plugin@^0.5.3:
4050
4414
version "0.5.11"
4051
4415
resolved "https://registry.yarnpkg.com/vite-prerender-plugin/-/vite-prerender-plugin-0.5.11.tgz#83e4f29e03269dceb763fb5ec2376dcc502aa79f"
···
4138
4502
dependencies:
4139
4503
isexe "^2.0.0"
4140
4504
4505
+
widest-line@^4.0.1:
4506
+
version "4.0.1"
4507
+
resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2"
4508
+
integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==
4509
+
dependencies:
4510
+
string-width "^5.0.1"
4511
+
4141
4512
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
4142
4513
version "7.0.0"
4143
4514
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
···
4147
4518
string-width "^4.1.0"
4148
4519
strip-ansi "^6.0.0"
4149
4520
4150
-
wrap-ansi@^8.1.0:
4521
+
wrap-ansi@^8.0.1, wrap-ansi@^8.1.0:
4151
4522
version "8.1.0"
4152
4523
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
4153
4524
integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+22
patches/sonner-native+0.21.0.patch
+22
patches/sonner-native+0.21.0.patch
···
1
+
diff --git a/node_modules/sonner-native/lib/commonjs/toast.js b/node_modules/sonner-native/lib/commonjs/toast.js
2
+
index 121816a..0c3c7bd 100644
3
+
--- a/node_modules/sonner-native/lib/commonjs/toast.js
4
+
+++ b/node_modules/sonner-native/lib/commonjs/toast.js
5
+
@@ -264,7 +264,7 @@ const Toast = exports.Toast = /*#__PURE__*/React.forwardRef(({
6
+
...toastSwipeHandlerProps,
7
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
8
+
entering: entering,
9
+
- exiting: exiting,
10
+
+ exiting: _reactNative.Platform.OS === 'android' ? undefined : exiting,
11
+
children: jsx
12
+
})
13
+
});
14
+
@@ -274,7 +274,7 @@ const Toast = exports.Toast = /*#__PURE__*/React.forwardRef(({
15
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, {
16
+
style: [unstyled ? undefined : elevationStyle, defaultStyles.toast, toastStyleCtx, styles?.toast, style, wiggleAnimationStyle],
17
+
entering: entering,
18
+
- exiting: exiting,
19
+
+ exiting: _reactNative.Platform.OS === 'android' ? undefined : exiting,
20
+
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, {
21
+
style: [defaultStyles.toastContent, toastContentStyleCtx, styles?.toastContent],
22
+
children: [promiseOptions || variant === 'loading' ? 'loading' in icons ? icons.loading : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {}) : icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
+3
patches/sonner-native+0.21.0.patch.md
+3
patches/sonner-native+0.21.0.patch.md
+3
src/components/StarterPack/Wizard/WizardListCard.tsx
+3
src/components/StarterPack/Wizard/WizardListCard.tsx
···
13
13
import {DISCOVER_FEED_URI, STARTER_PACK_MAX_SIZE} from '#/lib/constants'
14
14
import {sanitizeDisplayName} from '#/lib/strings/display-names'
15
15
import {sanitizeHandle} from '#/lib/strings/handles'
16
+
import {logger} from '#/logger'
16
17
import {useSession} from '#/state/session'
17
18
import {UserAvatar} from '#/view/com/util/UserAvatar'
18
19
import {
···
150
151
if (profile.did === targetProfileDid) return
151
152
152
153
if (!included) {
154
+
logger.metric('starterPack:addUser', {})
153
155
dispatch({type: 'AddProfile', profile})
154
156
} else {
157
+
logger.metric('starterPack:removeUser', {})
155
158
dispatch({type: 'RemoveProfile', profileDid: profile.did})
156
159
}
157
160
}
+4
src/components/dialogs/StarterPackDialog.tsx
+4
src/components/dialogs/StarterPackDialog.tsx
···
11
11
12
12
import {useRequireEmailVerification} from '#/lib/hooks/useRequireEmailVerification'
13
13
import {type NavigationProp} from '#/lib/routes/types'
14
+
import {logger} from '#/logger'
14
15
import {isWeb} from '#/platform/detection'
15
16
import {
16
17
invalidateActorStarterPacksWithMembershipQuery,
···
294
295
if (!starterPack.list?.uri || isPendingRefresh) return
295
296
296
297
const listUri = starterPack.list.uri
298
+
const starterPackUri = starterPack.uri
297
299
298
300
setIsPendingRefresh(true)
299
301
···
302
304
listUri: listUri,
303
305
actorDid: targetDid,
304
306
})
307
+
logger.metric('starterPack:addUser', {starterPack: starterPackUri})
305
308
} else {
306
309
if (!starterPackWithMembership.listItem?.uri) {
307
310
console.error('Cannot remove: missing membership URI')
···
313
316
actorDid: targetDid,
314
317
membershipUri: starterPackWithMembership.listItem.uri,
315
318
})
319
+
logger.metric('starterPack:removeUser', {starterPack: starterPackUri})
316
320
}
317
321
}
318
322
-1
src/lib/statsig/gates.ts
-1
src/lib/statsig/gates.ts
+7
src/logger/metrics.ts
+7
src/logger/metrics.ts
···
326
326
| 'ChatsList'
327
327
| 'SendViaChatDialog'
328
328
}
329
+
'starterPack:addUser': {
330
+
starterPack?: string
331
+
}
332
+
'starterPack:removeUser': {
333
+
starterPack?: string
334
+
}
329
335
'starterPack:share': {
330
336
starterPack: string
331
337
shareType: 'link' | 'qrcode'
···
357
363
'feed:interstitial:feedCard:press': {}
358
364
359
365
'profile:header:suggestedFollowsCard:press': {}
366
+
'profile:addToStarterPack': {}
360
367
361
368
'test:all:always': {}
362
369
'test:all:sometimes': {}
+3
-2
src/screens/Onboarding/Layout.tsx
+3
-2
src/screens/Onboarding/Layout.tsx
···
1
1
import React, {useState} from 'react'
2
2
import {ScrollView, View} from 'react-native'
3
+
import {Dimensions} from 'react-native'
3
4
import {useSafeAreaInsets} from 'react-native-safe-area-context'
4
5
import {msg} from '@lingui/macro'
5
6
import {useLingui} from '@lingui/react'
···
78
79
a.absolute,
79
80
a.z_10,
80
81
{
81
-
left: '50%',
82
+
left: isWeb ? '50%' : Dimensions.get('window').width / 2 - 45,
82
83
top: insets.top + 2,
83
-
transform: [{translateX: '-50%'}],
84
84
},
85
+
web({transform: [{translateX: '-50%'}]}),
85
86
]}>
86
87
<ButtonText>[DEV] Clear</ButtonText>
87
88
</Button>
+62
-39
src/state/session/index.tsx
+62
-39
src/state/session/index.tsx
···
14
14
createAgentAndResume,
15
15
sessionAccountToSession,
16
16
} from './agent'
17
-
import {getInitialState, reducer} from './reducer'
17
+
import {type Action, getInitialState, reducer, type State} from './reducer'
18
18
19
19
export {isSignupQueued} from './util'
20
20
import {addSessionDebugLog} from './logging'
···
46
46
})
47
47
ApiContext.displayName = 'SessionApiContext'
48
48
49
+
class SessionStore {
50
+
private state: State
51
+
private listeners = new Set<() => void>()
52
+
53
+
constructor() {
54
+
// Careful: By the time this runs, `persisted` needs to already be filled.
55
+
const initialState = getInitialState(persisted.get('session').accounts)
56
+
addSessionDebugLog({type: 'reducer:init', state: initialState})
57
+
this.state = initialState
58
+
}
59
+
60
+
getState = (): State => {
61
+
return this.state
62
+
}
63
+
64
+
subscribe = (listener: () => void) => {
65
+
this.listeners.add(listener)
66
+
return () => {
67
+
this.listeners.delete(listener)
68
+
}
69
+
}
70
+
71
+
dispatch = (action: Action) => {
72
+
const nextState = reducer(this.state, action)
73
+
this.state = nextState
74
+
// Persist synchronously without waiting for the React render cycle.
75
+
if (nextState.needsPersist) {
76
+
nextState.needsPersist = false
77
+
const persistedData = {
78
+
accounts: nextState.accounts,
79
+
currentAccount: nextState.accounts.find(
80
+
a => a.did === nextState.currentAgentState.did,
81
+
),
82
+
}
83
+
addSessionDebugLog({type: 'persisted:broadcast', data: persistedData})
84
+
persisted.write('session', persistedData)
85
+
}
86
+
this.listeners.forEach(listener => listener())
87
+
}
88
+
}
89
+
49
90
export function Provider({children}: React.PropsWithChildren<{}>) {
50
91
const cancelPendingTask = useOneTaskAtATime()
51
-
const [state, dispatch] = React.useReducer(reducer, null, () => {
52
-
const initialState = getInitialState(persisted.get('session').accounts)
53
-
addSessionDebugLog({type: 'reducer:init', state: initialState})
54
-
return initialState
55
-
})
92
+
const [store] = React.useState(() => new SessionStore())
93
+
const state = React.useSyncExternalStore(store.subscribe, store.getState)
56
94
57
95
const onAgentSessionChange = React.useCallback(
58
96
(agent: BskyAgent, accountDid: string, sessionEvent: AtpSessionEvent) => {
···
60
98
if (sessionEvent === 'expired' || sessionEvent === 'create-failed') {
61
99
emitSessionDropped()
62
100
}
63
-
dispatch({
101
+
store.dispatch({
64
102
type: 'received-agent-event',
65
103
agent,
66
104
refreshedAccount,
···
68
106
sessionEvent,
69
107
})
70
108
},
71
-
[],
109
+
[store],
72
110
)
73
111
74
112
const createAccount = React.useCallback<SessionApiContext['createAccount']>(
···
84
122
if (signal.aborted) {
85
123
return
86
124
}
87
-
dispatch({
125
+
store.dispatch({
88
126
type: 'switched-to-account',
89
127
newAgent: agent,
90
128
newAccount: account,
···
92
130
logger.metric('account:create:success', metrics, {statsig: true})
93
131
addSessionDebugLog({type: 'method:end', method: 'createAccount', account})
94
132
},
95
-
[onAgentSessionChange, cancelPendingTask],
133
+
[store, onAgentSessionChange, cancelPendingTask],
96
134
)
97
135
98
136
const login = React.useCallback<SessionApiContext['login']>(
···
107
145
if (signal.aborted) {
108
146
return
109
147
}
110
-
dispatch({
148
+
store.dispatch({
111
149
type: 'switched-to-account',
112
150
newAgent: agent,
113
151
newAccount: account,
···
119
157
)
120
158
addSessionDebugLog({type: 'method:end', method: 'login', account})
121
159
},
122
-
[onAgentSessionChange, cancelPendingTask],
160
+
[store, onAgentSessionChange, cancelPendingTask],
123
161
)
124
162
125
163
const logoutCurrentAccount = React.useCallback<
···
128
166
logContext => {
129
167
addSessionDebugLog({type: 'method:start', method: 'logout'})
130
168
cancelPendingTask()
131
-
dispatch({
169
+
store.dispatch({
132
170
type: 'logged-out-current-account',
133
171
})
134
172
logger.metric(
···
138
176
)
139
177
addSessionDebugLog({type: 'method:end', method: 'logout'})
140
178
},
141
-
[cancelPendingTask],
179
+
[store, cancelPendingTask],
142
180
)
143
181
144
182
const logoutEveryAccount = React.useCallback<
···
147
185
logContext => {
148
186
addSessionDebugLog({type: 'method:start', method: 'logout'})
149
187
cancelPendingTask()
150
-
dispatch({
188
+
store.dispatch({
151
189
type: 'logged-out-every-account',
152
190
})
153
191
logger.metric(
···
157
195
)
158
196
addSessionDebugLog({type: 'method:end', method: 'logout'})
159
197
},
160
-
[cancelPendingTask],
198
+
[store, cancelPendingTask],
161
199
)
162
200
163
201
const resumeSession = React.useCallback<SessionApiContext['resumeSession']>(
···
176
214
if (signal.aborted) {
177
215
return
178
216
}
179
-
dispatch({
217
+
store.dispatch({
180
218
type: 'switched-to-account',
181
219
newAgent: agent,
182
220
newAccount: account,
183
221
})
184
222
addSessionDebugLog({type: 'method:end', method: 'resumeSession', account})
185
223
},
186
-
[onAgentSessionChange, cancelPendingTask],
224
+
[store, onAgentSessionChange, cancelPendingTask],
187
225
)
188
226
189
227
const partialRefreshSession = React.useCallback<
···
193
231
const signal = cancelPendingTask()
194
232
const {data} = await agent.com.atproto.server.getSession()
195
233
if (signal.aborted) return
196
-
dispatch({
234
+
store.dispatch({
197
235
type: 'partial-refresh-session',
198
236
accountDid: agent.session!.did,
199
237
patch: {
···
201
239
emailAuthFactor: data.emailAuthFactor,
202
240
},
203
241
})
204
-
}, [state, cancelPendingTask])
242
+
}, [store, state, cancelPendingTask])
205
243
206
244
const removeAccount = React.useCallback<SessionApiContext['removeAccount']>(
207
245
account => {
···
211
249
account,
212
250
})
213
251
cancelPendingTask()
214
-
dispatch({
252
+
store.dispatch({
215
253
type: 'removed-account',
216
254
accountDid: account.did,
217
255
})
218
256
addSessionDebugLog({type: 'method:end', method: 'removeAccount', account})
219
257
},
220
-
[cancelPendingTask],
258
+
[store, cancelPendingTask],
221
259
)
222
-
223
-
React.useEffect(() => {
224
-
if (state.needsPersist) {
225
-
state.needsPersist = false
226
-
const persistedData = {
227
-
accounts: state.accounts,
228
-
currentAccount: state.accounts.find(
229
-
a => a.did === state.currentAgentState.did,
230
-
),
231
-
}
232
-
addSessionDebugLog({type: 'persisted:broadcast', data: persistedData})
233
-
persisted.write('session', persistedData)
234
-
}
235
-
}, [state])
236
-
237
260
React.useEffect(() => {
238
261
return persisted.onUpdate('session', nextSession => {
239
262
const synced = nextSession
240
263
addSessionDebugLog({type: 'persisted:receive', data: synced})
241
-
dispatch({
264
+
store.dispatch({
242
265
type: 'synced-accounts',
243
266
syncedAccounts: synced.accounts,
244
267
syncedCurrentDid: synced.currentAccount?.did,
···
262
285
}
263
286
}
264
287
})
265
-
}, [state, resumeSession])
288
+
}, [store, state, resumeSession])
266
289
267
290
const stateContext = React.useMemo(
268
291
() => ({
+6
-1
src/view/com/profile/ProfileMenu.tsx
+6
-1
src/view/com/profile/ProfileMenu.tsx
···
105
105
})
106
106
}, [queryClient, profile.did])
107
107
108
+
const onPressAddToStarterPacks = React.useCallback(() => {
109
+
logger.metric('profile:addToStarterPack', {})
110
+
addToStarterPacksDialogControl.open()
111
+
}, [addToStarterPacksDialogControl])
112
+
108
113
const onPressShare = React.useCallback(() => {
109
114
shareUrl(toShareUrl(makeProfileLink(profile)))
110
115
}, [profile])
···
306
311
<Menu.Item
307
312
testID="profileHeaderDropdownStarterPackAddRemoveBtn"
308
313
label={_(msg`Add to starter packs`)}
309
-
onPress={addToStarterPacksDialogControl.open}>
314
+
onPress={onPressAddToStarterPacks}>
310
315
<Menu.ItemText>
311
316
<Trans>Add to starter packs</Trans>
312
317
</Menu.ItemText>
+1
-4
src/view/shell/index.web.tsx
+1
-4
src/view/shell/index.web.tsx
···
8
8
import {useIntentHandler} from '#/lib/hooks/useIntentHandler'
9
9
import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries'
10
10
import {type NavigationProp} from '#/lib/routes/types'
11
-
import {useGate} from '#/lib/statsig/statsig'
12
11
import {useGeolocationStatus} from '#/state/geolocation'
13
12
import {useIsDrawerOpen, useSetDrawerOpen} from '#/state/shell'
14
13
import {useComposerKeyboardShortcut} from '#/state/shell/composer/useComposerKeyboardShortcut'
···
46
45
const [showDrawerDelayedExit, setShowDrawerDelayedExit] = useState(showDrawer)
47
46
const {state: policyUpdateState} = usePolicyUpdateContext()
48
47
const welcomeModalControl = useWelcomeModal()
49
-
const gate = useGate()
50
48
51
49
useLayoutEffect(() => {
52
50
if (showDrawer !== showDrawerDelayedExit) {
···
85
83
<LinkWarningDialog />
86
84
<Lightbox />
87
85
88
-
{/* Show welcome modal if the gate is enabled */}
89
-
{welcomeModalControl.isOpen && gate('welcome_modal') && (
86
+
{welcomeModalControl.isOpen && (
90
87
<WelcomeModal control={welcomeModalControl} />
91
88
)}
92
89