+1
-2
.eslintrc.js
+1
-2
.eslintrc.js
···
37
'Toast.Action',
38
'AgeAssuranceAdmonition',
39
'Span',
40
-
'StackedButton',
41
],
42
impliedTextProps: [],
43
suggestedTextWrappers: {
···
89
'no-unused-vars': 'off',
90
'@typescript-eslint/no-unused-vars': [
91
'error',
92
-
{argsIgnorePattern: '^_', varsIgnorePattern: '^_.+'},
93
],
94
'@typescript-eslint/consistent-type-imports': [
95
'warn',
···
37
'Toast.Action',
38
'AgeAssuranceAdmonition',
39
'Span',
40
],
41
impliedTextProps: [],
42
suggestedTextWrappers: {
···
88
'no-unused-vars': 'off',
89
'@typescript-eslint/no-unused-vars': [
90
'error',
91
+
{argsIgnorePattern: '^_', varsIgnorePattern: '^_'},
92
],
93
'@typescript-eslint/consistent-type-imports': [
94
'warn',
-2
README.md
-2
README.md
···
70
71
See [./LICENSE](./LICENSE) for the full license.
72
73
-
Bluesky Social PBC has committed to a software patent non-aggression pledge. For details see [the original announcement](https://bsky.social/about/blog/10-01-2025-patent-pledge).
74
-
75
## P.S.
76
77
We โค๏ธ you and all of the ways you support us. Thank you for making Bluesky a great place!
+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
"type": "module",
5
"scripts": {
6
"dev": "vite",
7
"build": "tsc && vite build",
8
"build-snippet": "tsc --project tsconfig.snippet.json",
9
"lint": "eslint --cache --ext .js,.jsx,.ts,.tsx src",
···
21
"eslint-config-preact": "^1.3.0",
22
"eslint-plugin-simple-import-sort": "^12.0.0",
23
"postcss": "^8.4.38",
24
"tailwindcss": "^3.4.3",
25
"terser": "^5.43.1",
26
"typescript": "^5.8.3",
···
4
"type": "module",
5
"scripts": {
6
"dev": "vite",
7
+
"dev-snippet": "tsc --project tsconfig.snippet.json && serve -s dist -p 3000 -n",
8
"build": "tsc && vite build",
9
"build-snippet": "tsc --project tsconfig.snippet.json",
10
"lint": "eslint --cache --ext .js,.jsx,.ts,.tsx src",
···
22
"eslint-config-preact": "^1.3.0",
23
"eslint-plugin-simple-import-sort": "^12.0.0",
24
"postcss": "^8.4.38",
25
+
"serve": "^14.2.5",
26
"tailwindcss": "^3.4.3",
27
"terser": "^5.43.1",
28
"typescript": "^5.8.3",
+11
-1
bskyembed/snippet/embed.ts
+11
-1
bskyembed/snippet/embed.ts
···
3
bluesky: {
4
scan: (element?: Pick<Element, 'querySelectorAll'>) => void
5
}
6
+
BSKY_DEV_EMBED_URL?: string
7
}
8
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'
19
20
window.bluesky = window.bluesky || {
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 {resolve} from 'node:path'
2
3
import preact from '@preact/preset-vite'
4
import legacy from '@vitejs/plugin-legacy'
5
-
import type {UserConfig} from 'vite'
6
import paths from 'vite-tsconfig-paths'
7
8
const config: UserConfig = {
9
plugins: [
10
preact(),
···
12
legacy({
13
targets: ['defaults', 'not IE 11'],
14
}),
15
],
16
build: {
17
assetsDir: 'static',
···
1
+
import fs from 'node:fs'
2
import {resolve} from 'node:path'
3
4
import preact from '@preact/preset-vite'
5
import legacy from '@vitejs/plugin-legacy'
6
+
import type {Plugin, UserConfig} from 'vite'
7
import paths from 'vite-tsconfig-paths'
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
+
38
const config: UserConfig = {
39
plugins: [
40
preact(),
···
42
legacy({
43
targets: ['defaults', 'not IE 11'],
44
}),
45
+
devOnlyRouter(),
46
],
47
build: {
48
assetsDir: 'static',
+376
-5
bskyembed/yarn.lock
+376
-5
bskyembed/yarn.lock
···
1447
regenerator-runtime "^0.14.1"
1448
systemjs "^6.15.1"
1449
1450
acorn-jsx@^5.3.2:
1451
version "5.3.2"
1452
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
···
1461
version "8.11.3"
1462
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
1463
integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
1464
1465
ajv@^6.12.4:
1466
version "6.12.6"
···
1472
json-schema-traverse "^0.4.1"
1473
uri-js "^4.2.2"
1474
1475
ansi-regex@^5.0.1:
1476
version "5.0.1"
1477
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
···
1507
normalize-path "^3.0.0"
1508
picomatch "^2.0.4"
1509
1510
-
arg@^5.0.2:
1511
version "5.0.2"
1512
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
1513
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
···
1684
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
1685
integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
1686
1687
brace-expansion@^1.1.7:
1688
version "1.1.11"
1689
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
···
1738
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
1739
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
1740
1741
call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
1742
version "1.0.7"
1743
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
···
1759
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
1760
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
1761
1762
caniuse-lite@^1.0.30001524:
1763
version "1.0.30001606"
1764
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz#b4d5f67ab0746a3b8b5b6d1f06e39c51beb39a9e"
···
1769
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz#22e9706422ad37aa50556af8c10e40e2d93a8b85"
1770
integrity sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==
1771
1772
-
chalk@^4.0.0:
1773
version "4.1.2"
1774
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
1775
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
···
1777
ansi-styles "^4.1.0"
1778
supports-color "^7.1.0"
1779
1780
chokidar@^3.5.3:
1781
version "3.6.0"
1782
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
···
1792
optionalDependencies:
1793
fsevents "~2.3.2"
1794
1795
color-convert@^2.0.1:
1796
version "2.0.1"
1797
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
···
1814
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
1815
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
1816
1817
concat-map@0.0.1:
1818
version "0.0.1"
1819
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
1820
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
1821
1822
convert-source-map@^2.0.0:
1823
version "2.0.0"
···
1845
shebang-command "^2.0.0"
1846
which "^2.0.1"
1847
1848
css-select@^5.1.0:
1849
version "5.2.2"
1850
resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e"
···
1893
es-errors "^1.3.0"
1894
is-data-view "^1.0.1"
1895
1896
debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1:
1897
version "4.4.1"
1898
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
···
1906
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
1907
dependencies:
1908
ms "2.1.2"
1909
1910
deep-is@^0.1.3:
1911
version "0.1.4"
···
2356
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
2357
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
2358
2359
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
2360
version "3.1.3"
2361
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
···
2496
has-symbols "^1.0.3"
2497
hasown "^2.0.0"
2498
2499
get-symbol-description@^1.0.2:
2500
version "1.0.2"
2501
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5"
···
2631
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
2632
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
2633
2634
ignore@^5.2.0:
2635
version "5.3.1"
2636
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
···
2661
version "2.0.4"
2662
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
2663
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
2664
2665
internal-slot@^1.0.7:
2666
version "1.0.7"
···
2741
dependencies:
2742
has-tostringtag "^1.0.0"
2743
2744
is-extglob@^2.1.1:
2745
version "2.1.1"
2746
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
···
2799
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
2800
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
2801
2802
is-regex@^1.1.4:
2803
version "1.1.4"
2804
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
···
2819
dependencies:
2820
call-bind "^1.0.7"
2821
2822
is-string@^1.0.5, is-string@^1.0.7:
2823
version "1.0.7"
2824
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
···
2859
dependencies:
2860
call-bind "^1.0.7"
2861
get-intrinsic "^1.2.4"
2862
2863
isarray@^2.0.5:
2864
version "2.0.5"
···
2932
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
2933
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
2934
2935
json-stable-stringify-without-jsonify@^1.0.1:
2936
version "1.0.1"
2937
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
···
3047
resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f"
3048
integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==
3049
3050
merge2@^1.3.0, merge2@^1.4.1:
3051
version "1.4.1"
3052
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
···
3060
braces "^3.0.2"
3061
picomatch "^2.3.1"
3062
3063
-
minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
3064
version "3.1.2"
3065
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
3066
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
···
3074
dependencies:
3075
brace-expansion "^2.0.1"
3076
3077
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4:
3078
version "7.0.4"
3079
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
3080
integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==
3081
3082
ms@2.1.2:
3083
version "2.1.2"
···
3118
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
3119
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
3120
3121
node-html-parser@^6.1.12:
3122
version "6.1.13"
3123
resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-6.1.13.tgz#a1df799b83df5c6743fcd92740ba14682083b7e4"
···
3141
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
3142
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
3143
3144
nth-check@^2.0.1:
3145
version "2.1.1"
3146
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
···
3215
define-properties "^1.2.1"
3216
es-object-atoms "^1.0.0"
3217
3218
once@^1.3.0:
3219
version "1.4.0"
3220
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
3221
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
3222
dependencies:
3223
wrappy "1"
3224
3225
optionator@^0.9.3:
3226
version "0.9.3"
···
3265
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
3266
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
3267
3268
-
path-key@^3.1.0:
3269
version "3.1.1"
3270
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
3271
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
···
3282
dependencies:
3283
lru-cache "^10.2.0"
3284
minipass "^5.0.0 || ^6.0.2 || ^7.0.0"
3285
3286
path-type@^4.0.0:
3287
version "4.0.0"
···
3409
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
3410
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
3411
3412
react-is@^16.13.1:
3413
version "16.13.1"
3414
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
···
3480
unicode-match-property-ecmascript "^2.0.0"
3481
unicode-match-property-value-ecmascript "^2.1.0"
3482
3483
regjsgen@^0.8.0:
3484
version "0.8.0"
3485
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab"
···
3491
integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==
3492
dependencies:
3493
jsesc "~3.0.2"
3494
3495
resolve-from@^4.0.0:
3496
version "4.0.0"
···
3582
has-symbols "^1.0.3"
3583
isarray "^2.0.5"
3584
3585
safe-regex-test@^1.0.3:
3586
version "1.0.3"
3587
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
···
3603
dependencies:
3604
lru-cache "^6.0.0"
3605
3606
set-function-length@^1.2.1:
3607
version "1.2.2"
3608
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
···
3646
es-errors "^1.3.0"
3647
get-intrinsic "^1.2.4"
3648
object-inspect "^1.13.1"
3649
3650
signal-exit@^4.0.1:
3651
version "4.1.0"
···
3791
dependencies:
3792
ansi-regex "^6.0.1"
3793
3794
strip-json-comments@^3.1.1:
3795
version "3.1.1"
3796
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
3797
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
3798
3799
sucrase@^3.32.0:
3800
version "3.35.0"
···
3937
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
3938
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
3939
3940
typed-array-buffer@^1.0.2:
3941
version "1.0.2"
3942
resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
···
4034
escalade "^3.2.0"
4035
picocolors "^1.1.1"
4036
4037
uri-js@^4.2.2:
4038
version "4.4.1"
4039
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
···
4046
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
4047
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
4048
4049
vite-prerender-plugin@^0.5.3:
4050
version "0.5.11"
4051
resolved "https://registry.yarnpkg.com/vite-prerender-plugin/-/vite-prerender-plugin-0.5.11.tgz#83e4f29e03269dceb763fb5ec2376dcc502aa79f"
···
4138
dependencies:
4139
isexe "^2.0.0"
4140
4141
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
4142
version "7.0.0"
4143
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
···
4147
string-width "^4.1.0"
4148
strip-ansi "^6.0.0"
4149
4150
-
wrap-ansi@^8.1.0:
4151
version "8.1.0"
4152
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
4153
integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
···
1447
regenerator-runtime "^0.14.1"
1448
systemjs "^6.15.1"
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
+
1455
acorn-jsx@^5.3.2:
1456
version "5.3.2"
1457
resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
···
1466
version "8.11.3"
1467
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a"
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"
1479
1480
ajv@^6.12.4:
1481
version "6.12.6"
···
1487
json-schema-traverse "^0.4.1"
1488
uri-js "^4.2.2"
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
+
1497
ansi-regex@^5.0.1:
1498
version "5.0.1"
1499
resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
···
1529
normalize-path "^3.0.0"
1530
picomatch "^2.0.4"
1531
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:
1538
version "5.0.2"
1539
resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c"
1540
integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==
···
1711
resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
1712
integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
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
+
1728
brace-expansion@^1.1.7:
1729
version "1.1.11"
1730
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
···
1779
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
1780
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
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
+
1792
call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7:
1793
version "1.0.7"
1794
resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9"
···
1810
resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5"
1811
integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==
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
+
1818
caniuse-lite@^1.0.30001524:
1819
version "1.0.30001606"
1820
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz#b4d5f67ab0746a3b8b5b6d1f06e39c51beb39a9e"
···
1825
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz#22e9706422ad37aa50556af8c10e40e2d93a8b85"
1826
integrity sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==
1827
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:
1841
version "4.1.2"
1842
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
1843
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
···
1845
ansi-styles "^4.1.0"
1846
supports-color "^7.1.0"
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
+
1853
chokidar@^3.5.3:
1854
version "3.6.0"
1855
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b"
···
1865
optionalDependencies:
1866
fsevents "~2.3.2"
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
+
1882
color-convert@^2.0.1:
1883
version "2.0.1"
1884
resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
···
1901
resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
1902
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
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
+
1924
concat-map@0.0.1:
1925
version "0.0.1"
1926
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
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==
1933
1934
convert-source-map@^2.0.0:
1935
version "2.0.0"
···
1957
shebang-command "^2.0.0"
1958
which "^2.0.1"
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
+
1969
css-select@^5.1.0:
1970
version "5.2.2"
1971
resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e"
···
2014
es-errors "^1.3.0"
2015
is-data-view "^1.0.1"
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
+
2024
debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1:
2025
version "4.4.1"
2026
resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b"
···
2034
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
2035
dependencies:
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==
2042
2043
deep-is@^0.1.3:
2044
version "0.1.4"
···
2489
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
2490
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
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
+
2507
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
2508
version "3.1.3"
2509
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
···
2644
has-symbols "^1.0.3"
2645
hasown "^2.0.0"
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
+
2652
get-symbol-description@^1.0.2:
2653
version "1.0.2"
2654
resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5"
···
2784
resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
2785
integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==
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
+
2792
ignore@^5.2.0:
2793
version "5.3.1"
2794
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef"
···
2819
version "2.0.4"
2820
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
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==
2827
2828
internal-slot@^1.0.7:
2829
version "1.0.7"
···
2904
dependencies:
2905
has-tostringtag "^1.0.0"
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
+
2912
is-extglob@^2.1.1:
2913
version "2.1.1"
2914
resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
···
2967
resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
2968
integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
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
+
2975
is-regex@^1.1.4:
2976
version "1.1.4"
2977
resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
···
2992
dependencies:
2993
call-bind "^1.0.7"
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
+
3000
is-string@^1.0.5, is-string@^1.0.7:
3001
version "1.0.7"
3002
resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
···
3037
dependencies:
3038
call-bind "^1.0.7"
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"
3047
3048
isarray@^2.0.5:
3049
version "2.0.5"
···
3117
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
3118
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
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
+
3125
json-stable-stringify-without-jsonify@^1.0.1:
3126
version "1.0.1"
3127
resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
···
3237
resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f"
3238
integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==
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
+
3245
merge2@^1.3.0, merge2@^1.4.1:
3246
version "1.4.1"
3247
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
···
3255
braces "^3.0.2"
3256
picomatch "^2.3.1"
3257
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:
3281
version "3.1.2"
3282
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
3283
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
···
3291
dependencies:
3292
brace-expansion "^2.0.1"
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
+
3299
"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4:
3300
version "7.0.4"
3301
resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c"
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==
3308
3309
ms@2.1.2:
3310
version "2.1.2"
···
3345
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
3346
integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==
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
+
3353
node-html-parser@^6.1.12:
3354
version "6.1.13"
3355
resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-6.1.13.tgz#a1df799b83df5c6743fcd92740ba14682083b7e4"
···
3373
resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942"
3374
integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==
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
+
3383
nth-check@^2.0.1:
3384
version "2.1.1"
3385
resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
···
3454
define-properties "^1.2.1"
3455
es-object-atoms "^1.0.0"
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
+
3462
once@^1.3.0:
3463
version "1.4.0"
3464
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
3465
integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
3466
dependencies:
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"
3475
3476
optionator@^0.9.3:
3477
version "0.9.3"
···
3516
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
3517
integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
3518
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:
3525
version "3.1.1"
3526
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
3527
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
···
3538
dependencies:
3539
lru-cache "^10.2.0"
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==
3546
3547
path-type@^4.0.0:
3548
version "4.0.0"
···
3670
resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
3671
integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
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
+
3688
react-is@^16.13.1:
3689
version "16.13.1"
3690
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
···
3756
unicode-match-property-ecmascript "^2.0.0"
3757
unicode-match-property-value-ecmascript "^2.1.0"
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
+
3774
regjsgen@^0.8.0:
3775
version "0.8.0"
3776
resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab"
···
3782
integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==
3783
dependencies:
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==
3790
3791
resolve-from@^4.0.0:
3792
version "4.0.0"
···
3878
has-symbols "^1.0.3"
3879
isarray "^2.0.5"
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
+
3886
safe-regex-test@^1.0.3:
3887
version "1.0.3"
3888
resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377"
···
3904
dependencies:
3905
lru-cache "^6.0.0"
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
+
3937
set-function-length@^1.2.1:
3938
version "1.2.2"
3939
resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449"
···
3977
es-errors "^1.3.0"
3978
get-intrinsic "^1.2.4"
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==
3985
3986
signal-exit@^4.0.1:
3987
version "4.1.0"
···
4127
dependencies:
4128
ansi-regex "^6.0.1"
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
+
4135
strip-json-comments@^3.1.1:
4136
version "3.1.1"
4137
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
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==
4144
4145
sucrase@^3.32.0:
4146
version "3.35.0"
···
4283
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
4284
integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
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
+
4291
typed-array-buffer@^1.0.2:
4292
version "1.0.2"
4293
resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3"
···
4385
escalade "^3.2.0"
4386
picocolors "^1.1.1"
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
+
4396
uri-js@^4.2.2:
4397
version "4.4.1"
4398
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
···
4405
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
4406
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
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
+
4413
vite-prerender-plugin@^0.5.3:
4414
version "0.5.11"
4415
resolved "https://registry.yarnpkg.com/vite-prerender-plugin/-/vite-prerender-plugin-0.5.11.tgz#83e4f29e03269dceb763fb5ec2376dcc502aa79f"
···
4502
dependencies:
4503
isexe "^2.0.0"
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
+
4512
"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
4513
version "7.0.0"
4514
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
···
4518
string-width "^4.1.0"
4519
strip-ansi "^6.0.0"
4520
4521
+
wrap-ansi@^8.0.1, wrap-ansi@^8.1.0:
4522
version "8.1.0"
4523
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
4524
integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+3
-3
package.json
+3
-3
package.json
···
71
"icons:optimize": "svgo -f ./assets/icons"
72
},
73
"dependencies": {
74
-
"@atproto/api": "^0.17.0",
75
"@bitdrift/react-native": "^0.6.8",
76
"@braintree/sanitize-url": "^6.0.2",
77
"@bsky.app/alf": "^0.1.2",
···
246
"babel-jest": "^29.7.0",
247
"babel-plugin-macros": "^3.1.0",
248
"babel-plugin-module-resolver": "^5.0.2",
249
-
"babel-plugin-react-compiler": "^19.1.0-rc.3",
250
"babel-preset-expo": "~54.0.0",
251
"eslint": "^8.19.0",
252
"eslint-plugin-bsky-internal": "link:./eslint",
···
254
"eslint-plugin-import": "^2.31.0",
255
"eslint-plugin-lingui": "^0.2.0",
256
"eslint-plugin-react": "^7.33.2",
257
-
"eslint-plugin-react-compiler": "^19.1.0-rc.2",
258
"eslint-plugin-react-native-a11y": "^3.3.0",
259
"eslint-plugin-simple-import-sort": "^12.0.0",
260
"file-loader": "6.2.0",
···
71
"icons:optimize": "svgo -f ./assets/icons"
72
},
73
"dependencies": {
74
+
"@atproto/api": "^0.16.7",
75
"@bitdrift/react-native": "^0.6.8",
76
"@braintree/sanitize-url": "^6.0.2",
77
"@bsky.app/alf": "^0.1.2",
···
246
"babel-jest": "^29.7.0",
247
"babel-plugin-macros": "^3.1.0",
248
"babel-plugin-module-resolver": "^5.0.2",
249
+
"babel-plugin-react-compiler": "^19.1.0-rc.1",
250
"babel-preset-expo": "~54.0.0",
251
"eslint": "^8.19.0",
252
"eslint-plugin-bsky-internal": "link:./eslint",
···
254
"eslint-plugin-import": "^2.31.0",
255
"eslint-plugin-lingui": "^0.2.0",
256
"eslint-plugin-react": "^7.33.2",
257
+
"eslint-plugin-react-compiler": "^19.1.0-rc.1",
258
"eslint-plugin-react-native-a11y": "^3.3.0",
259
"eslint-plugin-simple-import-sort": "^12.0.0",
260
"file-loader": "6.2.0",
+24
-44
src/components/Admonition.tsx
+24
-44
src/components/Admonition.tsx
···
3
4
import {atoms as a, useBreakpoints, useTheme} from '#/alf'
5
import {Button as BaseButton, type ButtonProps} from '#/components/Button'
6
-
import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfoIcon} from '#/components/icons/CircleInfo'
7
-
import {CircleX_Stroke2_Corner0_Rounded as CircleXIcon} from '#/components/icons/CircleX'
8
import {Warning_Stroke2_Corner0_Rounded as WarningIcon} from '#/components/icons/Warning'
9
import {Text as BaseText, type TextProps} from '#/components/Typography'
10
11
export const colors = {
12
-
warning: '#FFC404',
13
}
14
15
type Context = {
···
25
const t = useTheme()
26
const {type} = useContext(Context)
27
const Icon = {
28
-
info: CircleInfoIcon,
29
-
tip: CircleInfoIcon,
30
warning: WarningIcon,
31
-
error: CircleXIcon,
32
}[type]
33
const fill = {
34
info: t.atoms.text_contrast_medium.color,
35
tip: t.palette.primary_500,
36
-
warning: colors.warning,
37
error: t.palette.negative_500,
38
}[type]
39
return <Icon fill={fill} size="md" />
40
}
41
42
-
export function Content({
43
-
children,
44
-
style,
45
-
...rest
46
-
}: {
47
-
children: React.ReactNode
48
-
style?: StyleProp<ViewStyle>
49
-
}) {
50
-
return (
51
-
<View
52
-
style={[a.gap_sm, a.flex_1, {minHeight: 20}, a.justify_center, style]}
53
-
{...rest}>
54
-
{children}
55
-
</View>
56
-
)
57
-
}
58
-
59
export function Text({
60
children,
61
style,
62
...rest
63
}: Pick<TextProps, 'children' | 'style'>) {
64
return (
65
-
<BaseText {...rest} style={[a.text_sm, a.leading_snug, a.pr_md, style]}>
66
{children}
67
</BaseText>
68
)
···
71
export function Button({
72
children,
73
...props
74
-
}: Omit<ButtonProps, 'size' | 'variant'>) {
75
return (
76
-
<BaseButton size="tiny" {...props}>
77
{children}
78
</BaseButton>
79
)
80
}
81
82
-
export function Row({
83
-
children,
84
-
style,
85
-
}: {
86
-
children: React.ReactNode
87
-
style?: StyleProp<ViewStyle>
88
-
}) {
89
return (
90
-
<View style={[a.flex_1, a.flex_row, a.align_start, a.gap_sm, style]}>
91
{children}
92
</View>
93
)
···
105
const t = useTheme()
106
const {gtMobile} = useBreakpoints()
107
const borderColor = {
108
-
info: t.atoms.border_contrast_high.borderColor,
109
-
tip: t.palette.primary_500,
110
-
warning: colors.warning,
111
-
error: t.palette.negative_500,
112
}[type]
113
return (
114
<Context.Provider value={{type}}>
115
<View
116
style={[
117
gtMobile ? a.p_md : a.p_sm,
118
-
a.p_md,
119
a.rounded_sm,
120
a.border,
121
-
t.atoms.bg,
122
{borderColor},
123
style,
124
]}>
···
141
<Outer type={type} style={style}>
142
<Row>
143
<Icon />
144
-
<Content>
145
-
<Text>{children}</Text>
146
-
</Content>
147
</Row>
148
</Outer>
149
)
···
3
4
import {atoms as a, useBreakpoints, useTheme} from '#/alf'
5
import {Button as BaseButton, type ButtonProps} from '#/components/Button'
6
+
import {CircleInfo_Stroke2_Corner0_Rounded as ErrorIcon} from '#/components/icons/CircleInfo'
7
+
import {Eye_Stroke2_Corner0_Rounded as InfoIcon} from '#/components/icons/Eye'
8
+
import {Leaf_Stroke2_Corner0_Rounded as TipIcon} from '#/components/icons/Leaf'
9
import {Warning_Stroke2_Corner0_Rounded as WarningIcon} from '#/components/icons/Warning'
10
import {Text as BaseText, type TextProps} from '#/components/Typography'
11
12
export const colors = {
13
+
warning: {
14
+
light: '#DFBC00',
15
+
dark: '#BFAF1F',
16
+
},
17
}
18
19
type Context = {
···
29
const t = useTheme()
30
const {type} = useContext(Context)
31
const Icon = {
32
+
info: InfoIcon,
33
+
tip: TipIcon,
34
warning: WarningIcon,
35
+
error: ErrorIcon,
36
}[type]
37
const fill = {
38
info: t.atoms.text_contrast_medium.color,
39
tip: t.palette.primary_500,
40
+
warning: colors.warning.light,
41
error: t.palette.negative_500,
42
}[type]
43
return <Icon fill={fill} size="md" />
44
}
45
46
export function Text({
47
children,
48
style,
49
...rest
50
}: Pick<TextProps, 'children' | 'style'>) {
51
return (
52
+
<BaseText
53
+
{...rest}
54
+
style={[a.flex_1, a.text_sm, a.leading_snug, a.pr_md, style]}>
55
{children}
56
</BaseText>
57
)
···
60
export function Button({
61
children,
62
...props
63
+
}: Omit<ButtonProps, 'size' | 'variant' | 'color'>) {
64
return (
65
+
<BaseButton size="tiny" variant="outline" color="secondary" {...props}>
66
{children}
67
</BaseButton>
68
)
69
}
70
71
+
export function Row({children}: {children: React.ReactNode}) {
72
return (
73
+
<View style={[a.flex_1, a.flex_row, a.align_center, a.gap_sm]}>
74
{children}
75
</View>
76
)
···
88
const t = useTheme()
89
const {gtMobile} = useBreakpoints()
90
const borderColor = {
91
+
info: t.atoms.border_contrast_low.borderColor,
92
+
tip: t.atoms.border_contrast_low.borderColor,
93
+
warning: t.atoms.border_contrast_low.borderColor,
94
+
error: t.atoms.border_contrast_low.borderColor,
95
}[type]
96
return (
97
<Context.Provider value={{type}}>
98
<View
99
style={[
100
gtMobile ? a.p_md : a.p_sm,
101
a.rounded_sm,
102
a.border,
103
+
t.atoms.bg_contrast_25,
104
{borderColor},
105
style,
106
]}>
···
123
<Outer type={type} style={style}>
124
<Row>
125
<Icon />
126
+
<Text>{children}</Text>
127
</Row>
128
</Outer>
129
)
+41
-53
src/components/Button.tsx
+41
-53
src/components/Button.tsx
···
274
} else if (color === 'primary_subtle') {
275
if (!disabled) {
276
baseStyles.push({
277
-
backgroundColor: t.palette.primary_50,
278
})
279
hoverStyles.push({
280
-
backgroundColor: t.palette.primary_100,
281
})
282
} else {
283
baseStyles.push({
···
287
} else if (color === 'negative_subtle') {
288
if (!disabled) {
289
baseStyles.push({
290
-
backgroundColor: t.palette.negative_50,
291
})
292
hoverStyles.push({
293
-
backgroundColor: t.palette.negative_100,
294
})
295
} else {
296
baseStyles.push({
···
602
} else if (color === 'primary_subtle') {
603
if (!disabled) {
604
baseStyles.push({
605
-
color: t.palette.primary_600,
606
})
607
} else {
608
baseStyles.push({
609
-
color: t.palette.primary_200,
610
})
611
}
612
} else if (color === 'negative_subtle') {
613
if (!disabled) {
614
baseStyles.push({
615
-
color: t.palette.negative_600,
616
})
617
} else {
618
baseStyles.push({
619
-
color: t.palette.negative_200,
620
})
621
}
622
}
···
723
} else if (size === 'small') {
724
baseStyles.push(a.text_sm, a.leading_snug, a.font_medium)
725
} else if (size === 'tiny') {
726
-
baseStyles.push(a.text_xs, a.leading_snug, a.font_semi_bold)
727
}
728
729
return StyleSheet.flatten(baseStyles)
···
837
</View>
838
)
839
}
840
-
841
-
export type StackedButtonProps = Omit<
842
-
ButtonProps,
843
-
keyof VariantProps | 'children'
844
-
> &
845
-
Pick<VariantProps, 'color'> & {
846
-
children: React.ReactNode
847
-
icon: React.ComponentType<SVGIconProps>
848
-
}
849
-
850
-
export function StackedButton({children, ...props}: StackedButtonProps) {
851
-
return (
852
-
<Button
853
-
{...props}
854
-
size="tiny"
855
-
style={[
856
-
a.flex_col,
857
-
{
858
-
height: 72,
859
-
paddingHorizontal: 16,
860
-
borderRadius: 20,
861
-
gap: 4,
862
-
},
863
-
props.style,
864
-
]}>
865
-
<StackedButtonInnerText icon={props.icon}>
866
-
{children}
867
-
</StackedButtonInnerText>
868
-
</Button>
869
-
)
870
-
}
871
-
872
-
function StackedButtonInnerText({
873
-
children,
874
-
icon: Icon,
875
-
}: Pick<StackedButtonProps, 'icon' | 'children'>) {
876
-
const textStyles = useSharedButtonTextStyles()
877
-
return (
878
-
<>
879
-
<Icon width={24} fill={textStyles.color} />
880
-
<ButtonText>{children}</ButtonText>
881
-
</>
882
-
)
883
-
}
···
274
} else if (color === 'primary_subtle') {
275
if (!disabled) {
276
baseStyles.push({
277
+
backgroundColor: select(t.name, {
278
+
light: t.palette.primary_50,
279
+
dim: t.palette.primary_100,
280
+
dark: t.palette.primary_100,
281
+
}),
282
})
283
hoverStyles.push({
284
+
backgroundColor: select(t.name, {
285
+
light: t.palette.primary_100,
286
+
dim: t.palette.primary_200,
287
+
dark: t.palette.primary_200,
288
+
}),
289
})
290
} else {
291
baseStyles.push({
···
295
} else if (color === 'negative_subtle') {
296
if (!disabled) {
297
baseStyles.push({
298
+
backgroundColor: select(t.name, {
299
+
light: t.palette.negative_50,
300
+
dim: t.palette.negative_100,
301
+
dark: t.palette.negative_100,
302
+
}),
303
})
304
hoverStyles.push({
305
+
backgroundColor: select(t.name, {
306
+
light: t.palette.negative_100,
307
+
dim: t.palette.negative_200,
308
+
dark: t.palette.negative_200,
309
+
}),
310
})
311
} else {
312
baseStyles.push({
···
618
} else if (color === 'primary_subtle') {
619
if (!disabled) {
620
baseStyles.push({
621
+
color: select(t.name, {
622
+
light: t.palette.primary_600,
623
+
dim: t.palette.primary_800,
624
+
dark: t.palette.primary_800,
625
+
}),
626
})
627
} else {
628
baseStyles.push({
629
+
color: select(t.name, {
630
+
light: t.palette.primary_200,
631
+
dim: t.palette.primary_200,
632
+
dark: t.palette.primary_200,
633
+
}),
634
})
635
}
636
} else if (color === 'negative_subtle') {
637
if (!disabled) {
638
baseStyles.push({
639
+
color: select(t.name, {
640
+
light: t.palette.negative_600,
641
+
dim: t.palette.negative_800,
642
+
dark: t.palette.negative_800,
643
+
}),
644
})
645
} else {
646
baseStyles.push({
647
+
color: select(t.name, {
648
+
light: t.palette.negative_200,
649
+
dim: t.palette.negative_200,
650
+
dark: t.palette.negative_200,
651
+
}),
652
})
653
}
654
}
···
755
} else if (size === 'small') {
756
baseStyles.push(a.text_sm, a.leading_snug, a.font_medium)
757
} else if (size === 'tiny') {
758
+
baseStyles.push(a.text_xs, a.leading_snug, a.font_medium)
759
}
760
761
return StyleSheet.flatten(baseStyles)
···
869
</View>
870
)
871
}
+1
src/components/dialogs/StarterPackDialog.tsx
+1
src/components/dialogs/StarterPackDialog.tsx
+1
-3
src/components/moderation/LabelsOnMeDialog.tsx
+1
-3
src/components/moderation/LabelsOnMeDialog.tsx
+1
-3
src/components/moderation/ModerationDetailsDialog.tsx
+1
-3
src/components/moderation/ModerationDetailsDialog.tsx
+1
-2
src/components/moderation/ProfileHeaderAlerts.tsx
+1
-2
src/components/moderation/ProfileHeaderAlerts.tsx
+3
-6
src/components/moderation/ReportDialog/index.tsx
+3
-6
src/components/moderation/ReportDialog/index.tsx
···
219
<Admonition.Outer type="error">
220
<Admonition.Row>
221
<Admonition.Icon />
222
-
<Admonition.Content>
223
-
<Admonition.Text>
224
-
<Trans>Something went wrong, please try again</Trans>
225
-
</Admonition.Text>
226
-
</Admonition.Content>
227
<Admonition.Button
228
-
color="negative_subtle"
229
label={_(msg`Retry loading report options`)}
230
onPress={() => refetchLabelers()}>
231
<ButtonText>
···
219
<Admonition.Outer type="error">
220
<Admonition.Row>
221
<Admonition.Icon />
222
+
<Admonition.Text>
223
+
<Trans>Something went wrong, please try again</Trans>
224
+
</Admonition.Text>
225
<Admonition.Button
226
label={_(msg`Retry loading report options`)}
227
onPress={() => refetchLabelers()}>
228
<ButtonText>
+1
-1
src/lib/hooks/useIntentHandler.ts
+1
-1
src/lib/hooks/useIntentHandler.ts
···
51
}
52
53
const urlp = new URL(url)
54
-
const [__, intent, intentType] = urlp.pathname.split('/')
55
56
// On native, our links look like bluesky://intent/SomeIntent, so we have to check the hostname for the
57
// intent check. On web, we have to check the first part of the path since we have an actual hostname
···
51
}
52
53
const urlp = new URL(url)
54
+
const [_, intent, intentType] = urlp.pathname.split('/')
55
56
// On native, our links look like bluesky://intent/SomeIntent, so we have to check the hostname for the
57
// intent check. On web, we have to check the first part of the path since we have an actual hostname
+11
-11
src/lib/strings/embed-player.ts
+11
-11
src/lib/strings/embed-player.ts
···
105
urlp.hostname === 'm.youtube.com' ||
106
urlp.hostname === 'music.youtube.com'
107
) {
108
-
const [__, page, shortOrLiveVideoId] = urlp.pathname.split('/')
109
110
const isShorts = page === 'shorts'
111
const isLive = page === 'live'
···
137
window.location.hostname
138
: 'localhost'
139
140
-
const [__, channelOrVideo, clipOrId, id] = urlp.pathname.split('/')
141
142
if (channelOrVideo === 'videos') {
143
return {
···
162
163
// spotify
164
if (urlp.hostname === 'open.spotify.com') {
165
-
const [__, typeOrLocale, idOrType, id] = urlp.pathname.split('/')
166
167
if (idOrType) {
168
if (typeOrLocale === 'playlist' || idOrType === 'playlist') {
···
210
urlp.hostname === 'soundcloud.com' ||
211
urlp.hostname === 'www.soundcloud.com'
212
) {
213
-
const [__, user, trackOrSets, set] = urlp.pathname.split('/')
214
215
if (user && trackOrSets) {
216
if (trackOrSets === 'sets' && set) {
···
270
}
271
272
if (urlp.hostname === 'vimeo.com' || urlp.hostname === 'www.vimeo.com') {
273
-
const [__, videoId] = urlp.pathname.split('/')
274
if (videoId) {
275
return {
276
type: 'vimeo_video',
···
281
}
282
283
if (urlp.hostname === 'giphy.com' || urlp.hostname === 'www.giphy.com') {
284
-
const [__, gifs, nameAndId] = urlp.pathname.split('/')
285
286
/*
287
* nameAndId is a string that consists of the name (dash separated) and the id of the gif (the last part of the name)
···
309
// These can include (presumably) a tracking id in the path name, so we have to check for that as well
310
if (giphyRegex.test(urlp.hostname)) {
311
// We can link directly to the gif, if its a proper link
312
-
const [__, media, trackingOrId, idOrFilename, filename] =
313
urlp.pathname.split('/')
314
315
if (media === 'media') {
···
338
// Finally, we should see if it is a link to i.giphy.com. These links don't necessarily end in .gif but can also
339
// be .webp
340
if (urlp.hostname === 'i.giphy.com' || urlp.hostname === 'www.i.giphy.com') {
341
-
const [__, mediaOrFilename, filename] = urlp.pathname.split('/')
342
343
if (mediaOrFilename === 'media' && filename) {
344
const gifId = filename.split('.')[0]
···
389
const path_components = urlp.pathname.slice(1, i + 1).split('/')
390
if (path_components.length === 4) {
391
// discard username - it's not relevant
392
-
const [photos, __, albums, id] = path_components
393
if (photos === 'photos' && albums === 'albums') {
394
// this at least has the shape of a valid photo-album URL!
395
return {
···
417
// link shortened flickr path
418
if (urlp.hostname === 'flic.kr') {
419
const b58alph = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'
420
-
let [__, type, idBase58Enc] = urlp.pathname.split('/')
421
let id = 0n
422
for (const char of idBase58Enc) {
423
const nextIdx = b58alph.indexOf(char)
···
528
return {success: false}
529
}
530
531
-
let [__, id, filename] = urlp.pathname.split('/')
532
533
if (!id || !filename) {
534
return {success: false}
···
105
urlp.hostname === 'm.youtube.com' ||
106
urlp.hostname === 'music.youtube.com'
107
) {
108
+
const [_, page, shortOrLiveVideoId] = urlp.pathname.split('/')
109
110
const isShorts = page === 'shorts'
111
const isLive = page === 'live'
···
137
window.location.hostname
138
: 'localhost'
139
140
+
const [_, channelOrVideo, clipOrId, id] = urlp.pathname.split('/')
141
142
if (channelOrVideo === 'videos') {
143
return {
···
162
163
// spotify
164
if (urlp.hostname === 'open.spotify.com') {
165
+
const [_, typeOrLocale, idOrType, id] = urlp.pathname.split('/')
166
167
if (idOrType) {
168
if (typeOrLocale === 'playlist' || idOrType === 'playlist') {
···
210
urlp.hostname === 'soundcloud.com' ||
211
urlp.hostname === 'www.soundcloud.com'
212
) {
213
+
const [_, user, trackOrSets, set] = urlp.pathname.split('/')
214
215
if (user && trackOrSets) {
216
if (trackOrSets === 'sets' && set) {
···
270
}
271
272
if (urlp.hostname === 'vimeo.com' || urlp.hostname === 'www.vimeo.com') {
273
+
const [_, videoId] = urlp.pathname.split('/')
274
if (videoId) {
275
return {
276
type: 'vimeo_video',
···
281
}
282
283
if (urlp.hostname === 'giphy.com' || urlp.hostname === 'www.giphy.com') {
284
+
const [_, gifs, nameAndId] = urlp.pathname.split('/')
285
286
/*
287
* nameAndId is a string that consists of the name (dash separated) and the id of the gif (the last part of the name)
···
309
// These can include (presumably) a tracking id in the path name, so we have to check for that as well
310
if (giphyRegex.test(urlp.hostname)) {
311
// We can link directly to the gif, if its a proper link
312
+
const [_, media, trackingOrId, idOrFilename, filename] =
313
urlp.pathname.split('/')
314
315
if (media === 'media') {
···
338
// Finally, we should see if it is a link to i.giphy.com. These links don't necessarily end in .gif but can also
339
// be .webp
340
if (urlp.hostname === 'i.giphy.com' || urlp.hostname === 'www.i.giphy.com') {
341
+
const [_, mediaOrFilename, filename] = urlp.pathname.split('/')
342
343
if (mediaOrFilename === 'media' && filename) {
344
const gifId = filename.split('.')[0]
···
389
const path_components = urlp.pathname.slice(1, i + 1).split('/')
390
if (path_components.length === 4) {
391
// discard username - it's not relevant
392
+
const [photos, _, albums, id] = path_components
393
if (photos === 'photos' && albums === 'albums') {
394
// this at least has the shape of a valid photo-album URL!
395
return {
···
417
// link shortened flickr path
418
if (urlp.hostname === 'flic.kr') {
419
const b58alph = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ'
420
+
let [_, type, idBase58Enc] = urlp.pathname.split('/')
421
let id = 0n
422
for (const char of idBase58Enc) {
423
const nextIdx = b58alph.indexOf(char)
···
528
return {success: false}
529
}
530
531
+
let [_, id, filename] = urlp.pathname.split('/')
532
533
if (!id || !filename) {
534
return {success: false}
+17
src/lib/strings/helpers.ts
+17
src/lib/strings/helpers.ts
···
62
}, [splitter, maxCount, text])
63
}
64
65
+
// https://stackoverflow.com/a/52171480
66
+
export function toHashCode(str: string, seed = 0): number {
67
+
let h1 = 0xdeadbeef ^ seed,
68
+
h2 = 0x41c6ce57 ^ seed
69
+
for (let i = 0, ch; i < str.length; i++) {
70
+
ch = str.charCodeAt(i)
71
+
h1 = Math.imul(h1 ^ ch, 2654435761)
72
+
h2 = Math.imul(h2 ^ ch, 1597334677)
73
+
}
74
+
h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507)
75
+
h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909)
76
+
h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507)
77
+
h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909)
78
+
79
+
return 4294967296 * (2097151 & h2) + (h1 >>> 0)
80
+
}
81
+
82
export function countLines(str: string | undefined): number {
83
if (!str) return 0
84
return str.match(/\n/g)?.length ?? 0
+1
-1
src/lib/strings/starter-pack.ts
+1
-1
src/lib/strings/starter-pack.ts
+215
-225
src/locale/locales/en/messages.po
+215
-225
src/locale/locales/en/messages.po
···
124
msgid "{0, plural, other {# people have}} used this starter pack!"
125
msgstr ""
126
127
-
#: src/components/dialogs/StarterPackDialog.tsx:356
128
msgid "{0, plural, other {+# more}}"
129
msgstr ""
130
···
521
msgid "7 days"
522
msgstr ""
523
524
-
#: src/screens/Onboarding/StepFinished.tsx:340
525
msgid "A collection of popular feeds you can find on Bluesky, including News, Booksky, Game Dev, Blacksky, and Fountain Pens"
526
msgstr ""
527
···
568
msgid "Accept Request"
569
msgstr ""
570
571
-
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:179
572
-
msgid "Accept this language suggestion"
573
-
msgstr ""
574
-
575
#: src/screens/Settings/AccessibilitySettings.tsx:44
576
#: src/screens/Settings/Settings.tsx:220
577
#: src/screens/Settings/Settings.tsx:223
···
608
msgid "Account muted"
609
msgstr ""
610
611
-
#: src/components/moderation/ModerationDetailsDialog.tsx:105
612
#: src/lib/moderation/useModerationCauseDescription.ts:98
613
msgid "Account Muted"
614
msgstr ""
615
616
-
#: src/components/moderation/ModerationDetailsDialog.tsx:91
617
msgid "Account Muted by List"
618
msgstr ""
619
···
658
659
#: src/components/dialogs/lists/ListAddRemoveUsersDialog.tsx:169
660
#: src/components/dialogs/MutedWords.tsx:333
661
-
#: src/components/dialogs/StarterPackDialog.tsx:370
662
-
#: src/components/dialogs/StarterPackDialog.tsx:376
663
#: src/view/com/modals/UserAddRemoveLists.tsx:235
664
msgid "Add"
665
msgstr ""
···
712
msgid "Add another account"
713
msgstr ""
714
715
-
#: src/view/com/composer/Composer.tsx:853
716
msgid "Add another post"
717
msgstr ""
718
719
-
#: src/view/com/composer/Composer.tsx:1490
720
msgid "Add another post to thread"
721
msgstr ""
722
···
739
msgid "Add media to post"
740
msgstr ""
741
742
-
#: src/components/moderation/ReportDialog/index.tsx:406
743
-
#: src/components/moderation/ReportDialog/index.tsx:410
744
msgid "Add more details (optional)"
745
msgstr ""
746
···
794
msgid "Add to saved posts"
795
msgstr ""
796
797
-
#: src/components/dialogs/StarterPackDialog.tsx:175
798
#: src/view/com/profile/ProfileMenu.tsx:308
799
#: src/view/com/profile/ProfileMenu.tsx:311
800
msgid "Add to starter packs"
···
809
msgid "Added to list"
810
msgstr ""
811
812
-
#: src/components/dialogs/StarterPackDialog.tsx:257
813
msgid "Added to starter pack"
814
msgstr ""
815
···
817
msgid "Additional details (limit 1000 characters)"
818
msgstr ""
819
820
-
#: src/components/moderation/ReportDialog/index.tsx:424
821
msgid "Additional details (limit 300 characters)"
822
msgstr ""
823
···
883
#: src/screens/Search/components/SearchLanguageDropdown.tsx:64
884
#: src/screens/Search/components/SearchLanguageDropdown.tsx:99
885
#: src/screens/Search/components/SearchLanguageDropdown.tsx:101
886
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:238
887
msgid "All languages"
888
msgstr ""
889
···
907
msgstr ""
908
909
#: src/screens/Settings/ActivityPrivacySettings.tsx:52
910
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:91
911
msgid "Allow others to be notified of your posts"
912
msgstr ""
913
···
971
msgstr ""
972
973
#: src/components/dialogs/GifSelect.tsx:253
974
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:320
975
msgid "An error has occurred"
976
msgstr ""
977
···
1016
msgid "An error occurred while uploading the video."
1017
msgstr ""
1018
1019
-
#: src/screens/Onboarding/StepFinished.tsx:358
1020
msgid "An illustration of several Bluesky posts alongside repost, like, and comment icons"
1021
msgstr ""
1022
···
1055
msgid "an unknown error occurred"
1056
msgstr ""
1057
1058
-
#: src/components/moderation/ModerationDetailsDialog.tsx:136
1059
#: src/lib/moderation/useModerationCauseDescription.ts:144
1060
msgid "an unknown labeler"
1061
msgstr ""
···
1093
1094
#: src/screens/Settings/ActivityPrivacySettings.tsx:111
1095
#: src/screens/Settings/ActivityPrivacySettings.tsx:116
1096
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:162
1097
msgid "Anyone who follows me"
1098
msgstr ""
1099
···
1129
msgid "App password names must be at least 4 characters long"
1130
msgstr ""
1131
1132
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:71
1133
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:74
1134
msgid "App passwords"
1135
msgstr ""
1136
···
1139
msgid "App Passwords"
1140
msgstr ""
1141
1142
-
#: src/components/moderation/LabelsOnMeDialog.tsx:152
1143
-
#: src/components/moderation/LabelsOnMeDialog.tsx:155
1144
msgid "Appeal"
1145
msgstr ""
1146
1147
-
#: src/components/moderation/LabelsOnMeDialog.tsx:270
1148
msgid "Appeal \"{0}\" label"
1149
msgstr ""
1150
1151
-
#: src/components/moderation/LabelsOnMeDialog.tsx:260
1152
#: src/screens/Messages/components/ChatDisabled.tsx:103
1153
msgctxt "toast"
1154
msgid "Appeal submitted"
···
1225
msgid "Are you sure you want to remove this from your feeds?"
1226
msgstr ""
1227
1228
-
#: src/view/com/composer/Composer.tsx:802
1229
msgid "Are you sure you'd like to discard this draft?"
1230
msgstr ""
1231
1232
-
#: src/view/com/composer/Composer.tsx:992
1233
msgid "Are you sure you'd like to discard this post?"
1234
msgstr ""
1235
···
1237
msgid "Are you sure?"
1238
msgstr ""
1239
1240
-
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:99
1241
msgid "Are you writing in <0>{suggestedLanguageName}</0>?"
1242
msgstr ""
1243
···
1278
msgid "Available"
1279
msgstr ""
1280
1281
-
#: src/components/moderation/LabelsOnMeDialog.tsx:317
1282
-
#: src/components/moderation/LabelsOnMeDialog.tsx:318
1283
#: src/screens/Login/ChooseAccountForm.tsx:90
1284
#: src/screens/Login/ChooseAccountForm.tsx:95
1285
#: src/screens/Login/ForgotPasswordForm.tsx:123
···
1311
msgid "Before creating a post or replying, you must first verify your email."
1312
msgstr ""
1313
1314
-
#: src/components/dialogs/StarterPackDialog.tsx:70
1315
#: src/components/StarterPack/ProfileStarterPacks.tsx:231
1316
#: src/components/StarterPack/ProfileStarterPacks.tsx:241
1317
msgid "Before creating a starter pack, you must first verify your email."
···
1562
msgstr ""
1563
1564
#: src/components/LabelingServiceCard/index.tsx:62
1565
-
#: src/components/moderation/ReportDialog/index.tsx:686
1566
#: src/screens/Search/components/StarterPackCard.tsx:106
1567
#: src/screens/Search/Explore.tsx:930
1568
msgid "By {0}"
···
1630
#: src/screens/Settings/Settings.tsx:289
1631
#: src/screens/Takendown.tsx:108
1632
#: src/screens/Takendown.tsx:111
1633
-
#: src/view/com/composer/Composer.tsx:1047
1634
-
#: src/view/com/composer/Composer.tsx:1058
1635
#: src/view/com/composer/photos/EditImageDialog.web.tsx:43
1636
#: src/view/com/composer/photos/EditImageDialog.web.tsx:52
1637
#: src/view/shell/desktop/LeftNav.tsx:213
···
1699
msgid "Change Handle"
1700
msgstr ""
1701
1702
-
#: src/components/moderation/ReportDialog/index.tsx:328
1703
msgid "Change moderation service"
1704
msgstr ""
1705
···
1712
msgid "Change password dialog"
1713
msgstr ""
1714
1715
-
#: src/components/moderation/ReportDialog/index.tsx:247
1716
msgid "Change report reason"
1717
msgstr ""
1718
···
1823
msgid "Choose People"
1824
msgstr ""
1825
1826
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:184
1827
msgid "Choose Post Languages"
1828
msgstr ""
1829
1830
-
#: src/screens/Onboarding/StepFinished.tsx:573
1831
msgid "Choose the algorithms that power your custom feeds."
1832
msgstr ""
1833
···
1920
#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:178
1921
#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:187
1922
#: src/components/dialogs/SearchablePeopleList.tsx:295
1923
-
#: src/components/dialogs/StarterPackDialog.tsx:178
1924
#: src/components/dms/EmojiPopup.android.tsx:58
1925
#: src/components/dms/ReportDialog.tsx:387
1926
#: src/components/dms/ReportDialog.tsx:396
···
1938
#: src/components/WhoCanReply.tsx:209
1939
#: src/screens/Settings/components/ChangePasswordDialog.tsx:286
1940
#: src/screens/Settings/components/ChangePasswordDialog.tsx:291
1941
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:335
1942
#: src/view/com/feeds/MissingFeed.tsx:210
1943
#: src/view/com/feeds/MissingFeed.tsx:217
1944
msgid "Close"
···
1962
#: src/components/dialogs/GifSelect.tsx:263
1963
#: src/components/verification/VerificationsDialog.tsx:136
1964
#: src/components/verification/VerifierDialog.tsx:142
1965
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:204
1966
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:298
1967
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:330
1968
msgid "Close dialog"
1969
msgstr ""
1970
···
2007
msgid "Closes password update alert"
2008
msgstr ""
2009
2010
-
#: src/view/com/composer/Composer.tsx:1055
2011
msgid "Closes post composer and discards post draft"
2012
msgstr ""
2013
···
2053
msgid "Community Guidelines"
2054
msgstr ""
2055
2056
-
#: src/screens/Onboarding/StepFinished.tsx:472
2057
-
#: src/screens/Onboarding/StepFinished.tsx:586
2058
msgid "Complete onboarding and start using your account"
2059
msgstr ""
2060
···
2066
msgid "Compose new post"
2067
msgstr ""
2068
2069
-
#: src/view/com/composer/Composer.tsx:956
2070
msgid "Compose posts up to {0, plural, other {# characters}} in length"
2071
msgstr ""
2072
···
2074
msgid "Compose reply"
2075
msgstr ""
2076
2077
-
#: src/view/com/composer/Composer.tsx:1883
2078
msgid "Compressing video..."
2079
msgstr ""
2080
···
2186
msgid "Content Languages"
2187
msgstr ""
2188
2189
-
#: src/components/moderation/ModerationDetailsDialog.tsx:84
2190
#: src/lib/moderation/useModerationCauseDescription.ts:82
2191
msgid "Content Not Available"
2192
msgstr ""
2193
2194
-
#: src/components/moderation/ModerationDetailsDialog.tsx:52
2195
#: src/components/moderation/ScreenHider.tsx:99
2196
#: src/lib/moderation/useGlobalLabelStrings.ts:22
2197
#: src/lib/moderation/useModerationCauseDescription.ts:45
···
2411
2412
#. Text on button to create a new starter pack
2413
#. Text on button to create a new starter pack
2414
-
#: src/components/dialogs/StarterPackDialog.tsx:111
2415
-
#: src/components/dialogs/StarterPackDialog.tsx:200
2416
#: src/components/StarterPack/ProfileStarterPacks.tsx:296
2417
msgid "Create"
2418
msgstr ""
···
2478
msgid "Create new account"
2479
msgstr ""
2480
2481
-
#: src/components/moderation/ReportDialog/index.tsx:588
2482
#: src/components/ReportDialog/SelectReportOptionView.tsx:102
2483
msgid "Create report for {0}"
2484
msgstr ""
2485
2486
-
#: src/components/dialogs/StarterPackDialog.tsx:106
2487
-
#: src/components/dialogs/StarterPackDialog.tsx:195
2488
msgid "Create starter pack"
2489
msgstr ""
2490
···
2639
2640
#: src/components/PostControls/PostMenu/PostMenuItems.tsx:685
2641
#: src/components/PostControls/PostMenu/PostMenuItems.tsx:687
2642
-
#: src/view/com/composer/Composer.tsx:966
2643
msgid "Delete post"
2644
msgstr ""
2645
···
2752
2753
#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:92
2754
#: src/screens/Profile/Header/EditProfileDialog.tsx:82
2755
-
#: src/view/com/composer/Composer.tsx:804
2756
-
#: src/view/com/composer/Composer.tsx:999
2757
msgid "Discard"
2758
msgstr ""
2759
···
2762
msgid "Discard changes?"
2763
msgstr ""
2764
2765
-
#: src/view/com/composer/Composer.tsx:801
2766
msgid "Discard draft?"
2767
msgstr ""
2768
2769
-
#: src/view/com/composer/Composer.tsx:991
2770
msgid "Discard post?"
2771
msgstr ""
2772
···
2789
msgid "Dismiss"
2790
msgstr ""
2791
2792
-
#: src/view/com/composer/Composer.tsx:1807
2793
msgid "Dismiss error"
2794
msgstr ""
2795
···
2815
msgid "Display name"
2816
msgstr ""
2817
2818
-
#: src/screens/Onboarding/StepFinished.tsx:346
2819
msgid "Ditch the trolls and clickbait. Find real people and conversations that matter to you."
2820
msgstr ""
2821
···
2868
#: src/view/com/auth/server-input/index.tsx:233
2869
#: src/view/com/composer/labels/LabelsBtn.tsx:223
2870
#: src/view/com/composer/labels/LabelsBtn.tsx:230
2871
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:303
2872
#: src/view/com/composer/videos/SubtitleDialog.tsx:168
2873
#: src/view/com/composer/videos/SubtitleDialog.tsx:178
2874
msgid "Done"
···
3055
msgid "Email 2FA disabled"
3056
msgstr ""
3057
3058
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:62
3059
msgid "Email 2FA enabled"
3060
msgstr ""
3061
···
3126
msgstr ""
3127
3128
#: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:139
3129
-
#: src/view/screens/Storybook/Admonitions.tsx:75
3130
msgid "Enable notifications for an account by visiting their profile and pressing the <0>bell icon</0> <1/>."
3131
msgstr ""
3132
···
3223
msgid "Entertainment"
3224
msgstr ""
3225
3226
-
#: src/view/com/composer/Composer.tsx:1892
3227
#: src/view/com/util/error/ErrorScreen.tsx:42
3228
msgid "Error"
3229
msgstr ""
···
3232
msgid "Error loading post"
3233
msgstr ""
3234
3235
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:153
3236
msgid "Error loading preference"
3237
msgstr ""
3238
···
3346
msgid "Expires {0}"
3347
msgstr ""
3348
3349
-
#: src/components/moderation/LabelsOnMeDialog.tsx:201
3350
-
#: src/components/moderation/ModerationDetailsDialog.tsx:210
3351
msgid "Expires in {0}"
3352
msgstr ""
3353
···
3415
msgid "Failed to add emoji reaction"
3416
msgstr ""
3417
3418
-
#: src/components/dialogs/StarterPackDialog.tsx:269
3419
msgid "Failed to add to starter pack"
3420
msgstr ""
3421
···
3521
msgid "Failed to remove emoji reaction"
3522
msgstr ""
3523
3524
-
#: src/components/dialogs/StarterPackDialog.tsx:288
3525
msgid "Failed to remove from starter pack"
3526
msgstr ""
3527
···
3555
msgid "Failed to send email, please try again."
3556
msgstr ""
3557
3558
-
#: src/components/moderation/LabelsOnMeDialog.tsx:256
3559
#: src/screens/Messages/components/ChatDisabled.tsx:99
3560
msgid "Failed to submit appeal, please try again."
3561
msgstr ""
···
3698
msgid "Filter who you receive notifications from"
3699
msgstr ""
3700
3701
-
#: src/screens/Onboarding/StepFinished.tsx:478
3702
-
#: src/screens/Onboarding/StepFinished.tsx:589
3703
msgid "Finalizing"
3704
msgstr ""
3705
···
3719
msgid "Find people to follow"
3720
msgstr ""
3721
3722
-
#: src/screens/Search/Shell.tsx:475
3723
msgid "Find posts, users, and feeds on Bluesky"
3724
msgstr ""
3725
3726
-
#: src/screens/Onboarding/StepFinished.tsx:344
3727
msgid "Find your people"
3728
msgstr ""
3729
···
3750
msgid "Flat White"
3751
msgstr ""
3752
3753
-
#: src/screens/Onboarding/StepFinished.tsx:569
3754
msgid "Flexible"
3755
msgstr ""
3756
···
3924
msgid "Forever"
3925
msgstr ""
3926
3927
-
#: src/screens/Onboarding/StepFinished.tsx:353
3928
msgid "Forget the noise"
3929
msgstr ""
3930
···
3941
msgid "Forgot?"
3942
msgstr ""
3943
3944
-
#: src/screens/Onboarding/StepFinished.tsx:335
3945
msgid "Free your feed"
3946
msgstr ""
3947
···
4419
msgstr ""
4420
4421
#: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:157
4422
-
#: src/view/screens/Storybook/Admonitions.tsx:89
4423
msgid "If you want to restrict who can receive notifications for your account's activity, you can change this in <0>Settings โ Privacy and Security</0>."
4424
msgstr ""
4425
···
4598
msgid "It's just you right now! Add more people to your starter pack by searching above."
4599
msgstr ""
4600
4601
-
#: src/view/com/composer/Composer.tsx:1826
4602
msgid "Job ID: {0}"
4603
msgstr ""
4604
···
4662
msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
4663
msgstr ""
4664
4665
-
#: src/components/moderation/LabelsOnMeDialog.tsx:74
4666
msgid "Labels on your account"
4667
msgstr ""
4668
4669
-
#: src/components/moderation/LabelsOnMeDialog.tsx:76
4670
msgid "Labels on your content"
4671
msgstr ""
4672
···
4748
msgid "Learn more about verification on Bluesky"
4749
msgstr ""
4750
4751
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:127
4752
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:130
4753
msgid "Learn more about what is public on Bluesky."
4754
msgstr ""
4755
···
4801
msgid "Let's get your password reset!"
4802
msgstr ""
4803
4804
-
#: src/screens/Onboarding/StepFinished.tsx:480
4805
-
#: src/screens/Onboarding/StepFinished.tsx:589
4806
msgid "Let's go!"
4807
msgstr ""
4808
···
4854
4855
#: src/screens/Post/PostLikedBy.tsx:41
4856
#: src/screens/Profile/ProfileLabelerLikedBy.tsx:32
4857
-
#: src/view/screens/ProfileFeedLikedBy.tsx:32
4858
msgid "Liked By"
4859
msgstr ""
4860
···
5033
msgid "Log"
5034
msgstr ""
5035
5036
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:106
5037
msgid "Logged-out visibility"
5038
msgstr ""
5039
···
5207
msgid "Moderation"
5208
msgstr ""
5209
5210
-
#: src/components/moderation/ModerationDetailsDialog.tsx:140
5211
msgid "Moderation details"
5212
msgstr ""
5213
···
5256
msgid "Moderation tools"
5257
msgstr ""
5258
5259
-
#: src/components/moderation/ModerationDetailsDialog.tsx:54
5260
#: src/lib/moderation/useModerationCauseDescription.ts:47
5261
msgid "Moderator has chosen to set a general warning on the content."
5262
msgstr ""
···
5266
msgid "More feeds"
5267
msgstr ""
5268
5269
-
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:87
5270
-
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:90
5271
msgid "More languages..."
5272
msgstr ""
5273
···
5372
msgstr ""
5373
5374
#: src/Navigation.tsx:187
5375
-
#: src/view/screens/ModerationMutedAccounts.tsx:116
5376
msgid "Muted Accounts"
5377
msgstr ""
5378
5379
-
#: src/view/screens/ModerationMutedAccounts.tsx:202
5380
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
5381
msgstr ""
5382
···
5439
msgid "Navigates to your profile"
5440
msgstr ""
5441
5442
-
#: src/components/moderation/ReportDialog/index.tsx:274
5443
-
#: src/components/moderation/ReportDialog/index.tsx:291
5444
msgid "Need to report a copyright violation, legal request, or regulatory compliance issue?"
5445
msgstr ""
5446
···
5448
msgid "Need to report a copyright violation?"
5449
msgstr ""
5450
5451
-
#: src/screens/Onboarding/StepFinished.tsx:557
5452
msgid "Never lose access to your followers or data."
5453
msgstr ""
5454
···
5548
msgid "New posts from {firstAuthorName} and {additionalAuthorsCount, plural, one {{formattedAuthorsCount} other} other {{formattedAuthorsCount} others}}"
5549
msgstr ""
5550
5551
-
#: src/components/dialogs/StarterPackDialog.tsx:192
5552
msgid "New starter pack"
5553
msgstr ""
5554
···
5575
#: src/screens/Login/LoginForm.tsx:350
5576
#: src/screens/Login/SetNewPasswordForm.tsx:182
5577
#: src/screens/Login/SetNewPasswordForm.tsx:188
5578
-
#: src/screens/Onboarding/StepFinished.tsx:473
5579
-
#: src/screens/Onboarding/StepFinished.tsx:482
5580
#: src/screens/Settings/components/AddAppPasswordDialog.tsx:157
5581
#: src/screens/Settings/components/AddAppPasswordDialog.tsx:165
5582
#: src/screens/Signup/BackNextButtons.tsx:67
···
5596
msgid "Next image"
5597
msgstr ""
5598
5599
-
#: src/screens/Onboarding/StepFinished.tsx:355
5600
msgid "No ads, no invasive tracking, no engagement traps. Bluesky respects your time and attention."
5601
msgstr ""
5602
···
5639
msgid "No messages yet"
5640
msgstr ""
5641
5642
-
#: src/screens/Onboarding/StepFinished.tsx:337
5643
msgid "No more doomscrolling junk-filled algorithms. Find feeds that work for you, not against you."
5644
msgstr ""
5645
···
5651
#: src/screens/Messages/Settings.tsx:109
5652
#: src/screens/Settings/ActivityPrivacySettings.tsx:129
5653
#: src/screens/Settings/ActivityPrivacySettings.tsx:134
5654
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:159
5655
msgid "No one"
5656
msgstr ""
5657
···
5762
msgid "Note about sharing"
5763
msgstr ""
5764
5765
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:116
5766
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
5767
msgstr ""
5768
···
5843
msgstr ""
5844
5845
#: src/components/dialogs/GifSelect.tsx:256
5846
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:323
5847
#: src/view/com/util/ErrorBoundary.tsx:57
5848
msgid "Oh no!"
5849
msgstr ""
···
5880
msgid "Onboarding reset"
5881
msgstr ""
5882
5883
-
#: src/view/com/composer/Composer.tsx:398
5884
msgid "One or more GIFs is missing alt text."
5885
msgstr ""
5886
5887
-
#: src/view/com/composer/Composer.tsx:395
5888
msgid "One or more images is missing alt text."
5889
msgstr ""
5890
···
5896
msgid "One or more of your selected files are too large. Maximum size is 100ย MB."
5897
msgstr ""
5898
5899
-
#: src/view/com/composer/Composer.tsx:405
5900
msgid "One or more videos is missing alt text."
5901
msgstr ""
5902
···
5910
5911
#: src/screens/Settings/ActivityPrivacySettings.tsx:120
5912
#: src/screens/Settings/ActivityPrivacySettings.tsx:125
5913
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:157
5914
msgid "Only followers who I follow"
5915
msgstr ""
5916
···
5935
msgid "Oops!"
5936
msgstr ""
5937
5938
-
#: src/screens/Onboarding/StepFinished.tsx:553
5939
msgid "Open"
5940
msgstr ""
5941
···
5953
msgstr ""
5954
5955
#: src/screens/Messages/components/MessageInput.web.tsx:181
5956
-
#: src/view/com/composer/Composer.tsx:1475
5957
msgid "Open emoji picker"
5958
msgstr ""
5959
···
6053
msgid "Opens device gallery to select up to {MAX_IMAGES, plural, other {# images}}, or a single video or GIF."
6054
msgstr ""
6055
6056
-
#: src/view/com/composer/Composer.tsx:1476
6057
msgid "Opens emoji picker"
6058
msgstr ""
6059
···
6087
msgid "Opens password reset form"
6088
msgstr ""
6089
6090
-
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:129
6091
msgid "Opens post language settings"
6092
msgstr ""
6093
···
6413
msgid "Please enter your username"
6414
msgstr ""
6415
6416
-
#: src/components/moderation/LabelsOnMeDialog.tsx:292
6417
msgid "Please explain why you think this label was incorrectly applied by {0}"
6418
msgstr ""
6419
···
6465
msgid "Porn"
6466
msgstr ""
6467
6468
-
#: src/screens/PostThread/index.tsx:503
6469
msgctxt "description"
6470
msgid "Post"
6471
msgstr ""
6472
6473
-
#: src/view/com/composer/Composer.tsx:1118
6474
msgctxt "action"
6475
msgid "Post"
6476
msgstr ""
6477
6478
-
#: src/view/com/composer/Composer.tsx:1116
6479
msgctxt "action"
6480
msgid "Post All"
6481
msgstr ""
···
6507
msgid "Post has been deleted"
6508
msgstr ""
6509
6510
-
#: src/components/moderation/ModerationDetailsDialog.tsx:109
6511
#: src/lib/moderation/useModerationCauseDescription.ts:106
6512
msgid "Post Hidden by Muted Word"
6513
msgstr ""
6514
6515
-
#: src/components/moderation/ModerationDetailsDialog.tsx:112
6516
#: src/lib/moderation/useModerationCauseDescription.ts:115
6517
msgid "Post Hidden by You"
6518
msgstr ""
···
6527
msgstr ""
6528
6529
#. Accessibility label for button that opens dialog to choose post language settings
6530
-
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:124
6531
msgid "Post language selection"
6532
msgstr ""
6533
···
6620
#: src/Navigation.tsx:407
6621
#: src/Navigation.tsx:415
6622
#: src/screens/Settings/ActivityPrivacySettings.tsx:40
6623
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:44
6624
msgid "Privacy and Security"
6625
msgstr ""
6626
6627
#: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:161
6628
-
#: src/view/screens/Storybook/Admonitions.tsx:93
6629
msgid "Privacy and Security settings"
6630
msgstr ""
6631
···
6640
msgid "Privacy Policy"
6641
msgstr ""
6642
6643
-
#: src/view/com/composer/Composer.tsx:1889
6644
msgid "Processing video..."
6645
msgstr ""
6646
···
6666
msgid "Profile updated"
6667
msgstr ""
6668
6669
-
#: src/screens/Onboarding/StepFinished.tsx:539
6670
msgid "Public"
6671
msgstr ""
6672
···
6679
msgstr ""
6680
6681
#. Accessibility label for button to publish a single post
6682
-
#: src/view/com/composer/Composer.tsx:1098
6683
msgid "Publish post"
6684
msgstr ""
6685
6686
#. Accessibility label for button to publish multiple posts in a thread
6687
-
#: src/view/com/composer/Composer.tsx:1091
6688
msgid "Publish posts"
6689
msgstr ""
6690
6691
#. Accessibility label for button to publish multiple replies in a thread
6692
-
#: src/view/com/composer/Composer.tsx:1076
6693
msgid "Publish replies"
6694
msgstr ""
6695
6696
#. Accessibility label for button to publish a single reply
6697
-
#: src/view/com/composer/Composer.tsx:1083
6698
msgid "Publish reply"
6699
msgstr ""
6700
···
6853
msgid "Recent Searches"
6854
msgstr ""
6855
6856
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:232
6857
msgid "Recently used"
6858
msgstr ""
6859
···
6881
6882
#: src/components/dialogs/lists/ListAddRemoveUsersDialog.tsx:171
6883
#: src/components/dialogs/MutedWords.tsx:443
6884
-
#: src/components/dialogs/StarterPackDialog.tsx:370
6885
-
#: src/components/dialogs/StarterPackDialog.tsx:376
6886
#: src/components/FeedCard.tsx:343
6887
#: src/components/StarterPack/Wizard/WizardListCard.tsx:104
6888
#: src/components/StarterPack/Wizard/WizardListCard.tsx:111
···
7027
msgid "Removed from saved posts"
7028
msgstr ""
7029
7030
-
#: src/components/dialogs/StarterPackDialog.tsx:276
7031
msgid "Removed from starter pack"
7032
msgstr ""
7033
···
7084
msgid "Replies to this post are disabled."
7085
msgstr ""
7086
7087
-
#: src/view/com/composer/Composer.tsx:1114
7088
msgctxt "action"
7089
msgid "Reply"
7090
msgstr ""
···
7094
msgid "Reply ({0, plural, one {# reply} other {# replies}})"
7095
msgstr ""
7096
7097
-
#: src/components/moderation/ModerationDetailsDialog.tsx:118
7098
#: src/lib/moderation/useModerationCauseDescription.ts:125
7099
msgid "Reply Hidden by Thread Author"
7100
msgstr ""
7101
7102
-
#: src/components/moderation/ModerationDetailsDialog.tsx:117
7103
#: src/lib/moderation/useModerationCauseDescription.ts:124
7104
msgid "Reply Hidden by You"
7105
msgstr ""
···
7348
#: src/components/dms/MessageItem.tsx:322
7349
#: src/components/Error.tsx:65
7350
#: src/components/Lists.tsx:110
7351
-
#: src/components/moderation/ReportDialog/index.tsx:232
7352
#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoFallback.tsx:55
7353
#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoFallback.tsx:58
7354
#: src/components/StarterPack/ProfileStarterPacks.tsx:342
···
7366
#: src/screens/Signup/BackNextButtons.tsx:53
7367
#: src/view/com/util/error/ErrorMessage.tsx:60
7368
#: src/view/com/util/error/ErrorScreen.tsx:97
7369
-
#: src/view/screens/Storybook/Admonitions.tsx:63
7370
msgid "Retry"
7371
msgstr ""
7372
7373
-
#: src/components/moderation/ReportDialog/index.tsx:229
7374
-
#: src/view/screens/Storybook/Admonitions.tsx:60
7375
msgid "Retry loading report options"
7376
msgstr ""
7377
···
7501
#: src/components/forms/SearchInput.tsx:34
7502
#: src/components/forms/SearchInput.tsx:36
7503
#: src/screens/Search/Shell.tsx:307
7504
-
#: src/screens/Search/Shell.tsx:463
7505
#: src/view/shell/bottom-bar/BottomBar.tsx:198
7506
msgid "Search"
7507
msgstr ""
···
7561
msgid "Search is currently unavailable when logged out"
7562
msgstr ""
7563
7564
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:215
7565
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:216
7566
msgid "Search languages"
7567
msgstr ""
7568
···
7644
msgid "Select {0}"
7645
msgstr ""
7646
7647
-
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:72
7648
msgid "Select {langName}"
7649
msgstr ""
7650
···
7710
msgstr ""
7711
7712
#: src/screens/Settings/LanguageSettings.tsx:178
7713
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:248
7714
msgid "Select languages"
7715
msgstr ""
7716
7717
-
#: src/components/moderation/ReportDialog/index.tsx:313
7718
msgid "Select moderation service"
7719
msgstr ""
7720
···
7722
msgid "Select moderator"
7723
msgstr ""
7724
7725
-
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:57
7726
msgid "Select post language"
7727
msgstr ""
7728
···
7743
msgid "Select the moderation service(s) to report to"
7744
msgstr ""
7745
7746
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:194
7747
msgid "Select up to 3 languages used in this post"
7748
msgstr ""
7749
···
7805
msgid "Send message"
7806
msgstr ""
7807
7808
-
#: src/components/PostControls/ShareMenu/RecentChats.tsx:122
7809
msgid "Send post to {name}"
7810
msgstr ""
7811
···
7824
msgid "Send report to {0}"
7825
msgstr ""
7826
7827
-
#: src/components/moderation/ReportDialog/index.tsx:652
7828
msgid "Send report to {title}"
7829
msgstr ""
7830
···
7880
msgid "Settings for activity from others"
7881
msgstr ""
7882
7883
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:84
7884
msgid "Settings for allowing others to be notified of your posts"
7885
msgstr ""
7886
···
8211
msgid "Similar accounts"
8212
msgstr ""
8213
8214
-
#: src/screens/Onboarding/StepFinished.tsx:379
8215
-
#: src/screens/Onboarding/StepFinished.tsx:461
8216
#: src/screens/Onboarding/StepInterests/index.tsx:240
8217
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:222
8218
#: src/screens/StarterPack/Wizard/index.tsx:218
8219
msgid "Skip"
8220
msgstr ""
8221
8222
-
#: src/screens/Onboarding/StepFinished.tsx:372
8223
-
#: src/screens/Onboarding/StepFinished.tsx:458
8224
msgid "Skip introduction and start using your account"
8225
msgstr ""
8226
···
8275
msgstr ""
8276
8277
#: src/components/ageAssurance/AgeAssuranceInitDialog.tsx:138
8278
-
#: src/components/moderation/ReportDialog/index.tsx:224
8279
#: src/screens/Deactivated.tsx:94
8280
#: src/screens/Settings/components/DeactivateAccountDialog.tsx:59
8281
-
#: src/view/screens/Storybook/Admonitions.tsx:55
8282
msgid "Something went wrong, please try again"
8283
msgstr ""
8284
···
8304
msgid "Something wrong? Let us know."
8305
msgstr ""
8306
8307
-
#: src/App.native.tsx:128
8308
-
#: src/App.web.tsx:100
8309
msgid "Sorry! Your session expired. Please sign in again."
8310
msgstr ""
8311
···
8321
msgid "Sort replies to the same post by:"
8322
msgstr ""
8323
8324
-
#: src/components/moderation/LabelsOnMeDialog.tsx:180
8325
-
#: src/components/moderation/ModerationDetailsDialog.tsx:188
8326
msgid "Source: <0>{sourceName}</0>"
8327
msgstr ""
8328
···
8344
msgid "Sports"
8345
msgstr ""
8346
8347
-
#: src/components/PostControls/ShareMenu/RecentChats.tsx:207
8348
msgid "Start a conversation, and it will appear here."
8349
msgstr ""
8350
···
8418
8419
#: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:117
8420
#: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:123
8421
-
#: src/components/moderation/LabelsOnMeDialog.tsx:326
8422
-
#: src/components/moderation/LabelsOnMeDialog.tsx:327
8423
#: src/screens/Messages/components/ChatDisabled.tsx:154
8424
#: src/screens/Messages/components/ChatDisabled.tsx:155
8425
msgid "Submit"
···
8433
msgid "Submit Appeal"
8434
msgstr ""
8435
8436
-
#: src/components/moderation/ReportDialog/index.tsx:390
8437
-
#: src/components/moderation/ReportDialog/index.tsx:447
8438
-
#: src/components/moderation/ReportDialog/index.tsx:454
8439
msgid "Submit report"
8440
msgstr ""
8441
···
8636
msgid "Text field"
8637
msgstr ""
8638
8639
-
#: src/components/moderation/LabelsOnMeDialog.tsx:290
8640
#: src/screens/Messages/components/ChatDisabled.tsx:120
8641
msgid "Text input field"
8642
msgstr ""
···
8693
msgid "The app will be restarted"
8694
msgstr ""
8695
8696
-
#: src/components/moderation/ModerationDetailsDialog.tsx:121
8697
#: src/lib/moderation/useModerationCauseDescription.ts:128
8698
msgid "The author of this thread has hidden this reply."
8699
msgstr ""
···
8730
msgid "The feed has been replaced with Discover."
8731
msgstr ""
8732
8733
-
#: src/components/moderation/LabelsOnMeDialog.tsx:61
8734
msgid "The following labels were applied to your account."
8735
msgstr ""
8736
8737
-
#: src/components/moderation/LabelsOnMeDialog.tsx:62
8738
msgid "The following labels were applied to your content."
8739
msgstr ""
8740
···
8754
msgid "The open social network."
8755
msgstr ""
8756
8757
-
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:119
8758
-
msgid "The post you're replying to was marked as being written in {suggestedLanguageName} by its author. Would you like to reply in <0>{suggestedLanguageName}</0>?"
8759
-
msgstr ""
8760
-
8761
#: src/view/screens/PrivacyPolicy.tsx:38
8762
msgid "The Privacy Policy has been moved to <0/>"
8763
msgstr ""
···
8888
msgstr ""
8889
8890
#: src/components/dialogs/GifSelect.tsx:258
8891
-
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:325
8892
#: src/view/com/util/ErrorBoundary.tsx:59
8893
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
8894
msgstr ""
···
8925
msgid "This action can be undone at any time."
8926
msgstr ""
8927
8928
-
#: src/components/moderation/LabelsOnMeDialog.tsx:273
8929
msgid "This appeal will be sent to <0>{sourceName}</0>."
8930
msgstr ""
8931
···
8953
msgid "This content is hosted by {0}. Do you want to enable external media?"
8954
msgstr ""
8955
8956
-
#: src/components/moderation/ModerationDetailsDialog.tsx:86
8957
#: src/lib/moderation/useModerationCauseDescription.ts:84
8958
msgid "This content is not available because one of the users involved has blocked the other."
8959
msgstr ""
···
9017
msgid "This is not a valid link"
9018
msgstr ""
9019
9020
-
#: src/components/moderation/ModerationDetailsDialog.tsx:170
9021
msgid "This label was applied by the author."
9022
msgstr ""
9023
9024
-
#: src/components/moderation/LabelsOnMeDialog.tsx:167
9025
msgid "This label was applied by you."
9026
msgstr ""
9027
···
9069
msgid "This post will be hidden from feeds and threads. This cannot be undone."
9070
msgstr ""
9071
9072
-
#: src/view/com/composer/Composer.tsx:514
9073
msgid "This post's author has disabled quote posts."
9074
msgstr ""
9075
···
9105
msgid "This user has blocked you"
9106
msgstr ""
9107
9108
-
#: src/components/moderation/ModerationDetailsDialog.tsx:81
9109
#: src/lib/moderation/useModerationCauseDescription.ts:75
9110
msgid "This user has blocked you. You cannot view their content."
9111
msgstr ""
···
9114
msgid "This user has requested that their content only be shown to signed-in users."
9115
msgstr ""
9116
9117
-
#: src/components/moderation/ModerationDetailsDialog.tsx:61
9118
msgid "This user is included in the <0>{0}</0> list which you have blocked."
9119
msgstr ""
9120
9121
-
#: src/components/moderation/ModerationDetailsDialog.tsx:93
9122
msgid "This user is included in the <0>{0}</0> list which you have muted."
9123
msgstr ""
9124
···
9250
msgid "TV"
9251
msgstr ""
9252
9253
-
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:64
9254
msgid "Two-factor authentication (2FA)"
9255
msgstr ""
9256
···
9375
msgid "Unfortunately, Bluesky is unavailable in Mississippi right now."
9376
msgstr ""
9377
9378
-
#: src/components/moderation/ReportDialog/index.tsx:375
9379
msgid "Unfortunately, none of your subscribed labelers supports this report type."
9380
msgstr ""
9381
···
9497
msgid "Unsubscribed from list"
9498
msgstr ""
9499
9500
-
#: src/view/com/composer/Composer.tsx:894
9501
msgid "Unsupported video type: {mimeType}"
9502
msgstr ""
9503
···
9583
msgid "Uploading link thumbnail..."
9584
msgstr ""
9585
9586
-
#: src/view/com/composer/Composer.tsx:1886
9587
msgid "Uploading video..."
9588
msgstr ""
9589
···
9627
msgid "User blocked"
9628
msgstr ""
9629
9630
-
#: src/components/moderation/ModerationDetailsDialog.tsx:73
9631
#: src/lib/moderation/useModerationCauseDescription.ts:63
9632
msgid "User Blocked"
9633
msgstr ""
···
9640
msgid "User blocked by list"
9641
msgstr ""
9642
9643
-
#: src/components/moderation/ModerationDetailsDialog.tsx:59
9644
msgid "User Blocked by List"
9645
msgstr ""
9646
···
9648
msgid "User Blocking You"
9649
msgstr ""
9650
9651
-
#: src/components/moderation/ModerationDetailsDialog.tsx:79
9652
msgid "User Blocks You"
9653
msgstr ""
9654
···
9841
msgid "Video settings"
9842
msgstr ""
9843
9844
-
#: src/view/com/composer/Composer.tsx:1896
9845
msgid "Video uploaded"
9846
msgstr ""
9847
···
9857
msgid "Videos must be less than 3 minutes long."
9858
msgstr ""
9859
9860
-
#: src/view/com/composer/Composer.tsx:585
9861
msgctxt "Action to view the post the user just created"
9862
msgid "View"
9863
msgstr ""
9864
9865
-
#: src/screens/Profile/Header/Shell.tsx:241
9866
msgid "View {0}'s avatar"
9867
msgstr ""
9868
···
9910
9911
#: src/components/interstitials/TrendingVideos.tsx:198
9912
#: src/components/interstitials/TrendingVideos.tsx:220
9913
-
#: src/screens/Search/modules/ExploreTrendingVideos.tsx:193
9914
-
#: src/screens/Search/modules/ExploreTrendingVideos.tsx:212
9915
msgid "View more"
9916
msgstr ""
9917
···
9919
msgid "View more trending videos"
9920
msgstr ""
9921
9922
-
#: src/view/com/composer/Composer.tsx:580
9923
msgid "View post"
9924
msgstr ""
9925
···
10050
msgid "We have sent another verification email to <0>{0}</0>."
10051
msgstr ""
10052
10053
-
#: src/screens/Onboarding/StepFinished.tsx:531
10054
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
10055
msgstr ""
10056
···
10147
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
10148
msgstr ""
10149
10150
-
#: src/view/com/composer/Composer.tsx:511
10151
msgid "We're sorry! The post you are replying to has been deleted."
10152
msgstr ""
10153
···
10198
10199
#: src/view/com/auth/SplashScreen.tsx:51
10200
#: src/view/com/auth/SplashScreen.web.tsx:103
10201
-
#: src/view/com/composer/Composer.tsx:854
10202
msgid "What's up?"
10203
msgstr ""
10204
···
10229
msgstr ""
10230
10231
#: src/components/interstitials/TrendingVideos.tsx:125
10232
-
#: src/screens/Search/modules/ExploreTrendingVideos.tsx:107
10233
msgid "Whoops! Trending videos failed to load."
10234
msgstr ""
10235
···
10276
msgid "Write a message"
10277
msgstr ""
10278
10279
-
#: src/view/com/composer/Composer.tsx:954
10280
msgid "Write post"
10281
msgstr ""
10282
10283
#: src/screens/PostThread/components/ThreadComposePrompt.tsx:90
10284
-
#: src/view/com/composer/Composer.tsx:852
10285
msgid "Write your reply"
10286
msgstr ""
10287
···
10299
msgid "www.mylivestream.tv"
10300
msgstr ""
10301
10302
-
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:181
10303
msgid "Yes"
10304
msgstr ""
10305
···
10466
msgid "You have blocked this user"
10467
msgstr ""
10468
10469
-
#: src/components/moderation/ModerationDetailsDialog.tsx:75
10470
#: src/lib/moderation/useModerationCauseDescription.ts:57
10471
#: src/lib/moderation/useModerationCauseDescription.ts:65
10472
msgid "You have blocked this user. You cannot view their content."
···
10486
msgid "You have hidden this post"
10487
msgstr ""
10488
10489
-
#: src/components/moderation/ModerationDetailsDialog.tsx:113
10490
msgid "You have hidden this post."
10491
msgstr ""
10492
10493
-
#: src/components/moderation/ModerationDetailsDialog.tsx:106
10494
#: src/lib/moderation/useModerationCauseDescription.ts:99
10495
msgid "You have muted this account."
10496
msgstr ""
···
10512
msgid "You have no lists."
10513
msgstr ""
10514
10515
-
#: src/components/dialogs/StarterPackDialog.tsx:100
10516
msgid "You have no starter packs."
10517
msgstr ""
10518
···
10520
msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
10521
msgstr ""
10522
10523
-
#: src/view/screens/ModerationMutedAccounts.tsx:177
10524
msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
10525
msgstr ""
10526
···
10544
msgid "You haven't muted any words or tags yet"
10545
msgstr ""
10546
10547
-
#: src/components/moderation/ModerationDetailsDialog.tsx:120
10548
#: src/lib/moderation/useModerationCauseDescription.ts:127
10549
msgid "You hid this reply."
10550
msgstr ""
···
10561
msgid "You joined Bluesky using a starter pack {timeAgoString} ago"
10562
msgstr ""
10563
10564
-
#: src/components/moderation/LabelsOnMeDialog.tsx:81
10565
msgid "You may appeal non-self labels if you feel they were placed in error."
10566
msgstr ""
10567
10568
-
#: src/components/moderation/LabelsOnMeDialog.tsx:86
10569
msgid "You may appeal these labels if you feel they were placed in error."
10570
msgstr ""
10571
···
10695
msgid "You're in line"
10696
msgstr ""
10697
10698
-
#: src/screens/Onboarding/StepFinished.tsx:528
10699
msgid "You're ready to go!"
10700
msgstr ""
10701
···
10704
msgid "You're signed in with an App Password. Please sign in with your main password to continue deactivating your account."
10705
msgstr ""
10706
10707
-
#: src/components/moderation/ModerationDetailsDialog.tsx:110
10708
#: src/lib/moderation/useModerationCauseDescription.ts:108
10709
msgid "You've chosen to hide a word or tag within this post."
10710
msgstr ""
···
10859
msgid "Your password must be at least 8 characters long."
10860
msgstr ""
10861
10862
-
#: src/view/com/composer/Composer.tsx:576
10863
msgid "Your post was sent"
10864
msgstr ""
10865
10866
-
#: src/view/com/composer/Composer.tsx:573
10867
msgid "Your posts were sent"
10868
msgstr ""
10869
10870
-
#: src/screens/Onboarding/StepFinished.tsx:543
10871
msgid "Your posts, likes, and blocks are public. Mutes are private."
10872
msgstr ""
10873
···
10875
msgid "Your preferred language"
10876
msgstr ""
10877
10878
-
#: src/screens/Onboarding/StepFinished.tsx:421
10879
msgid "Your profile picture"
10880
msgstr ""
10881
10882
-
#: src/screens/Onboarding/StepFinished.tsx:349
10883
msgid "Your profile picture surrounded by concentric circles of other users' profile pictures"
10884
msgstr ""
10885
···
10887
msgid "Your profile, posts, feeds, and lists will no longer be visible to other Bluesky users. You can reactivate your account at any time by logging in."
10888
msgstr ""
10889
10890
-
#: src/view/com/composer/Composer.tsx:575
10891
msgid "Your reply was sent"
10892
msgstr ""
10893
10894
-
#: src/components/moderation/ReportDialog/index.tsx:397
10895
msgid "Your report will be sent to <0>{0}</0>."
10896
msgstr ""
10897
···
124
msgid "{0, plural, other {# people have}} used this starter pack!"
125
msgstr ""
126
127
+
#: src/components/dialogs/StarterPackDialog.tsx:357
128
msgid "{0, plural, other {+# more}}"
129
msgstr ""
130
···
521
msgid "7 days"
522
msgstr ""
523
524
+
#: src/screens/Onboarding/StepFinished.tsx:341
525
msgid "A collection of popular feeds you can find on Bluesky, including News, Booksky, Game Dev, Blacksky, and Fountain Pens"
526
msgstr ""
527
···
568
msgid "Accept Request"
569
msgstr ""
570
571
#: src/screens/Settings/AccessibilitySettings.tsx:44
572
#: src/screens/Settings/Settings.tsx:220
573
#: src/screens/Settings/Settings.tsx:223
···
604
msgid "Account muted"
605
msgstr ""
606
607
+
#: src/components/moderation/ModerationDetailsDialog.tsx:103
608
#: src/lib/moderation/useModerationCauseDescription.ts:98
609
msgid "Account Muted"
610
msgstr ""
611
612
+
#: src/components/moderation/ModerationDetailsDialog.tsx:89
613
msgid "Account Muted by List"
614
msgstr ""
615
···
654
655
#: src/components/dialogs/lists/ListAddRemoveUsersDialog.tsx:169
656
#: src/components/dialogs/MutedWords.tsx:333
657
+
#: src/components/dialogs/StarterPackDialog.tsx:371
658
+
#: src/components/dialogs/StarterPackDialog.tsx:377
659
#: src/view/com/modals/UserAddRemoveLists.tsx:235
660
msgid "Add"
661
msgstr ""
···
708
msgid "Add another account"
709
msgstr ""
710
711
+
#: src/view/com/composer/Composer.tsx:811
712
msgid "Add another post"
713
msgstr ""
714
715
+
#: src/view/com/composer/Composer.tsx:1444
716
msgid "Add another post to thread"
717
msgstr ""
718
···
735
msgid "Add media to post"
736
msgstr ""
737
738
+
#: src/components/moderation/ReportDialog/index.tsx:403
739
+
#: src/components/moderation/ReportDialog/index.tsx:407
740
msgid "Add more details (optional)"
741
msgstr ""
742
···
790
msgid "Add to saved posts"
791
msgstr ""
792
793
+
#: src/components/dialogs/StarterPackDialog.tsx:176
794
#: src/view/com/profile/ProfileMenu.tsx:308
795
#: src/view/com/profile/ProfileMenu.tsx:311
796
msgid "Add to starter packs"
···
805
msgid "Added to list"
806
msgstr ""
807
808
+
#: src/components/dialogs/StarterPackDialog.tsx:258
809
msgid "Added to starter pack"
810
msgstr ""
811
···
813
msgid "Additional details (limit 1000 characters)"
814
msgstr ""
815
816
+
#: src/components/moderation/ReportDialog/index.tsx:421
817
msgid "Additional details (limit 300 characters)"
818
msgstr ""
819
···
879
#: src/screens/Search/components/SearchLanguageDropdown.tsx:64
880
#: src/screens/Search/components/SearchLanguageDropdown.tsx:99
881
#: src/screens/Search/components/SearchLanguageDropdown.tsx:101
882
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:216
883
msgid "All languages"
884
msgstr ""
885
···
903
msgstr ""
904
905
#: src/screens/Settings/ActivityPrivacySettings.tsx:52
906
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:92
907
msgid "Allow others to be notified of your posts"
908
msgstr ""
909
···
967
msgstr ""
968
969
#: src/components/dialogs/GifSelect.tsx:253
970
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:298
971
msgid "An error has occurred"
972
msgstr ""
973
···
1012
msgid "An error occurred while uploading the video."
1013
msgstr ""
1014
1015
+
#: src/screens/Onboarding/StepFinished.tsx:359
1016
msgid "An illustration of several Bluesky posts alongside repost, like, and comment icons"
1017
msgstr ""
1018
···
1051
msgid "an unknown error occurred"
1052
msgstr ""
1053
1054
+
#: src/components/moderation/ModerationDetailsDialog.tsx:134
1055
#: src/lib/moderation/useModerationCauseDescription.ts:144
1056
msgid "an unknown labeler"
1057
msgstr ""
···
1089
1090
#: src/screens/Settings/ActivityPrivacySettings.tsx:111
1091
#: src/screens/Settings/ActivityPrivacySettings.tsx:116
1092
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:163
1093
msgid "Anyone who follows me"
1094
msgstr ""
1095
···
1125
msgid "App password names must be at least 4 characters long"
1126
msgstr ""
1127
1128
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:72
1129
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:75
1130
msgid "App passwords"
1131
msgstr ""
1132
···
1135
msgid "App Passwords"
1136
msgstr ""
1137
1138
+
#: src/components/moderation/LabelsOnMeDialog.tsx:150
1139
+
#: src/components/moderation/LabelsOnMeDialog.tsx:153
1140
msgid "Appeal"
1141
msgstr ""
1142
1143
+
#: src/components/moderation/LabelsOnMeDialog.tsx:268
1144
msgid "Appeal \"{0}\" label"
1145
msgstr ""
1146
1147
+
#: src/components/moderation/LabelsOnMeDialog.tsx:258
1148
#: src/screens/Messages/components/ChatDisabled.tsx:103
1149
msgctxt "toast"
1150
msgid "Appeal submitted"
···
1221
msgid "Are you sure you want to remove this from your feeds?"
1222
msgstr ""
1223
1224
+
#: src/view/com/composer/Composer.tsx:760
1225
msgid "Are you sure you'd like to discard this draft?"
1226
msgstr ""
1227
1228
+
#: src/view/com/composer/Composer.tsx:950
1229
msgid "Are you sure you'd like to discard this post?"
1230
msgstr ""
1231
···
1233
msgid "Are you sure?"
1234
msgstr ""
1235
1236
+
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:89
1237
msgid "Are you writing in <0>{suggestedLanguageName}</0>?"
1238
msgstr ""
1239
···
1274
msgid "Available"
1275
msgstr ""
1276
1277
+
#: src/components/moderation/LabelsOnMeDialog.tsx:315
1278
+
#: src/components/moderation/LabelsOnMeDialog.tsx:316
1279
#: src/screens/Login/ChooseAccountForm.tsx:90
1280
#: src/screens/Login/ChooseAccountForm.tsx:95
1281
#: src/screens/Login/ForgotPasswordForm.tsx:123
···
1307
msgid "Before creating a post or replying, you must first verify your email."
1308
msgstr ""
1309
1310
+
#: src/components/dialogs/StarterPackDialog.tsx:71
1311
#: src/components/StarterPack/ProfileStarterPacks.tsx:231
1312
#: src/components/StarterPack/ProfileStarterPacks.tsx:241
1313
msgid "Before creating a starter pack, you must first verify your email."
···
1558
msgstr ""
1559
1560
#: src/components/LabelingServiceCard/index.tsx:62
1561
+
#: src/components/moderation/ReportDialog/index.tsx:683
1562
#: src/screens/Search/components/StarterPackCard.tsx:106
1563
#: src/screens/Search/Explore.tsx:930
1564
msgid "By {0}"
···
1626
#: src/screens/Settings/Settings.tsx:289
1627
#: src/screens/Takendown.tsx:108
1628
#: src/screens/Takendown.tsx:111
1629
+
#: src/view/com/composer/Composer.tsx:1005
1630
+
#: src/view/com/composer/Composer.tsx:1016
1631
#: src/view/com/composer/photos/EditImageDialog.web.tsx:43
1632
#: src/view/com/composer/photos/EditImageDialog.web.tsx:52
1633
#: src/view/shell/desktop/LeftNav.tsx:213
···
1695
msgid "Change Handle"
1696
msgstr ""
1697
1698
+
#: src/components/moderation/ReportDialog/index.tsx:325
1699
msgid "Change moderation service"
1700
msgstr ""
1701
···
1708
msgid "Change password dialog"
1709
msgstr ""
1710
1711
+
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:100
1712
+
msgid "Change post language to {suggestedLanguageName}"
1713
+
msgstr ""
1714
+
1715
+
#: src/components/moderation/ReportDialog/index.tsx:244
1716
msgid "Change report reason"
1717
msgstr ""
1718
···
1823
msgid "Choose People"
1824
msgstr ""
1825
1826
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:162
1827
msgid "Choose Post Languages"
1828
msgstr ""
1829
1830
+
#: src/screens/Onboarding/StepFinished.tsx:575
1831
msgid "Choose the algorithms that power your custom feeds."
1832
msgstr ""
1833
···
1920
#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:178
1921
#: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:187
1922
#: src/components/dialogs/SearchablePeopleList.tsx:295
1923
+
#: src/components/dialogs/StarterPackDialog.tsx:179
1924
#: src/components/dms/EmojiPopup.android.tsx:58
1925
#: src/components/dms/ReportDialog.tsx:387
1926
#: src/components/dms/ReportDialog.tsx:396
···
1938
#: src/components/WhoCanReply.tsx:209
1939
#: src/screens/Settings/components/ChangePasswordDialog.tsx:286
1940
#: src/screens/Settings/components/ChangePasswordDialog.tsx:291
1941
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:313
1942
#: src/view/com/feeds/MissingFeed.tsx:210
1943
#: src/view/com/feeds/MissingFeed.tsx:217
1944
msgid "Close"
···
1962
#: src/components/dialogs/GifSelect.tsx:263
1963
#: src/components/verification/VerificationsDialog.tsx:136
1964
#: src/components/verification/VerifierDialog.tsx:142
1965
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:182
1966
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:276
1967
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:308
1968
msgid "Close dialog"
1969
msgstr ""
1970
···
2007
msgid "Closes password update alert"
2008
msgstr ""
2009
2010
+
#: src/view/com/composer/Composer.tsx:1013
2011
msgid "Closes post composer and discards post draft"
2012
msgstr ""
2013
···
2053
msgid "Community Guidelines"
2054
msgstr ""
2055
2056
+
#: src/screens/Onboarding/StepFinished.tsx:473
2057
+
#: src/screens/Onboarding/StepFinished.tsx:588
2058
msgid "Complete onboarding and start using your account"
2059
msgstr ""
2060
···
2066
msgid "Compose new post"
2067
msgstr ""
2068
2069
+
#: src/view/com/composer/Composer.tsx:914
2070
msgid "Compose posts up to {0, plural, other {# characters}} in length"
2071
msgstr ""
2072
···
2074
msgid "Compose reply"
2075
msgstr ""
2076
2077
+
#: src/view/com/composer/Composer.tsx:1834
2078
msgid "Compressing video..."
2079
msgstr ""
2080
···
2186
msgid "Content Languages"
2187
msgstr ""
2188
2189
+
#: src/components/moderation/ModerationDetailsDialog.tsx:82
2190
#: src/lib/moderation/useModerationCauseDescription.ts:82
2191
msgid "Content Not Available"
2192
msgstr ""
2193
2194
+
#: src/components/moderation/ModerationDetailsDialog.tsx:50
2195
#: src/components/moderation/ScreenHider.tsx:99
2196
#: src/lib/moderation/useGlobalLabelStrings.ts:22
2197
#: src/lib/moderation/useModerationCauseDescription.ts:45
···
2411
2412
#. Text on button to create a new starter pack
2413
#. Text on button to create a new starter pack
2414
+
#: src/components/dialogs/StarterPackDialog.tsx:112
2415
+
#: src/components/dialogs/StarterPackDialog.tsx:201
2416
#: src/components/StarterPack/ProfileStarterPacks.tsx:296
2417
msgid "Create"
2418
msgstr ""
···
2478
msgid "Create new account"
2479
msgstr ""
2480
2481
+
#: src/components/moderation/ReportDialog/index.tsx:585
2482
#: src/components/ReportDialog/SelectReportOptionView.tsx:102
2483
msgid "Create report for {0}"
2484
msgstr ""
2485
2486
+
#: src/components/dialogs/StarterPackDialog.tsx:107
2487
+
#: src/components/dialogs/StarterPackDialog.tsx:196
2488
msgid "Create starter pack"
2489
msgstr ""
2490
···
2639
2640
#: src/components/PostControls/PostMenu/PostMenuItems.tsx:685
2641
#: src/components/PostControls/PostMenu/PostMenuItems.tsx:687
2642
+
#: src/view/com/composer/Composer.tsx:924
2643
msgid "Delete post"
2644
msgstr ""
2645
···
2752
2753
#: src/components/dialogs/lists/CreateOrEditListDialog.tsx:92
2754
#: src/screens/Profile/Header/EditProfileDialog.tsx:82
2755
+
#: src/view/com/composer/Composer.tsx:762
2756
+
#: src/view/com/composer/Composer.tsx:957
2757
msgid "Discard"
2758
msgstr ""
2759
···
2762
msgid "Discard changes?"
2763
msgstr ""
2764
2765
+
#: src/view/com/composer/Composer.tsx:759
2766
msgid "Discard draft?"
2767
msgstr ""
2768
2769
+
#: src/view/com/composer/Composer.tsx:949
2770
msgid "Discard post?"
2771
msgstr ""
2772
···
2789
msgid "Dismiss"
2790
msgstr ""
2791
2792
+
#: src/view/com/composer/Composer.tsx:1758
2793
msgid "Dismiss error"
2794
msgstr ""
2795
···
2815
msgid "Display name"
2816
msgstr ""
2817
2818
+
#: src/screens/Onboarding/StepFinished.tsx:347
2819
msgid "Ditch the trolls and clickbait. Find real people and conversations that matter to you."
2820
msgstr ""
2821
···
2868
#: src/view/com/auth/server-input/index.tsx:233
2869
#: src/view/com/composer/labels/LabelsBtn.tsx:223
2870
#: src/view/com/composer/labels/LabelsBtn.tsx:230
2871
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:281
2872
#: src/view/com/composer/videos/SubtitleDialog.tsx:168
2873
#: src/view/com/composer/videos/SubtitleDialog.tsx:178
2874
msgid "Done"
···
3055
msgid "Email 2FA disabled"
3056
msgstr ""
3057
3058
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:63
3059
msgid "Email 2FA enabled"
3060
msgstr ""
3061
···
3126
msgstr ""
3127
3128
#: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:139
3129
msgid "Enable notifications for an account by visiting their profile and pressing the <0>bell icon</0> <1/>."
3130
msgstr ""
3131
···
3222
msgid "Entertainment"
3223
msgstr ""
3224
3225
+
#: src/view/com/composer/Composer.tsx:1843
3226
#: src/view/com/util/error/ErrorScreen.tsx:42
3227
msgid "Error"
3228
msgstr ""
···
3231
msgid "Error loading post"
3232
msgstr ""
3233
3234
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:154
3235
msgid "Error loading preference"
3236
msgstr ""
3237
···
3345
msgid "Expires {0}"
3346
msgstr ""
3347
3348
+
#: src/components/moderation/LabelsOnMeDialog.tsx:199
3349
+
#: src/components/moderation/ModerationDetailsDialog.tsx:208
3350
msgid "Expires in {0}"
3351
msgstr ""
3352
···
3414
msgid "Failed to add emoji reaction"
3415
msgstr ""
3416
3417
+
#: src/components/dialogs/StarterPackDialog.tsx:270
3418
msgid "Failed to add to starter pack"
3419
msgstr ""
3420
···
3520
msgid "Failed to remove emoji reaction"
3521
msgstr ""
3522
3523
+
#: src/components/dialogs/StarterPackDialog.tsx:289
3524
msgid "Failed to remove from starter pack"
3525
msgstr ""
3526
···
3554
msgid "Failed to send email, please try again."
3555
msgstr ""
3556
3557
+
#: src/components/moderation/LabelsOnMeDialog.tsx:254
3558
#: src/screens/Messages/components/ChatDisabled.tsx:99
3559
msgid "Failed to submit appeal, please try again."
3560
msgstr ""
···
3697
msgid "Filter who you receive notifications from"
3698
msgstr ""
3699
3700
+
#: src/screens/Onboarding/StepFinished.tsx:479
3701
+
#: src/screens/Onboarding/StepFinished.tsx:591
3702
msgid "Finalizing"
3703
msgstr ""
3704
···
3718
msgid "Find people to follow"
3719
msgstr ""
3720
3721
+
#: src/screens/Search/Shell.tsx:476
3722
msgid "Find posts, users, and feeds on Bluesky"
3723
msgstr ""
3724
3725
+
#: src/screens/Onboarding/StepFinished.tsx:345
3726
msgid "Find your people"
3727
msgstr ""
3728
···
3749
msgid "Flat White"
3750
msgstr ""
3751
3752
+
#: src/screens/Onboarding/StepFinished.tsx:571
3753
msgid "Flexible"
3754
msgstr ""
3755
···
3923
msgid "Forever"
3924
msgstr ""
3925
3926
+
#: src/screens/Onboarding/StepFinished.tsx:354
3927
msgid "Forget the noise"
3928
msgstr ""
3929
···
3940
msgid "Forgot?"
3941
msgstr ""
3942
3943
+
#: src/screens/Onboarding/StepFinished.tsx:336
3944
msgid "Free your feed"
3945
msgstr ""
3946
···
4418
msgstr ""
4419
4420
#: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:157
4421
msgid "If you want to restrict who can receive notifications for your account's activity, you can change this in <0>Settings โ Privacy and Security</0>."
4422
msgstr ""
4423
···
4596
msgid "It's just you right now! Add more people to your starter pack by searching above."
4597
msgstr ""
4598
4599
+
#: src/view/com/composer/Composer.tsx:1777
4600
msgid "Job ID: {0}"
4601
msgstr ""
4602
···
4660
msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network."
4661
msgstr ""
4662
4663
+
#: src/components/moderation/LabelsOnMeDialog.tsx:72
4664
msgid "Labels on your account"
4665
msgstr ""
4666
4667
+
#: src/components/moderation/LabelsOnMeDialog.tsx:74
4668
msgid "Labels on your content"
4669
msgstr ""
4670
···
4746
msgid "Learn more about verification on Bluesky"
4747
msgstr ""
4748
4749
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:128
4750
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:131
4751
msgid "Learn more about what is public on Bluesky."
4752
msgstr ""
4753
···
4799
msgid "Let's get your password reset!"
4800
msgstr ""
4801
4802
+
#: src/screens/Onboarding/StepFinished.tsx:481
4803
+
#: src/screens/Onboarding/StepFinished.tsx:591
4804
msgid "Let's go!"
4805
msgstr ""
4806
···
4852
4853
#: src/screens/Post/PostLikedBy.tsx:41
4854
#: src/screens/Profile/ProfileLabelerLikedBy.tsx:32
4855
+
#: src/view/screens/ProfileFeedLikedBy.tsx:34
4856
msgid "Liked By"
4857
msgstr ""
4858
···
5031
msgid "Log"
5032
msgstr ""
5033
5034
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:107
5035
msgid "Logged-out visibility"
5036
msgstr ""
5037
···
5205
msgid "Moderation"
5206
msgstr ""
5207
5208
+
#: src/components/moderation/ModerationDetailsDialog.tsx:138
5209
msgid "Moderation details"
5210
msgstr ""
5211
···
5254
msgid "Moderation tools"
5255
msgstr ""
5256
5257
+
#: src/components/moderation/ModerationDetailsDialog.tsx:52
5258
#: src/lib/moderation/useModerationCauseDescription.ts:47
5259
msgid "Moderator has chosen to set a general warning on the content."
5260
msgstr ""
···
5264
msgid "More feeds"
5265
msgstr ""
5266
5267
+
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:70
5268
+
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:73
5269
msgid "More languages..."
5270
msgstr ""
5271
···
5370
msgstr ""
5371
5372
#: src/Navigation.tsx:187
5373
+
#: src/view/screens/ModerationMutedAccounts.tsx:118
5374
msgid "Muted Accounts"
5375
msgstr ""
5376
5377
+
#: src/view/screens/ModerationMutedAccounts.tsx:204
5378
msgid "Muted accounts have their posts removed from your feed and from your notifications. Mutes are completely private."
5379
msgstr ""
5380
···
5437
msgid "Navigates to your profile"
5438
msgstr ""
5439
5440
+
#: src/components/moderation/ReportDialog/index.tsx:271
5441
+
#: src/components/moderation/ReportDialog/index.tsx:288
5442
msgid "Need to report a copyright violation, legal request, or regulatory compliance issue?"
5443
msgstr ""
5444
···
5446
msgid "Need to report a copyright violation?"
5447
msgstr ""
5448
5449
+
#: src/screens/Onboarding/StepFinished.tsx:559
5450
msgid "Never lose access to your followers or data."
5451
msgstr ""
5452
···
5546
msgid "New posts from {firstAuthorName} and {additionalAuthorsCount, plural, one {{formattedAuthorsCount} other} other {{formattedAuthorsCount} others}}"
5547
msgstr ""
5548
5549
+
#: src/components/dialogs/StarterPackDialog.tsx:193
5550
msgid "New starter pack"
5551
msgstr ""
5552
···
5573
#: src/screens/Login/LoginForm.tsx:350
5574
#: src/screens/Login/SetNewPasswordForm.tsx:182
5575
#: src/screens/Login/SetNewPasswordForm.tsx:188
5576
+
#: src/screens/Onboarding/StepFinished.tsx:474
5577
+
#: src/screens/Onboarding/StepFinished.tsx:483
5578
#: src/screens/Settings/components/AddAppPasswordDialog.tsx:157
5579
#: src/screens/Settings/components/AddAppPasswordDialog.tsx:165
5580
#: src/screens/Signup/BackNextButtons.tsx:67
···
5594
msgid "Next image"
5595
msgstr ""
5596
5597
+
#: src/screens/Onboarding/StepFinished.tsx:356
5598
msgid "No ads, no invasive tracking, no engagement traps. Bluesky respects your time and attention."
5599
msgstr ""
5600
···
5637
msgid "No messages yet"
5638
msgstr ""
5639
5640
+
#: src/screens/Onboarding/StepFinished.tsx:338
5641
msgid "No more doomscrolling junk-filled algorithms. Find feeds that work for you, not against you."
5642
msgstr ""
5643
···
5649
#: src/screens/Messages/Settings.tsx:109
5650
#: src/screens/Settings/ActivityPrivacySettings.tsx:129
5651
#: src/screens/Settings/ActivityPrivacySettings.tsx:134
5652
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:160
5653
msgid "No one"
5654
msgstr ""
5655
···
5760
msgid "Note about sharing"
5761
msgstr ""
5762
5763
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:117
5764
msgid "Note: Bluesky is an open and public network. This setting only limits the visibility of your content on the Bluesky app and website, and other apps may not respect this setting. Your content may still be shown to logged-out users by other apps and websites."
5765
msgstr ""
5766
···
5841
msgstr ""
5842
5843
#: src/components/dialogs/GifSelect.tsx:256
5844
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:301
5845
#: src/view/com/util/ErrorBoundary.tsx:57
5846
msgid "Oh no!"
5847
msgstr ""
···
5878
msgid "Onboarding reset"
5879
msgstr ""
5880
5881
+
#: src/view/com/composer/Composer.tsx:359
5882
msgid "One or more GIFs is missing alt text."
5883
msgstr ""
5884
5885
+
#: src/view/com/composer/Composer.tsx:356
5886
msgid "One or more images is missing alt text."
5887
msgstr ""
5888
···
5894
msgid "One or more of your selected files are too large. Maximum size is 100ย MB."
5895
msgstr ""
5896
5897
+
#: src/view/com/composer/Composer.tsx:366
5898
msgid "One or more videos is missing alt text."
5899
msgstr ""
5900
···
5908
5909
#: src/screens/Settings/ActivityPrivacySettings.tsx:120
5910
#: src/screens/Settings/ActivityPrivacySettings.tsx:125
5911
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:158
5912
msgid "Only followers who I follow"
5913
msgstr ""
5914
···
5933
msgid "Oops!"
5934
msgstr ""
5935
5936
+
#: src/screens/Onboarding/StepFinished.tsx:555
5937
msgid "Open"
5938
msgstr ""
5939
···
5951
msgstr ""
5952
5953
#: src/screens/Messages/components/MessageInput.web.tsx:181
5954
+
#: src/view/com/composer/Composer.tsx:1429
5955
msgid "Open emoji picker"
5956
msgstr ""
5957
···
6051
msgid "Opens device gallery to select up to {MAX_IMAGES, plural, other {# images}}, or a single video or GIF."
6052
msgstr ""
6053
6054
+
#: src/view/com/composer/Composer.tsx:1430
6055
msgid "Opens emoji picker"
6056
msgstr ""
6057
···
6085
msgid "Opens password reset form"
6086
msgstr ""
6087
6088
+
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:103
6089
msgid "Opens post language settings"
6090
msgstr ""
6091
···
6411
msgid "Please enter your username"
6412
msgstr ""
6413
6414
+
#: src/components/moderation/LabelsOnMeDialog.tsx:290
6415
msgid "Please explain why you think this label was incorrectly applied by {0}"
6416
msgstr ""
6417
···
6463
msgid "Porn"
6464
msgstr ""
6465
6466
+
#: src/screens/PostThread/index.tsx:502
6467
msgctxt "description"
6468
msgid "Post"
6469
msgstr ""
6470
6471
+
#: src/view/com/composer/Composer.tsx:1076
6472
msgctxt "action"
6473
msgid "Post"
6474
msgstr ""
6475
6476
+
#: src/view/com/composer/Composer.tsx:1074
6477
msgctxt "action"
6478
msgid "Post All"
6479
msgstr ""
···
6505
msgid "Post has been deleted"
6506
msgstr ""
6507
6508
+
#: src/components/moderation/ModerationDetailsDialog.tsx:107
6509
#: src/lib/moderation/useModerationCauseDescription.ts:106
6510
msgid "Post Hidden by Muted Word"
6511
msgstr ""
6512
6513
+
#: src/components/moderation/ModerationDetailsDialog.tsx:110
6514
#: src/lib/moderation/useModerationCauseDescription.ts:115
6515
msgid "Post Hidden by You"
6516
msgstr ""
···
6525
msgstr ""
6526
6527
#. Accessibility label for button that opens dialog to choose post language settings
6528
+
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:98
6529
msgid "Post language selection"
6530
msgstr ""
6531
···
6618
#: src/Navigation.tsx:407
6619
#: src/Navigation.tsx:415
6620
#: src/screens/Settings/ActivityPrivacySettings.tsx:40
6621
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:45
6622
msgid "Privacy and Security"
6623
msgstr ""
6624
6625
#: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:161
6626
msgid "Privacy and Security settings"
6627
msgstr ""
6628
···
6637
msgid "Privacy Policy"
6638
msgstr ""
6639
6640
+
#: src/view/com/composer/Composer.tsx:1840
6641
msgid "Processing video..."
6642
msgstr ""
6643
···
6663
msgid "Profile updated"
6664
msgstr ""
6665
6666
+
#: src/screens/Onboarding/StepFinished.tsx:541
6667
msgid "Public"
6668
msgstr ""
6669
···
6676
msgstr ""
6677
6678
#. Accessibility label for button to publish a single post
6679
+
#: src/view/com/composer/Composer.tsx:1056
6680
msgid "Publish post"
6681
msgstr ""
6682
6683
#. Accessibility label for button to publish multiple posts in a thread
6684
+
#: src/view/com/composer/Composer.tsx:1049
6685
msgid "Publish posts"
6686
msgstr ""
6687
6688
#. Accessibility label for button to publish multiple replies in a thread
6689
+
#: src/view/com/composer/Composer.tsx:1034
6690
msgid "Publish replies"
6691
msgstr ""
6692
6693
#. Accessibility label for button to publish a single reply
6694
+
#: src/view/com/composer/Composer.tsx:1041
6695
msgid "Publish reply"
6696
msgstr ""
6697
···
6850
msgid "Recent Searches"
6851
msgstr ""
6852
6853
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:210
6854
msgid "Recently used"
6855
msgstr ""
6856
···
6878
6879
#: src/components/dialogs/lists/ListAddRemoveUsersDialog.tsx:171
6880
#: src/components/dialogs/MutedWords.tsx:443
6881
+
#: src/components/dialogs/StarterPackDialog.tsx:371
6882
+
#: src/components/dialogs/StarterPackDialog.tsx:377
6883
#: src/components/FeedCard.tsx:343
6884
#: src/components/StarterPack/Wizard/WizardListCard.tsx:104
6885
#: src/components/StarterPack/Wizard/WizardListCard.tsx:111
···
7024
msgid "Removed from saved posts"
7025
msgstr ""
7026
7027
+
#: src/components/dialogs/StarterPackDialog.tsx:277
7028
msgid "Removed from starter pack"
7029
msgstr ""
7030
···
7081
msgid "Replies to this post are disabled."
7082
msgstr ""
7083
7084
+
#: src/view/com/composer/Composer.tsx:1072
7085
msgctxt "action"
7086
msgid "Reply"
7087
msgstr ""
···
7091
msgid "Reply ({0, plural, one {# reply} other {# replies}})"
7092
msgstr ""
7093
7094
+
#: src/components/moderation/ModerationDetailsDialog.tsx:116
7095
#: src/lib/moderation/useModerationCauseDescription.ts:125
7096
msgid "Reply Hidden by Thread Author"
7097
msgstr ""
7098
7099
+
#: src/components/moderation/ModerationDetailsDialog.tsx:115
7100
#: src/lib/moderation/useModerationCauseDescription.ts:124
7101
msgid "Reply Hidden by You"
7102
msgstr ""
···
7345
#: src/components/dms/MessageItem.tsx:322
7346
#: src/components/Error.tsx:65
7347
#: src/components/Lists.tsx:110
7348
+
#: src/components/moderation/ReportDialog/index.tsx:229
7349
#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoFallback.tsx:55
7350
#: src/components/Post/Embed/VideoEmbed/VideoEmbedInner/VideoFallback.tsx:58
7351
#: src/components/StarterPack/ProfileStarterPacks.tsx:342
···
7363
#: src/screens/Signup/BackNextButtons.tsx:53
7364
#: src/view/com/util/error/ErrorMessage.tsx:60
7365
#: src/view/com/util/error/ErrorScreen.tsx:97
7366
msgid "Retry"
7367
msgstr ""
7368
7369
+
#: src/components/moderation/ReportDialog/index.tsx:226
7370
msgid "Retry loading report options"
7371
msgstr ""
7372
···
7496
#: src/components/forms/SearchInput.tsx:34
7497
#: src/components/forms/SearchInput.tsx:36
7498
#: src/screens/Search/Shell.tsx:307
7499
+
#: src/screens/Search/Shell.tsx:464
7500
#: src/view/shell/bottom-bar/BottomBar.tsx:198
7501
msgid "Search"
7502
msgstr ""
···
7556
msgid "Search is currently unavailable when logged out"
7557
msgstr ""
7558
7559
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:193
7560
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:194
7561
msgid "Search languages"
7562
msgstr ""
7563
···
7639
msgid "Select {0}"
7640
msgstr ""
7641
7642
+
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:58
7643
msgid "Select {langName}"
7644
msgstr ""
7645
···
7705
msgstr ""
7706
7707
#: src/screens/Settings/LanguageSettings.tsx:178
7708
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:226
7709
msgid "Select languages"
7710
msgstr ""
7711
7712
+
#: src/components/moderation/ReportDialog/index.tsx:310
7713
msgid "Select moderation service"
7714
msgstr ""
7715
···
7717
msgid "Select moderator"
7718
msgstr ""
7719
7720
+
#: src/view/com/composer/select-language/PostLanguageSelect.tsx:45
7721
msgid "Select post language"
7722
msgstr ""
7723
···
7738
msgid "Select the moderation service(s) to report to"
7739
msgstr ""
7740
7741
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:172
7742
msgid "Select up to 3 languages used in this post"
7743
msgstr ""
7744
···
7800
msgid "Send message"
7801
msgstr ""
7802
7803
+
#: src/components/PostControls/ShareMenu/RecentChats.tsx:123
7804
msgid "Send post to {name}"
7805
msgstr ""
7806
···
7819
msgid "Send report to {0}"
7820
msgstr ""
7821
7822
+
#: src/components/moderation/ReportDialog/index.tsx:649
7823
msgid "Send report to {title}"
7824
msgstr ""
7825
···
7875
msgid "Settings for activity from others"
7876
msgstr ""
7877
7878
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:85
7879
msgid "Settings for allowing others to be notified of your posts"
7880
msgstr ""
7881
···
8206
msgid "Similar accounts"
8207
msgstr ""
8208
8209
+
#: src/screens/Onboarding/StepFinished.tsx:380
8210
+
#: src/screens/Onboarding/StepFinished.tsx:462
8211
#: src/screens/Onboarding/StepInterests/index.tsx:240
8212
#: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:222
8213
#: src/screens/StarterPack/Wizard/index.tsx:218
8214
msgid "Skip"
8215
msgstr ""
8216
8217
+
#: src/screens/Onboarding/StepFinished.tsx:373
8218
+
#: src/screens/Onboarding/StepFinished.tsx:459
8219
msgid "Skip introduction and start using your account"
8220
msgstr ""
8221
···
8270
msgstr ""
8271
8272
#: src/components/ageAssurance/AgeAssuranceInitDialog.tsx:138
8273
+
#: src/components/moderation/ReportDialog/index.tsx:223
8274
#: src/screens/Deactivated.tsx:94
8275
#: src/screens/Settings/components/DeactivateAccountDialog.tsx:59
8276
msgid "Something went wrong, please try again"
8277
msgstr ""
8278
···
8298
msgid "Something wrong? Let us know."
8299
msgstr ""
8300
8301
+
#: src/App.native.tsx:125
8302
+
#: src/App.web.tsx:101
8303
msgid "Sorry! Your session expired. Please sign in again."
8304
msgstr ""
8305
···
8315
msgid "Sort replies to the same post by:"
8316
msgstr ""
8317
8318
+
#: src/components/moderation/LabelsOnMeDialog.tsx:178
8319
+
#: src/components/moderation/ModerationDetailsDialog.tsx:186
8320
msgid "Source: <0>{sourceName}</0>"
8321
msgstr ""
8322
···
8338
msgid "Sports"
8339
msgstr ""
8340
8341
+
#: src/components/PostControls/ShareMenu/RecentChats.tsx:208
8342
msgid "Start a conversation, and it will appear here."
8343
msgstr ""
8344
···
8412
8413
#: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:117
8414
#: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:123
8415
+
#: src/components/moderation/LabelsOnMeDialog.tsx:324
8416
+
#: src/components/moderation/LabelsOnMeDialog.tsx:325
8417
#: src/screens/Messages/components/ChatDisabled.tsx:154
8418
#: src/screens/Messages/components/ChatDisabled.tsx:155
8419
msgid "Submit"
···
8427
msgid "Submit Appeal"
8428
msgstr ""
8429
8430
+
#: src/components/moderation/ReportDialog/index.tsx:387
8431
+
#: src/components/moderation/ReportDialog/index.tsx:444
8432
+
#: src/components/moderation/ReportDialog/index.tsx:451
8433
msgid "Submit report"
8434
msgstr ""
8435
···
8630
msgid "Text field"
8631
msgstr ""
8632
8633
+
#: src/components/moderation/LabelsOnMeDialog.tsx:288
8634
#: src/screens/Messages/components/ChatDisabled.tsx:120
8635
msgid "Text input field"
8636
msgstr ""
···
8687
msgid "The app will be restarted"
8688
msgstr ""
8689
8690
+
#: src/components/moderation/ModerationDetailsDialog.tsx:119
8691
#: src/lib/moderation/useModerationCauseDescription.ts:128
8692
msgid "The author of this thread has hidden this reply."
8693
msgstr ""
···
8724
msgid "The feed has been replaced with Discover."
8725
msgstr ""
8726
8727
+
#: src/components/moderation/LabelsOnMeDialog.tsx:59
8728
msgid "The following labels were applied to your account."
8729
msgstr ""
8730
8731
+
#: src/components/moderation/LabelsOnMeDialog.tsx:60
8732
msgid "The following labels were applied to your content."
8733
msgstr ""
8734
···
8748
msgid "The open social network."
8749
msgstr ""
8750
8751
#: src/view/screens/PrivacyPolicy.tsx:38
8752
msgid "The Privacy Policy has been moved to <0/>"
8753
msgstr ""
···
8878
msgstr ""
8879
8880
#: src/components/dialogs/GifSelect.tsx:258
8881
+
#: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:303
8882
#: src/view/com/util/ErrorBoundary.tsx:59
8883
msgid "There was an unexpected issue in the application. Please let us know if this happened to you!"
8884
msgstr ""
···
8915
msgid "This action can be undone at any time."
8916
msgstr ""
8917
8918
+
#: src/components/moderation/LabelsOnMeDialog.tsx:271
8919
msgid "This appeal will be sent to <0>{sourceName}</0>."
8920
msgstr ""
8921
···
8943
msgid "This content is hosted by {0}. Do you want to enable external media?"
8944
msgstr ""
8945
8946
+
#: src/components/moderation/ModerationDetailsDialog.tsx:84
8947
#: src/lib/moderation/useModerationCauseDescription.ts:84
8948
msgid "This content is not available because one of the users involved has blocked the other."
8949
msgstr ""
···
9007
msgid "This is not a valid link"
9008
msgstr ""
9009
9010
+
#: src/components/moderation/ModerationDetailsDialog.tsx:168
9011
msgid "This label was applied by the author."
9012
msgstr ""
9013
9014
+
#: src/components/moderation/LabelsOnMeDialog.tsx:165
9015
msgid "This label was applied by you."
9016
msgstr ""
9017
···
9059
msgid "This post will be hidden from feeds and threads. This cannot be undone."
9060
msgstr ""
9061
9062
+
#: src/view/com/composer/Composer.tsx:475
9063
msgid "This post's author has disabled quote posts."
9064
msgstr ""
9065
···
9095
msgid "This user has blocked you"
9096
msgstr ""
9097
9098
+
#: src/components/moderation/ModerationDetailsDialog.tsx:79
9099
#: src/lib/moderation/useModerationCauseDescription.ts:75
9100
msgid "This user has blocked you. You cannot view their content."
9101
msgstr ""
···
9104
msgid "This user has requested that their content only be shown to signed-in users."
9105
msgstr ""
9106
9107
+
#: src/components/moderation/ModerationDetailsDialog.tsx:59
9108
msgid "This user is included in the <0>{0}</0> list which you have blocked."
9109
msgstr ""
9110
9111
+
#: src/components/moderation/ModerationDetailsDialog.tsx:91
9112
msgid "This user is included in the <0>{0}</0> list which you have muted."
9113
msgstr ""
9114
···
9240
msgid "TV"
9241
msgstr ""
9242
9243
+
#: src/screens/Settings/PrivacyAndSecuritySettings.tsx:65
9244
msgid "Two-factor authentication (2FA)"
9245
msgstr ""
9246
···
9365
msgid "Unfortunately, Bluesky is unavailable in Mississippi right now."
9366
msgstr ""
9367
9368
+
#: src/components/moderation/ReportDialog/index.tsx:372
9369
msgid "Unfortunately, none of your subscribed labelers supports this report type."
9370
msgstr ""
9371
···
9487
msgid "Unsubscribed from list"
9488
msgstr ""
9489
9490
+
#: src/view/com/composer/Composer.tsx:852
9491
msgid "Unsupported video type: {mimeType}"
9492
msgstr ""
9493
···
9573
msgid "Uploading link thumbnail..."
9574
msgstr ""
9575
9576
+
#: src/view/com/composer/Composer.tsx:1837
9577
msgid "Uploading video..."
9578
msgstr ""
9579
···
9617
msgid "User blocked"
9618
msgstr ""
9619
9620
+
#: src/components/moderation/ModerationDetailsDialog.tsx:71
9621
#: src/lib/moderation/useModerationCauseDescription.ts:63
9622
msgid "User Blocked"
9623
msgstr ""
···
9630
msgid "User blocked by list"
9631
msgstr ""
9632
9633
+
#: src/components/moderation/ModerationDetailsDialog.tsx:57
9634
msgid "User Blocked by List"
9635
msgstr ""
9636
···
9638
msgid "User Blocking You"
9639
msgstr ""
9640
9641
+
#: src/components/moderation/ModerationDetailsDialog.tsx:77
9642
msgid "User Blocks You"
9643
msgstr ""
9644
···
9831
msgid "Video settings"
9832
msgstr ""
9833
9834
+
#: src/view/com/composer/Composer.tsx:1847
9835
msgid "Video uploaded"
9836
msgstr ""
9837
···
9847
msgid "Videos must be less than 3 minutes long."
9848
msgstr ""
9849
9850
+
#: src/view/com/composer/Composer.tsx:546
9851
msgctxt "Action to view the post the user just created"
9852
msgid "View"
9853
msgstr ""
9854
9855
+
#: src/screens/Profile/Header/Shell.tsx:229
9856
msgid "View {0}'s avatar"
9857
msgstr ""
9858
···
9900
9901
#: src/components/interstitials/TrendingVideos.tsx:198
9902
#: src/components/interstitials/TrendingVideos.tsx:220
9903
+
#: src/screens/Search/modules/ExploreTrendingVideos.tsx:194
9904
+
#: src/screens/Search/modules/ExploreTrendingVideos.tsx:213
9905
msgid "View more"
9906
msgstr ""
9907
···
9909
msgid "View more trending videos"
9910
msgstr ""
9911
9912
+
#: src/view/com/composer/Composer.tsx:541
9913
msgid "View post"
9914
msgstr ""
9915
···
10040
msgid "We have sent another verification email to <0>{0}</0>."
10041
msgstr ""
10042
10043
+
#: src/screens/Onboarding/StepFinished.tsx:533
10044
msgid "We hope you have a wonderful time. Remember, Bluesky is:"
10045
msgstr ""
10046
···
10137
msgid "We're sorry, but your search could not be completed. Please try again in a few minutes."
10138
msgstr ""
10139
10140
+
#: src/view/com/composer/Composer.tsx:472
10141
msgid "We're sorry! The post you are replying to has been deleted."
10142
msgstr ""
10143
···
10188
10189
#: src/view/com/auth/SplashScreen.tsx:51
10190
#: src/view/com/auth/SplashScreen.web.tsx:103
10191
+
#: src/view/com/composer/Composer.tsx:812
10192
msgid "What's up?"
10193
msgstr ""
10194
···
10219
msgstr ""
10220
10221
#: src/components/interstitials/TrendingVideos.tsx:125
10222
+
#: src/screens/Search/modules/ExploreTrendingVideos.tsx:108
10223
msgid "Whoops! Trending videos failed to load."
10224
msgstr ""
10225
···
10266
msgid "Write a message"
10267
msgstr ""
10268
10269
+
#: src/view/com/composer/Composer.tsx:912
10270
msgid "Write post"
10271
msgstr ""
10272
10273
#: src/screens/PostThread/components/ThreadComposePrompt.tsx:90
10274
+
#: src/view/com/composer/Composer.tsx:810
10275
msgid "Write your reply"
10276
msgstr ""
10277
···
10289
msgid "www.mylivestream.tv"
10290
msgstr ""
10291
10292
+
#: src/view/com/composer/select-language/SuggestedLanguage.tsx:102
10293
msgid "Yes"
10294
msgstr ""
10295
···
10456
msgid "You have blocked this user"
10457
msgstr ""
10458
10459
+
#: src/components/moderation/ModerationDetailsDialog.tsx:73
10460
#: src/lib/moderation/useModerationCauseDescription.ts:57
10461
#: src/lib/moderation/useModerationCauseDescription.ts:65
10462
msgid "You have blocked this user. You cannot view their content."
···
10476
msgid "You have hidden this post"
10477
msgstr ""
10478
10479
+
#: src/components/moderation/ModerationDetailsDialog.tsx:111
10480
msgid "You have hidden this post."
10481
msgstr ""
10482
10483
+
#: src/components/moderation/ModerationDetailsDialog.tsx:104
10484
#: src/lib/moderation/useModerationCauseDescription.ts:99
10485
msgid "You have muted this account."
10486
msgstr ""
···
10502
msgid "You have no lists."
10503
msgstr ""
10504
10505
+
#: src/components/dialogs/StarterPackDialog.tsx:101
10506
msgid "You have no starter packs."
10507
msgstr ""
10508
···
10510
msgid "You have not blocked any accounts yet. To block an account, go to their profile and select \"Block account\" from the menu on their account."
10511
msgstr ""
10512
10513
+
#: src/view/screens/ModerationMutedAccounts.tsx:179
10514
msgid "You have not muted any accounts yet. To mute an account, go to their profile and select \"Mute account\" from the menu on their account."
10515
msgstr ""
10516
···
10534
msgid "You haven't muted any words or tags yet"
10535
msgstr ""
10536
10537
+
#: src/components/moderation/ModerationDetailsDialog.tsx:118
10538
#: src/lib/moderation/useModerationCauseDescription.ts:127
10539
msgid "You hid this reply."
10540
msgstr ""
···
10551
msgid "You joined Bluesky using a starter pack {timeAgoString} ago"
10552
msgstr ""
10553
10554
+
#: src/components/moderation/LabelsOnMeDialog.tsx:79
10555
msgid "You may appeal non-self labels if you feel they were placed in error."
10556
msgstr ""
10557
10558
+
#: src/components/moderation/LabelsOnMeDialog.tsx:84
10559
msgid "You may appeal these labels if you feel they were placed in error."
10560
msgstr ""
10561
···
10685
msgid "You're in line"
10686
msgstr ""
10687
10688
+
#: src/screens/Onboarding/StepFinished.tsx:530
10689
msgid "You're ready to go!"
10690
msgstr ""
10691
···
10694
msgid "You're signed in with an App Password. Please sign in with your main password to continue deactivating your account."
10695
msgstr ""
10696
10697
+
#: src/components/moderation/ModerationDetailsDialog.tsx:108
10698
#: src/lib/moderation/useModerationCauseDescription.ts:108
10699
msgid "You've chosen to hide a word or tag within this post."
10700
msgstr ""
···
10849
msgid "Your password must be at least 8 characters long."
10850
msgstr ""
10851
10852
+
#: src/view/com/composer/Composer.tsx:537
10853
msgid "Your post was sent"
10854
msgstr ""
10855
10856
+
#: src/view/com/composer/Composer.tsx:534
10857
msgid "Your posts were sent"
10858
msgstr ""
10859
10860
+
#: src/screens/Onboarding/StepFinished.tsx:545
10861
msgid "Your posts, likes, and blocks are public. Mutes are private."
10862
msgstr ""
10863
···
10865
msgid "Your preferred language"
10866
msgstr ""
10867
10868
+
#: src/screens/Onboarding/StepFinished.tsx:422
10869
msgid "Your profile picture"
10870
msgstr ""
10871
10872
+
#: src/screens/Onboarding/StepFinished.tsx:350
10873
msgid "Your profile picture surrounded by concentric circles of other users' profile pictures"
10874
msgstr ""
10875
···
10877
msgid "Your profile, posts, feeds, and lists will no longer be visible to other Bluesky users. You can reactivate your account at any time by logging in."
10878
msgstr ""
10879
10880
+
#: src/view/com/composer/Composer.tsx:536
10881
msgid "Your reply was sent"
10882
msgstr ""
10883
10884
+
#: src/components/moderation/ReportDialog/index.tsx:394
10885
msgid "Your report will be sent to <0>{0}</0>."
10886
msgstr ""
10887
+5
-10
src/logger/metrics.ts
+5
-10
src/logger/metrics.ts
···
175
'feed:suggestion:press': {
176
feedUrl: string
177
}
178
-
'feed:showMore': {
179
-
feed: string
180
feedContext: string
181
}
182
-
'feed:showLess': {
183
-
feed: string
184
feedContext: string
185
}
186
-
'feed:clickthrough': {
187
-
feed: string
188
count: number
189
}
190
-
'feed:engaged': {
191
-
feed: string
192
count: number
193
}
194
-
'feed:seen': {
195
-
feed: string
196
count: number
197
}
198
···
175
'feed:suggestion:press': {
176
feedUrl: string
177
}
178
+
'discover:showMore': {
179
feedContext: string
180
}
181
+
'discover:showLess': {
182
feedContext: string
183
}
184
+
'discover:clickthrough': {
185
count: number
186
}
187
+
'discover:engaged': {
188
count: number
189
}
190
+
'discover:seen': {
191
count: number
192
}
193
+2
src/screens/Onboarding/StepFinished.tsx
+2
src/screens/Onboarding/StepFinished.tsx
···
69
import * as bsky from '#/types/bsky'
70
71
export function StepFinished() {
72
const {state, dispatch} = useContext(Context)
73
const onboardDispatch = useOnboardingDispatch()
74
const [saving, setSaving] = useState(false)
···
494
495
function Dot({active}: {active: boolean}) {
496
const t = useTheme()
497
498
return (
499
<View
···
69
import * as bsky from '#/types/bsky'
70
71
export function StepFinished() {
72
+
const {_} = useLingui()
73
const {state, dispatch} = useContext(Context)
74
const onboardDispatch = useOnboardingDispatch()
75
const [saving, setSaving] = useState(false)
···
495
496
function Dot({active}: {active: boolean}) {
497
const t = useTheme()
498
+
const {_} = useLingui()
499
500
return (
501
<View
+1
-1
src/screens/PostThread/components/ThreadItemAnchor.tsx
+1
-1
src/screens/PostThread/components/ThreadItemAnchor.tsx
+12
-13
src/screens/PostThread/index.tsx
+12
-13
src/screens/PostThread/index.tsx
···
148
*/
149
const shouldHandleScroll = useRef(true)
150
/**
151
-
* Called any time the content size of the list changes. Could be a fresh
152
-
* render, items being added to the list, or any resize that changes the
153
-
* scrollable size of the content.
154
*
155
* We want this to fire every time we change params (which will reset
156
* `deferParents` via `onLayout` on the anchor post, due to the key change),
···
195
* will give us a _positive_ offset, which will scroll the anchor post
196
* back _up_ to the top of the screen.
197
*/
198
-
const offset = anchorOffsetTop - headerHeight
199
-
list.scrollToOffset({offset})
200
201
/*
202
-
* After we manage to do a positive adjustment, we need to ensure this
203
-
* doesn't run again until scroll handling is requested again via
204
-
* `shouldHandleScroll.current === true` and a params change via
205
-
* `prepareForParamsUpdate`.
206
*
207
* The `isRoot` here is needed because if we're looking at the anchor
208
* post, this handler will not fire after `deferParents` is set to
209
* `false`, since there are no parents to render above it. In this case,
210
-
* we want to make sure `shouldHandleScroll` is set to `false` right away
211
-
* so that subsequent size changes unrelated to a params change (like
212
-
* pagination) do not affect scroll.
213
*/
214
-
if (offset > 0 || isRoot) shouldHandleScroll.current = false
215
}
216
})
217
···
148
*/
149
const shouldHandleScroll = useRef(true)
150
/**
151
+
* Called any time the content size of the list changes, _just_ before paint.
152
*
153
* We want this to fire every time we change params (which will reset
154
* `deferParents` via `onLayout` on the anchor post, due to the key change),
···
193
* will give us a _positive_ offset, which will scroll the anchor post
194
* back _up_ to the top of the screen.
195
*/
196
+
list.scrollToOffset({
197
+
offset: anchorOffsetTop - headerHeight,
198
+
})
199
200
/*
201
+
* After the second pass, `deferParents` will be `false`, and we need
202
+
* to ensure this doesn't run again until scroll handling is requested
203
+
* again via `shouldHandleScroll.current === true` and a params
204
+
* change via `prepareForParamsUpdate`.
205
*
206
* The `isRoot` here is needed because if we're looking at the anchor
207
* post, this handler will not fire after `deferParents` is set to
208
* `false`, since there are no parents to render above it. In this case,
209
+
* we want to make sure `shouldHandleScroll` is set to `false` so that
210
+
* subsequent size changes unrelated to a params change (like pagination)
211
+
* do not affect scroll.
212
*/
213
+
if (!deferParents || isRoot) shouldHandleScroll.current = false
214
}
215
})
216
+11
-23
src/screens/Profile/Header/Shell.tsx
+11
-23
src/screens/Profile/Header/Shell.tsx
···
209
210
{children}
211
212
-
{!isPlaceholderProfile &&
213
-
(isMe ? (
214
-
<LabelsOnMe
215
-
type="account"
216
-
labels={profile.labels}
217
-
style={[
218
-
a.px_lg,
219
-
a.pt_xs,
220
-
a.pb_sm,
221
-
isIOS ? a.pointer_events_auto : {pointerEvents: 'box-none'},
222
-
]}
223
-
/>
224
-
) : (
225
-
<ProfileHeaderAlerts
226
-
moderation={moderation}
227
-
style={[
228
-
a.px_lg,
229
-
a.pt_xs,
230
-
a.pb_sm,
231
-
isIOS ? a.pointer_events_auto : {pointerEvents: 'box-none'},
232
-
]}
233
-
/>
234
-
))}
235
236
<GrowableAvatar style={[a.absolute, {top: 104, left: 10}]}>
237
<TouchableWithoutFeedback
···
209
210
{children}
211
212
+
{!isPlaceholderProfile && (
213
+
<View
214
+
style={[a.px_lg, a.pt_xs, a.pb_sm]}
215
+
pointerEvents={isIOS ? 'auto' : 'box-none'}>
216
+
{isMe ? (
217
+
<LabelsOnMe type="account" labels={profile.labels} />
218
+
) : (
219
+
<ProfileHeaderAlerts moderation={moderation} />
220
+
)}
221
+
</View>
222
+
)}
223
224
<GrowableAvatar style={[a.absolute, {top: 104, left: 10}]}>
225
<TouchableWithoutFeedback
+1
src/screens/Search/Shell.tsx
+1
src/screens/Search/Shell.tsx
+1
src/screens/Search/modules/ExploreTrendingVideos.tsx
+1
src/screens/Search/modules/ExploreTrendingVideos.tsx
+1
-1
src/screens/Settings/AppPasswords.tsx
+1
-1
src/screens/Settings/AppPasswords.tsx
+2
-2
src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx
+2
-2
src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx
···
134
<Admonition.Outer type="tip">
135
<Admonition.Row>
136
<Admonition.Icon />
137
-
<Admonition.Content>
138
<Admonition.Text>
139
<Trans>
140
Enable notifications for an account by visiting their
···
166
.
167
</Trans>
168
</Admonition.Text>
169
-
</Admonition.Content>
170
</Admonition.Row>
171
</Admonition.Outer>
172
) : (
···
134
<Admonition.Outer type="tip">
135
<Admonition.Row>
136
<Admonition.Icon />
137
+
<View style={[a.flex_1, a.gap_sm]}>
138
<Admonition.Text>
139
<Trans>
140
Enable notifications for an account by visiting their
···
166
.
167
</Trans>
168
</Admonition.Text>
169
+
</View>
170
</Admonition.Row>
171
</Admonition.Outer>
172
) : (
+3
-2
src/screens/Settings/PrivacyAndSecuritySettings.tsx
+3
-2
src/screens/Settings/PrivacyAndSecuritySettings.tsx
···
1
import {type AppBskyNotificationDeclaration} from '@atproto/api'
2
import {msg, Trans} from '@lingui/macro'
3
import {useLingui} from '@lingui/react'
···
111
<Admonition.Outer type="tip" style={[a.flex_1]}>
112
<Admonition.Row>
113
<Admonition.Icon />
114
-
<Admonition.Content>
115
<Admonition.Text>
116
<Trans>
117
Note: Bluesky is an open and public network. This setting
···
130
<Trans>Learn more about what is public on Bluesky.</Trans>
131
</InlineLinkText>
132
</Admonition.Text>
133
-
</Admonition.Content>
134
</Admonition.Row>
135
</Admonition.Outer>
136
</SettingsList.Item>
···
1
+
import {View} from 'react-native'
2
import {type AppBskyNotificationDeclaration} from '@atproto/api'
3
import {msg, Trans} from '@lingui/macro'
4
import {useLingui} from '@lingui/react'
···
112
<Admonition.Outer type="tip" style={[a.flex_1]}>
113
<Admonition.Row>
114
<Admonition.Icon />
115
+
<View style={[a.flex_1, a.gap_sm]}>
116
<Admonition.Text>
117
<Trans>
118
Note: Bluesky is an open and public network. This setting
···
131
<Trans>Learn more about what is public on Bluesky.</Trans>
132
</InlineLinkText>
133
</Admonition.Text>
134
+
</View>
135
</Admonition.Row>
136
</Admonition.Outer>
137
</SettingsList.Item>
+12
-26
src/state/feed-feedback.tsx
+12
-26
src/state/feed-feedback.tsx
···
12
13
import {PROD_FEEDS, STAGING_FEEDS} from '#/lib/constants'
14
import {isNetworkError} from '#/lib/hooks/useCleanError'
15
import {Logger} from '#/logger'
16
import {
17
type FeedSourceFeedInfo,
···
89
const aggregatedStats = useRef<AggregatedStats | null>(null)
90
const throttledFlushAggregatedStats = useMemo(
91
() =>
92
-
throttle(
93
-
() =>
94
-
flushToStatsig(
95
-
aggregatedStats.current,
96
-
feed?.feedDescriptor ?? 'unknown',
97
-
),
98
-
45e3,
99
-
{
100
-
leading: true, // The outer call is already throttled somewhat.
101
-
trailing: true,
102
-
},
103
-
),
104
-
[feed?.feedDescriptor],
105
)
106
107
const sendToFeedNoDelay = useCallback(() => {
···
142
sendOrAggregateInteractionsForStats(
143
aggregatedStats.current,
144
interactionsToSend,
145
-
feed?.feedDescriptor ?? 'unknown',
146
)
147
throttledFlushAggregatedStats()
148
logger.debug('flushed')
···
279
function sendOrAggregateInteractionsForStats(
280
stats: AggregatedStats,
281
interactions: AppBskyFeedDefs.Interaction[],
282
-
feed: string,
283
) {
284
for (let interaction of interactions) {
285
switch (interaction.event) {
286
// Pressing "Show more" / "Show less" is relatively uncommon so we won't aggregate them.
287
// This lets us send the feed context together with them.
288
case 'app.bsky.feed.defs#requestLess': {
289
-
logger.metric('feed:showLess', {
290
-
feed,
291
feedContext: interaction.feedContext ?? '',
292
})
293
break
294
}
295
case 'app.bsky.feed.defs#requestMore': {
296
-
logger.metric('feed:showMore', {
297
-
feed,
298
feedContext: interaction.feedContext ?? '',
299
})
300
break
···
324
}
325
}
326
327
-
function flushToStatsig(stats: AggregatedStats | null, feedDescriptor: string) {
328
if (stats === null) {
329
return
330
}
331
332
if (stats.clickthroughCount > 0) {
333
-
logger.metric('feed:clickthrough', {
334
count: stats.clickthroughCount,
335
-
feed: feedDescriptor,
336
})
337
stats.clickthroughCount = 0
338
}
339
340
if (stats.engagedCount > 0) {
341
-
logger.metric('feed:engaged', {
342
count: stats.engagedCount,
343
-
feed: feedDescriptor,
344
})
345
stats.engagedCount = 0
346
}
347
348
if (stats.seenCount > 0) {
349
-
logger.metric('feed:seen', {
350
count: stats.seenCount,
351
-
feed: feedDescriptor,
352
})
353
stats.seenCount = 0
354
}
···
12
13
import {PROD_FEEDS, STAGING_FEEDS} from '#/lib/constants'
14
import {isNetworkError} from '#/lib/hooks/useCleanError'
15
+
import {logEvent} from '#/lib/statsig/statsig'
16
import {Logger} from '#/logger'
17
import {
18
type FeedSourceFeedInfo,
···
90
const aggregatedStats = useRef<AggregatedStats | null>(null)
91
const throttledFlushAggregatedStats = useMemo(
92
() =>
93
+
throttle(() => flushToStatsig(aggregatedStats.current), 45e3, {
94
+
leading: true, // The outer call is already throttled somewhat.
95
+
trailing: true,
96
+
}),
97
+
[],
98
)
99
100
const sendToFeedNoDelay = useCallback(() => {
···
135
sendOrAggregateInteractionsForStats(
136
aggregatedStats.current,
137
interactionsToSend,
138
)
139
throttledFlushAggregatedStats()
140
logger.debug('flushed')
···
271
function sendOrAggregateInteractionsForStats(
272
stats: AggregatedStats,
273
interactions: AppBskyFeedDefs.Interaction[],
274
) {
275
for (let interaction of interactions) {
276
switch (interaction.event) {
277
// Pressing "Show more" / "Show less" is relatively uncommon so we won't aggregate them.
278
// This lets us send the feed context together with them.
279
case 'app.bsky.feed.defs#requestLess': {
280
+
logEvent('discover:showLess', {
281
feedContext: interaction.feedContext ?? '',
282
})
283
break
284
}
285
case 'app.bsky.feed.defs#requestMore': {
286
+
logEvent('discover:showMore', {
287
feedContext: interaction.feedContext ?? '',
288
})
289
break
···
313
}
314
}
315
316
+
function flushToStatsig(stats: AggregatedStats | null) {
317
if (stats === null) {
318
return
319
}
320
321
if (stats.clickthroughCount > 0) {
322
+
logEvent('discover:clickthrough', {
323
count: stats.clickthroughCount,
324
})
325
stats.clickthroughCount = 0
326
}
327
328
if (stats.engagedCount > 0) {
329
+
logEvent('discover:engaged', {
330
count: stats.engagedCount,
331
})
332
stats.engagedCount = 0
333
}
334
335
if (stats.seenCount > 0) {
336
+
logEvent('discover:seen', {
337
count: stats.seenCount,
338
})
339
stats.seenCount = 0
340
}
+1
-1
src/state/persisted/schema.ts
+1
-1
src/state/persisted/schema.ts
-4
src/state/preferences/languages.tsx
-4
src/state/preferences/languages.tsx
···
156
return postLanguage.split(',').filter(Boolean)
157
}
158
159
-
export function fromPostLanguages(languages: string[]): string {
160
-
return languages.filter(Boolean).join(',')
161
-
}
162
-
163
export function hasPostLanguage(postLanguage: string, code2: string): boolean {
164
return toPostLanguages(postLanguage).includes(code2)
165
}
+5
-5
src/state/queries/post-feed.ts
+5
-5
src/state/queries/post-feed.ts
···
492
}
493
}
494
} else if (feedDesc.startsWith('author')) {
495
-
const [__, actor, filter] = feedDesc.split('|')
496
return new AuthorFeedAPI({agent, feedParams: {actor, filter}})
497
} else if (feedDesc.startsWith('likes')) {
498
-
const [__, actor] = feedDesc.split('|')
499
return new LikesFeedAPI({agent, feedParams: {actor}})
500
} else if (feedDesc.startsWith('feedgen')) {
501
-
const [__, feed] = feedDesc.split('|')
502
return new CustomFeedAPI({
503
agent,
504
feedParams: {feed},
505
userInterests,
506
})
507
} else if (feedDesc.startsWith('list')) {
508
-
const [__, list] = feedDesc.split('|')
509
return new ListFeedAPI({agent, feedParams: {list}})
510
} else if (feedDesc.startsWith('posts')) {
511
-
const [__, uriList] = feedDesc.split('|')
512
return new PostListFeedAPI({agent, feedParams: {uris: uriList.split(',')}})
513
} else if (feedDesc === 'demo') {
514
return new DemoFeedAPI({agent})
···
492
}
493
}
494
} else if (feedDesc.startsWith('author')) {
495
+
const [_, actor, filter] = feedDesc.split('|')
496
return new AuthorFeedAPI({agent, feedParams: {actor, filter}})
497
} else if (feedDesc.startsWith('likes')) {
498
+
const [_, actor] = feedDesc.split('|')
499
return new LikesFeedAPI({agent, feedParams: {actor}})
500
} else if (feedDesc.startsWith('feedgen')) {
501
+
const [_, feed] = feedDesc.split('|')
502
return new CustomFeedAPI({
503
agent,
504
feedParams: {feed},
505
userInterests,
506
})
507
} else if (feedDesc.startsWith('list')) {
508
+
const [_, list] = feedDesc.split('|')
509
return new ListFeedAPI({agent, feedParams: {list}})
510
} else if (feedDesc.startsWith('posts')) {
511
+
const [_, uriList] = feedDesc.split('|')
512
return new PostListFeedAPI({agent, feedParams: {uris: uriList.split(',')}})
513
} else if (feedDesc === 'demo') {
514
return new DemoFeedAPI({agent})
+1
-1
src/state/queries/trending/useGetSuggestedUsersQuery.ts
+1
-1
src/state/queries/trending/useGetSuggestedUsersQuery.ts
+8
src/state/session/agent.ts
+8
src/state/session/agent.ts
···
321
322
// Now the agent is ready.
323
const account = agentToSessionAccountOrThrow(this)
324
+
let lastSession = this.sessionManager.session
325
this.persistSessionHandler = event => {
326
+
if (this.sessionManager.session) {
327
+
lastSession = this.sessionManager.session
328
+
} else if (event === 'network-error') {
329
+
// Put it back, we'll try again later.
330
+
this.sessionManager.session = lastSession
331
+
}
332
+
333
onSessionChange(this, account.did, event)
334
if (event !== 'create' && event !== 'update') {
335
addSessionErrorLog(account.did, event)
+6
-55
src/view/com/composer/Composer.tsx
+6
-55
src/view/com/composer/Composer.tsx
···
88
import {useModalControls} from '#/state/modals'
89
import {useRequireAltTextEnabled} from '#/state/preferences'
90
import {
91
-
fromPostLanguages,
92
toPostLanguages,
93
useLanguagePrefs,
94
useLanguagePrefsApi,
···
198
const [publishingStage, setPublishingStage] = useState('')
199
const [error, setError] = useState('')
200
201
-
/**
202
-
* A temporary local reference to a language suggestion that the user has
203
-
* accepted. This overrides the global post language preference, but is not
204
-
* stored permanently.
205
-
*/
206
-
const [acceptedLanguageSuggestion, setAcceptedLanguageSuggestion] = useState<
207
-
string | null
208
-
>(null)
209
-
210
-
/**
211
-
* The language(s) of the post being replied to.
212
-
*/
213
-
const [replyToLanguages, setReplyToLanguages] = useState<string[]>(
214
-
replyTo?.langs || [],
215
-
)
216
-
217
-
/**
218
-
* The currently selected languages of the post. Prefer local temporary
219
-
* language suggestion over global lang prefs, if available.
220
-
*/
221
-
const currentLanguages = useMemo(
222
-
() =>
223
-
acceptedLanguageSuggestion
224
-
? [acceptedLanguageSuggestion]
225
-
: toPostLanguages(langPrefs.postLanguage),
226
-
[acceptedLanguageSuggestion, langPrefs.postLanguage],
227
-
)
228
-
229
-
/**
230
-
* When the user selects a language from the composer language selector,
231
-
* clear any temporary language suggestions they may have selected
232
-
* previously, and any we might try to suggest to them.
233
-
*/
234
-
const onSelectLanguage = () => {
235
-
setAcceptedLanguageSuggestion(null)
236
-
setReplyToLanguages([])
237
-
}
238
-
239
const [composerState, composerDispatch] = useReducer(
240
composerReducer,
241
{
···
453
thread,
454
replyTo: replyTo?.uri,
455
onStateChange: setPublishingStage,
456
-
langs: currentLanguages,
457
})
458
).uris[0]
459
···
529
isPartOfThread: thread.posts.length > 1,
530
hasLink: !!post.embed.link,
531
hasQuote: !!post.embed.quote,
532
-
langs: fromPostLanguages(currentLanguages),
533
logContext: 'Composer',
534
})
535
index++
···
596
thread,
597
canPost,
598
isPublishing,
599
-
currentLanguages,
600
onClose,
601
onPost,
602
onPostSuccess,
···
693
<>
694
<SuggestedLanguage
695
text={activePost.richtext.text}
696
-
replyToLanguages={replyToLanguages}
697
-
currentLanguages={currentLanguages}
698
-
onAcceptSuggestedLanguage={setAcceptedLanguageSuggestion}
699
/>
700
<ComposerPills
701
isReply={!!replyTo}
···
718
type: 'add_post',
719
})
720
}}
721
-
currentLanguages={currentLanguages}
722
-
onSelectLanguage={onSelectLanguage}
723
/>
724
</>
725
)
···
1331
onEmojiButtonPress,
1332
onSelectVideo,
1333
onAddPost,
1334
-
currentLanguages,
1335
-
onSelectLanguage,
1336
}: {
1337
post: PostDraft
1338
dispatch: (action: PostAction) => void
···
1341
onError: (error: string) => void
1342
onSelectVideo: (postId: string, asset: ImagePickerAsset) => void
1343
onAddPost: () => void
1344
-
currentLanguages: string[]
1345
-
onSelectLanguage?: (language: string) => void
1346
}) {
1347
const t = useTheme()
1348
const {_} = useLingui()
···
1496
<PlusIcon size="lg" />
1497
</Button>
1498
)}
1499
-
<PostLanguageSelect
1500
-
currentLanguages={currentLanguages}
1501
-
onSelectLanguage={onSelectLanguage}
1502
-
/>
1503
<CharProgress
1504
count={post.shortenedGraphemeLength}
1505
style={{width: 65}}
···
88
import {useModalControls} from '#/state/modals'
89
import {useRequireAltTextEnabled} from '#/state/preferences'
90
import {
91
toPostLanguages,
92
useLanguagePrefs,
93
useLanguagePrefsApi,
···
197
const [publishingStage, setPublishingStage] = useState('')
198
const [error, setError] = useState('')
199
200
const [composerState, composerDispatch] = useReducer(
201
composerReducer,
202
{
···
414
thread,
415
replyTo: replyTo?.uri,
416
onStateChange: setPublishingStage,
417
+
langs: toPostLanguages(langPrefs.postLanguage),
418
})
419
).uris[0]
420
···
490
isPartOfThread: thread.posts.length > 1,
491
hasLink: !!post.embed.link,
492
hasQuote: !!post.embed.quote,
493
+
langs: langPrefs.postLanguage,
494
logContext: 'Composer',
495
})
496
index++
···
557
thread,
558
canPost,
559
isPublishing,
560
+
langPrefs.postLanguage,
561
onClose,
562
onPost,
563
onPostSuccess,
···
654
<>
655
<SuggestedLanguage
656
text={activePost.richtext.text}
657
+
// NOTE(@elijaharita): currently just choosing the first language if any exists
658
+
replyToLanguage={replyTo?.langs?.[0]}
659
/>
660
<ComposerPills
661
isReply={!!replyTo}
···
678
type: 'add_post',
679
})
680
}}
681
/>
682
</>
683
)
···
1289
onEmojiButtonPress,
1290
onSelectVideo,
1291
onAddPost,
1292
}: {
1293
post: PostDraft
1294
dispatch: (action: PostAction) => void
···
1297
onError: (error: string) => void
1298
onSelectVideo: (postId: string, asset: ImagePickerAsset) => void
1299
onAddPost: () => void
1300
}) {
1301
const t = useTheme()
1302
const {_} = useLingui()
···
1450
<PlusIcon size="lg" />
1451
</Button>
1452
)}
1453
+
<PostLanguageSelect />
1454
<CharProgress
1455
count={post.shortenedGraphemeLength}
1456
style={{width: 65}}
+1
src/view/com/composer/photos/EditImageDialog.web.tsx
+1
src/view/com/composer/photos/EditImageDialog.web.tsx
+9
-35
src/view/com/composer/select-language/PostLanguageSelect.tsx
+9
-35
src/view/com/composer/select-language/PostLanguageSelect.tsx
···
17
import {Text} from '#/components/Typography'
18
import {PostLanguageSelectDialog} from './PostLanguageSelectDialog'
19
20
-
export function PostLanguageSelect({
21
-
currentLanguages: currentLanguagesProp,
22
-
onSelectLanguage,
23
-
}: {
24
-
currentLanguages?: string[]
25
-
onSelectLanguage?: (language: string) => void
26
-
}) {
27
const {_} = useLingui()
28
const langPrefs = useLanguagePrefs()
29
const setLangPrefs = useLanguagePrefsApi()
···
32
const dedupedHistory = Array.from(
33
new Set([...langPrefs.postLanguageHistory, langPrefs.postLanguage]),
34
)
35
-
36
-
const currentLanguages =
37
-
currentLanguagesProp ?? toPostLanguages(langPrefs.postLanguage)
38
39
if (
40
dedupedHistory.length === 1 &&
···
43
return (
44
<>
45
<LanguageBtn onPress={languageDialogControl.open} />
46
-
<PostLanguageSelectDialog
47
-
control={languageDialogControl}
48
-
currentLanguages={currentLanguages}
49
-
/>
50
</>
51
)
52
}
···
55
<>
56
<Menu.Root>
57
<Menu.Trigger label={_(msg`Select post language`)}>
58
-
{({props}) => (
59
-
<LanguageBtn currentLanguages={currentLanguages} {...props} />
60
-
)}
61
</Menu.Trigger>
62
<Menu.Outer>
63
<Menu.Group>
···
70
<Menu.Item
71
key={historyItem}
72
label={_(msg`Select ${langName}`)}
73
-
onPress={() => {
74
-
setLangPrefs.setPostLanguage(historyItem)
75
-
onSelectLanguage?.(historyItem)
76
-
}}>
77
<Menu.ItemText>{langName}</Menu.ItemText>
78
<Menu.ItemRadio
79
-
selected={currentLanguages.includes(historyItem)}
80
/>
81
</Menu.Item>
82
)
···
94
</Menu.Outer>
95
</Menu.Root>
96
97
-
<PostLanguageSelectDialog
98
-
control={languageDialogControl}
99
-
currentLanguages={currentLanguages}
100
-
onSelectLanguage={onSelectLanguage}
101
-
/>
102
</>
103
)
104
}
105
106
-
function LanguageBtn(
107
-
props: Omit<ButtonProps, 'label' | 'children'> & {
108
-
currentLanguages?: string[]
109
-
},
110
-
) {
111
const {_} = useLingui()
112
const langPrefs = useLanguagePrefs()
113
const t = useTheme()
114
115
const postLanguagesPref = toPostLanguages(langPrefs.postLanguage)
116
-
const currentLanguages = props.currentLanguages ?? postLanguagesPref
117
118
return (
119
<Button
···
132
{({pressed, hovered}) => {
133
const color =
134
pressed || hovered ? t.palette.primary_300 : t.palette.primary_500
135
-
if (currentLanguages.length > 0) {
136
return (
137
<Text
138
style={[
···
143
{maxWidth: 100},
144
]}
145
numberOfLines={1}>
146
-
{currentLanguages
147
.map(lang => codeToLanguageName(lang, langPrefs.appLanguage))
148
.join(', ')}
149
</Text>
···
17
import {Text} from '#/components/Typography'
18
import {PostLanguageSelectDialog} from './PostLanguageSelectDialog'
19
20
+
export function PostLanguageSelect() {
21
const {_} = useLingui()
22
const langPrefs = useLanguagePrefs()
23
const setLangPrefs = useLanguagePrefsApi()
···
26
const dedupedHistory = Array.from(
27
new Set([...langPrefs.postLanguageHistory, langPrefs.postLanguage]),
28
)
29
30
if (
31
dedupedHistory.length === 1 &&
···
34
return (
35
<>
36
<LanguageBtn onPress={languageDialogControl.open} />
37
+
<PostLanguageSelectDialog control={languageDialogControl} />
38
</>
39
)
40
}
···
43
<>
44
<Menu.Root>
45
<Menu.Trigger label={_(msg`Select post language`)}>
46
+
{({props}) => <LanguageBtn {...props} />}
47
</Menu.Trigger>
48
<Menu.Outer>
49
<Menu.Group>
···
56
<Menu.Item
57
key={historyItem}
58
label={_(msg`Select ${langName}`)}
59
+
onPress={() => setLangPrefs.setPostLanguage(historyItem)}>
60
<Menu.ItemText>{langName}</Menu.ItemText>
61
<Menu.ItemRadio
62
+
selected={historyItem === langPrefs.postLanguage}
63
/>
64
</Menu.Item>
65
)
···
77
</Menu.Outer>
78
</Menu.Root>
79
80
+
<PostLanguageSelectDialog control={languageDialogControl} />
81
</>
82
)
83
}
84
85
+
function LanguageBtn(props: Omit<ButtonProps, 'label' | 'children'>) {
86
const {_} = useLingui()
87
const langPrefs = useLanguagePrefs()
88
const t = useTheme()
89
90
const postLanguagesPref = toPostLanguages(langPrefs.postLanguage)
91
92
return (
93
<Button
···
106
{({pressed, hovered}) => {
107
const color =
108
pressed || hovered ? t.palette.primary_300 : t.palette.primary_500
109
+
if (postLanguagesPref.length > 0) {
110
return (
111
<Text
112
style={[
···
117
{maxWidth: 100},
118
]}
119
numberOfLines={1}>
120
+
{postLanguagesPref
121
.map(lang => codeToLanguageName(lang, langPrefs.appLanguage))
122
.join(', ')}
123
</Text>
+3
-25
src/view/com/composer/select-language/PostLanguageSelectDialog.tsx
+3
-25
src/view/com/composer/select-language/PostLanguageSelectDialog.tsx
···
8
import {type Language, LANGUAGES, LANGUAGES_MAP_CODE2} from '#/locale/languages'
9
import {isNative, isWeb} from '#/platform/detection'
10
import {
11
-
toPostLanguages,
12
useLanguagePrefs,
13
useLanguagePrefsApi,
14
} from '#/state/preferences/languages'
···
24
25
export function PostLanguageSelectDialog({
26
control,
27
-
/**
28
-
* Optionally can be passed to show different values than what is saved in
29
-
* langPrefs.
30
-
*/
31
-
currentLanguages,
32
-
onSelectLanguage,
33
}: {
34
control: Dialog.DialogControlProps
35
-
currentLanguages?: string[]
36
-
onSelectLanguage?: (language: string) => void
37
}) {
38
const {height} = useWindowDimensions()
39
const insets = useSafeAreaInsets()
···
49
nativeOptions={{minHeight: height - insets.top}}>
50
<Dialog.Handle />
51
<ErrorBoundary renderError={renderErrorBoundary}>
52
-
<DialogInner
53
-
currentLanguages={currentLanguages}
54
-
onSelectLanguage={onSelectLanguage}
55
-
/>
56
</ErrorBoundary>
57
</Dialog.Outer>
58
)
59
}
60
61
-
export function DialogInner({
62
-
currentLanguages,
63
-
onSelectLanguage,
64
-
}: {
65
-
currentLanguages?: string[]
66
-
onSelectLanguage?: (language: string) => void
67
-
}) {
68
const control = Dialog.useDialogContext()
69
const [headerHeight, setHeaderHeight] = useState(0)
70
···
81
}, [])
82
83
const langPrefs = useLanguagePrefs()
84
-
const postLanguagesPref =
85
-
currentLanguages ?? toPostLanguages(langPrefs.postLanguage)
86
-
87
const [checkedLanguagesCode2, setCheckedLanguagesCode2] = useState<string[]>(
88
-
postLanguagesPref || [langPrefs.primaryLanguage],
89
)
90
const [search, setSearch] = useState('')
91
···
100
langsString = langPrefs.primaryLanguage
101
}
102
setLangPrefs.setPostLanguage(langsString)
103
-
onSelectLanguage?.(langsString)
104
})
105
}
106
···
8
import {type Language, LANGUAGES, LANGUAGES_MAP_CODE2} from '#/locale/languages'
9
import {isNative, isWeb} from '#/platform/detection'
10
import {
11
useLanguagePrefs,
12
useLanguagePrefsApi,
13
} from '#/state/preferences/languages'
···
23
24
export function PostLanguageSelectDialog({
25
control,
26
}: {
27
control: Dialog.DialogControlProps
28
}) {
29
const {height} = useWindowDimensions()
30
const insets = useSafeAreaInsets()
···
40
nativeOptions={{minHeight: height - insets.top}}>
41
<Dialog.Handle />
42
<ErrorBoundary renderError={renderErrorBoundary}>
43
+
<DialogInner />
44
</ErrorBoundary>
45
</Dialog.Outer>
46
)
47
}
48
49
+
export function DialogInner() {
50
const control = Dialog.useDialogContext()
51
const [headerHeight, setHeaderHeight] = useState(0)
52
···
63
}, [])
64
65
const langPrefs = useLanguagePrefs()
66
const [checkedLanguagesCode2, setCheckedLanguagesCode2] = useState<string[]>(
67
+
langPrefs.postLanguage.split(',') || [langPrefs.primaryLanguage],
68
)
69
const [search, setSearch] = useState('')
70
···
79
langsString = langPrefs.primaryLanguage
80
}
81
setLangPrefs.setPostLanguage(langsString)
82
})
83
}
84
+44
-121
src/view/com/composer/select-language/SuggestedLanguage.tsx
+44
-121
src/view/com/composer/select-language/SuggestedLanguage.tsx
···
1
import {useEffect, useState} from 'react'
2
-
import {Text as RNText, View} from 'react-native'
3
import {parseLanguage} from '@atproto/api'
4
import {msg, Trans} from '@lingui/macro'
5
import {useLingui} from '@lingui/react'
6
import lande from 'lande'
7
8
import {code3ToCode2Strict, codeToLanguageName} from '#/locale/helpers'
9
-
import {useLanguagePrefs} from '#/state/preferences/languages'
10
import {atoms as a, useTheme} from '#/alf'
11
import {Button, ButtonText} from '#/components/Button'
12
import {Earth_Stroke2_Corner2_Rounded as EarthIcon} from '#/components/icons/Globe'
···
18
19
export function SuggestedLanguage({
20
text,
21
-
replyToLanguages: replyToLanguagesProp,
22
-
currentLanguages,
23
-
onAcceptSuggestedLanguage,
24
}: {
25
text: string
26
-
/**
27
-
* All languages associated with the post being replied to.
28
-
*/
29
-
replyToLanguages: string[]
30
-
/**
31
-
* All languages currently selected for the post being composed.
32
-
*/
33
-
currentLanguages: string[]
34
-
/**
35
-
* Called when the user accepts a suggested language. We only pass a single
36
-
* language here. If the post being replied to has multiple languages, we
37
-
* only suggest the first one.
38
-
*/
39
-
onAcceptSuggestedLanguage: (language: string | null) => void
40
}) {
41
-
const langPrefs = useLanguagePrefs()
42
-
const replyToLanguages = replyToLanguagesProp
43
-
.map(lang => cleanUpLanguage(lang))
44
-
.filter(Boolean) as string[]
45
-
const [hasInteracted, setHasInteracted] = useState(false)
46
const [suggestedLanguage, setSuggestedLanguage] = useState<
47
string | undefined
48
-
>(undefined)
49
50
useEffect(() => {
51
-
if (text.length > 0 && !hasInteracted) {
52
-
setHasInteracted(true)
53
}
54
-
}, [text, hasInteracted])
55
56
-
useEffect(() => {
57
const textTrimmed = text.trim()
58
59
// Don't run the language model on small posts, the results are likely
···
68
})
69
70
return () => cancelIdle(idle)
71
-
}, [text])
72
73
-
/*
74
-
* We've detected a language, and the user hasn't already selected it.
75
-
*/
76
-
const hasLanguageSuggestion =
77
-
suggestedLanguage && !currentLanguages.includes(suggestedLanguage)
78
-
/*
79
-
* We have not detected a different language, and the user is not already
80
-
* using or has not already selected one of the languages of the post they
81
-
* are replying to.
82
-
*/
83
-
const hasSuggestedReplyLanguage =
84
-
!hasInteracted &&
85
-
!suggestedLanguage &&
86
-
replyToLanguages.length &&
87
-
!replyToLanguages.some(l => currentLanguages.includes(l))
88
-
89
-
if (hasLanguageSuggestion) {
90
const suggestedLanguageName = codeToLanguageName(
91
suggestedLanguage,
92
langPrefs.appLanguage,
93
)
94
95
return (
96
-
<LanguageSuggestionButton
97
-
label={
98
-
<RNText>
99
-
<Trans>
100
-
Are you writing in{' '}
101
-
<Text style={[a.font_bold]}>{suggestedLanguageName}</Text>?
102
-
</Trans>
103
-
</RNText>
104
-
}
105
-
value={suggestedLanguage}
106
-
onAccept={onAcceptSuggestedLanguage}
107
-
/>
108
-
)
109
-
} else if (hasSuggestedReplyLanguage) {
110
-
const suggestedLanguageName = codeToLanguageName(
111
-
replyToLanguages[0],
112
-
langPrefs.appLanguage,
113
-
)
114
-
115
-
return (
116
-
<LanguageSuggestionButton
117
-
label={
118
-
<RNText>
119
-
<Trans>
120
-
The post you're replying to was marked as being written in{' '}
121
-
{suggestedLanguageName} by its author. Would you like to reply in{' '}
122
-
<Text style={[a.font_bold]}>{suggestedLanguageName}</Text>?
123
-
</Trans>
124
-
</RNText>
125
-
}
126
-
value={replyToLanguages[0]}
127
-
onAccept={onAcceptSuggestedLanguage}
128
-
/>
129
-
)
130
-
} else {
131
-
return null
132
-
}
133
-
}
134
-
135
-
function LanguageSuggestionButton({
136
-
label,
137
-
value,
138
-
onAccept,
139
-
}: {
140
-
label: React.ReactNode
141
-
value: string
142
-
onAccept: (language: string | null) => void
143
-
}) {
144
-
const t = useTheme()
145
-
const {_} = useLingui()
146
-
147
-
return (
148
-
<View style={[a.px_lg, a.py_sm]}>
149
<View
150
style={[
151
-
a.gap_md,
152
a.border,
153
a.flex_row,
154
a.align_center,
155
a.rounded_sm,
156
-
a.p_md,
157
-
a.pl_lg,
158
t.atoms.bg,
159
-
t.atoms.border_contrast_low,
160
]}>
161
<EarthIcon />
162
-
<View style={[a.flex_1]}>
163
-
<Text
164
-
style={[
165
-
a.flex_1,
166
-
a.leading_snug,
167
-
{
168
-
maxWidth: 400,
169
-
},
170
-
]}>
171
-
{label}
172
-
</Text>
173
-
</View>
174
175
<Button
176
-
size="small"
177
color="secondary"
178
-
onPress={() => onAccept(value)}
179
-
label={_(msg`Accept this language suggestion`)}>
180
<ButtonText>
181
<Trans>Yes</Trans>
182
</ButtonText>
183
</Button>
184
</View>
185
-
</View>
186
-
)
187
}
188
189
/**
···
1
import {useEffect, useState} from 'react'
2
+
import {View} from 'react-native'
3
import {parseLanguage} from '@atproto/api'
4
import {msg, Trans} from '@lingui/macro'
5
import {useLingui} from '@lingui/react'
6
import lande from 'lande'
7
8
import {code3ToCode2Strict, codeToLanguageName} from '#/locale/helpers'
9
+
import {
10
+
toPostLanguages,
11
+
useLanguagePrefs,
12
+
useLanguagePrefsApi,
13
+
} from '#/state/preferences/languages'
14
import {atoms as a, useTheme} from '#/alf'
15
import {Button, ButtonText} from '#/components/Button'
16
import {Earth_Stroke2_Corner2_Rounded as EarthIcon} from '#/components/icons/Globe'
···
22
23
export function SuggestedLanguage({
24
text,
25
+
replyToLanguage: replyToLanguageProp,
26
}: {
27
text: string
28
+
replyToLanguage?: string
29
}) {
30
+
const replyToLanguage = cleanUpLanguage(replyToLanguageProp)
31
const [suggestedLanguage, setSuggestedLanguage] = useState<
32
string | undefined
33
+
>(text.length === 0 ? replyToLanguage : undefined)
34
+
const langPrefs = useLanguagePrefs()
35
+
const setLangPrefs = useLanguagePrefsApi()
36
+
const t = useTheme()
37
+
const {_} = useLingui()
38
39
useEffect(() => {
40
+
// For replies, suggest the language of the post being replied to if no text
41
+
// has been typed yet
42
+
if (replyToLanguage && text.length === 0) {
43
+
setSuggestedLanguage(replyToLanguage)
44
+
return
45
}
46
47
const textTrimmed = text.trim()
48
49
// Don't run the language model on small posts, the results are likely
···
58
})
59
60
return () => cancelIdle(idle)
61
+
}, [text, replyToLanguage])
62
63
+
if (
64
+
suggestedLanguage &&
65
+
!toPostLanguages(langPrefs.postLanguage).includes(suggestedLanguage)
66
+
) {
67
const suggestedLanguageName = codeToLanguageName(
68
suggestedLanguage,
69
langPrefs.appLanguage,
70
)
71
72
return (
73
<View
74
style={[
75
+
t.atoms.border_contrast_low,
76
+
a.gap_sm,
77
a.border,
78
a.flex_row,
79
a.align_center,
80
a.rounded_sm,
81
+
a.px_lg,
82
+
a.py_md,
83
+
a.mx_md,
84
+
a.my_sm,
85
t.atoms.bg,
86
]}>
87
<EarthIcon />
88
+
<Text style={[a.flex_1]}>
89
+
<Trans>
90
+
Are you writing in{' '}
91
+
<Text style={[a.font_semi_bold]}>{suggestedLanguageName}</Text>?
92
+
</Trans>
93
+
</Text>
94
95
<Button
96
color="secondary"
97
+
size="small"
98
+
variant="solid"
99
+
onPress={() => setLangPrefs.setPostLanguage(suggestedLanguage)}
100
+
label={_(msg`Change post language to ${suggestedLanguageName}`)}>
101
<ButtonText>
102
<Trans>Yes</Trans>
103
</ButtonText>
104
</Button>
105
</View>
106
+
)
107
+
} else {
108
+
return null
109
+
}
110
}
111
112
/**
+1
-1
src/view/com/composer/text-input/web/TagDecorator.ts
+1
-1
src/view/com/composer/text-input/web/TagDecorator.ts
+1
-1
src/view/com/posts/PostFeedErrorMessage.tsx
+1
-1
src/view/com/posts/PostFeedErrorMessage.tsx
+2
src/view/screens/ModerationMutedAccounts.tsx
+2
src/view/screens/ModerationMutedAccounts.tsx
···
2
import {type StyleProp, View, type ViewStyle} from 'react-native'
3
import {type AppBskyActorDefs as ActorDefs} from '@atproto/api'
4
import {Trans} from '@lingui/macro'
5
import {useFocusEffect} from '@react-navigation/native'
6
import {type NativeStackScreenProps} from '@react-navigation/native-stack'
7
···
26
export function ModerationMutedAccounts({}: Props) {
27
const t = useTheme()
28
const moderationOpts = useModerationOpts()
29
const setMinimalShellMode = useSetMinimalShellMode()
30
31
const [isPTRing, setIsPTRing] = useState(false)
···
2
import {type StyleProp, View, type ViewStyle} from 'react-native'
3
import {type AppBskyActorDefs as ActorDefs} from '@atproto/api'
4
import {Trans} from '@lingui/macro'
5
+
import {useLingui} from '@lingui/react'
6
import {useFocusEffect} from '@react-navigation/native'
7
import {type NativeStackScreenProps} from '@react-navigation/native-stack'
8
···
27
export function ModerationMutedAccounts({}: Props) {
28
const t = useTheme()
29
const moderationOpts = useModerationOpts()
30
+
const {_} = useLingui()
31
const setMinimalShellMode = useSetMinimalShellMode()
32
33
const [isPTRing, setIsPTRing] = useState(false)
+2
src/view/screens/ProfileFeedLikedBy.tsx
+2
src/view/screens/ProfileFeedLikedBy.tsx
···
1
import {useCallback} from 'react'
2
import {Trans} from '@lingui/macro'
3
import {useFocusEffect} from '@react-navigation/native'
4
5
import {
···
16
const setMinimalShellMode = useSetMinimalShellMode()
17
const {name, rkey} = route.params
18
const uri = makeRecordUri(name, 'app.bsky.feed.generator', rkey)
19
20
useFocusEffect(
21
useCallback(() => {
···
1
import {useCallback} from 'react'
2
import {Trans} from '@lingui/macro'
3
+
import {useLingui} from '@lingui/react'
4
import {useFocusEffect} from '@react-navigation/native'
5
6
import {
···
17
const setMinimalShellMode = useSetMinimalShellMode()
18
const {name, rkey} = route.params
19
const uri = makeRecordUri(name, 'app.bsky.feed.generator', rkey)
20
+
const {_} = useLingui()
21
22
useFocusEffect(
23
useCallback(() => {
+3
-74
src/view/screens/Storybook/Admonitions.tsx
+3
-74
src/view/screens/Storybook/Admonitions.tsx
···
1
-
import {Text as RNText, View} from 'react-native'
2
-
import {msg, Trans} from '@lingui/macro'
3
-
import {useLingui} from '@lingui/react'
4
5
-
import {atoms as a, useTheme} from '#/alf'
6
-
import {
7
-
Admonition,
8
-
Button as AdmonitionButton,
9
-
Content as AdmonitionContent,
10
-
Icon as AdmonitionIcon,
11
-
Outer as AdmonitionOuter,
12
-
Row as AdmonitionRow,
13
-
Text as AdmonitionText,
14
-
} from '#/components/Admonition'
15
-
import {ButtonIcon, ButtonText} from '#/components/Button'
16
-
import {ArrowRotateCounterClockwise_Stroke2_Corner0_Rounded as Retry} from '#/components/icons/ArrowRotateCounterClockwise'
17
-
import {BellRinging_Filled_Corner0_Rounded as BellRingingFilledIcon} from '#/components/icons/BellRinging'
18
import {InlineLinkText} from '#/components/Link'
19
import {H1} from '#/components/Typography'
20
21
export function Admonitions() {
22
-
const {_} = useLingui()
23
-
const t = useTheme()
24
-
25
return (
26
<View style={[a.gap_md]}>
27
<H1>Admonitions</H1>
···
46
<Admonition type="error">
47
The quick brown fox jumps over the lazy dog.
48
</Admonition>
49
-
50
-
<AdmonitionOuter type="error">
51
-
<AdmonitionRow>
52
-
<AdmonitionIcon />
53
-
<AdmonitionContent>
54
-
<AdmonitionText>
55
-
<Trans>Something went wrong, please try again</Trans>
56
-
</AdmonitionText>
57
-
</AdmonitionContent>
58
-
<AdmonitionButton
59
-
color="negative_subtle"
60
-
label={_(msg`Retry loading report options`)}
61
-
onPress={() => {}}>
62
-
<ButtonText>
63
-
<Trans>Retry</Trans>
64
-
</ButtonText>
65
-
<ButtonIcon icon={Retry} />
66
-
</AdmonitionButton>
67
-
</AdmonitionRow>
68
-
</AdmonitionOuter>
69
-
70
-
<AdmonitionOuter type="tip">
71
-
<AdmonitionRow>
72
-
<AdmonitionIcon />
73
-
<AdmonitionContent>
74
-
<AdmonitionText>
75
-
<Trans>
76
-
Enable notifications for an account by visiting their profile
77
-
and pressing the{' '}
78
-
<RNText style={[a.font_bold, t.atoms.text_contrast_high]}>
79
-
bell icon
80
-
</RNText>{' '}
81
-
<BellRingingFilledIcon
82
-
size="xs"
83
-
style={t.atoms.text_contrast_high}
84
-
/>
85
-
.
86
-
</Trans>
87
-
</AdmonitionText>
88
-
<AdmonitionText>
89
-
<Trans>
90
-
If you want to restrict who can receive notifications for your
91
-
account's activity, you can change this in{' '}
92
-
<InlineLinkText
93
-
label={_(msg`Privacy and Security settings`)}
94
-
to={{screen: 'ActivityPrivacySettings'}}
95
-
style={[a.font_bold]}>
96
-
Settings → Privacy and Security
97
-
</InlineLinkText>
98
-
.
99
-
</Trans>
100
-
</AdmonitionText>
101
-
</AdmonitionContent>
102
-
</AdmonitionRow>
103
-
</AdmonitionOuter>
104
</View>
105
)
106
}
···
1
+
import {View} from 'react-native'
2
3
+
import {atoms as a} from '#/alf'
4
+
import {Admonition} from '#/components/Admonition'
5
import {InlineLinkText} from '#/components/Link'
6
import {H1} from '#/components/Typography'
7
8
export function Admonitions() {
9
return (
10
<View style={[a.gap_md]}>
11
<H1>Admonitions</H1>
···
30
<Admonition type="error">
31
The quick brown fox jumps over the lazy dog.
32
</Admonition>
33
</View>
34
)
35
}
-25
src/view/screens/Storybook/Buttons.tsx
-25
src/view/screens/Storybook/Buttons.tsx
···
8
ButtonIcon,
9
type ButtonSize,
10
ButtonText,
11
-
StackedButton,
12
} from '#/components/Button'
13
import {ChevronLeft_Stroke2_Corner0_Rounded as ChevronLeft} from '#/components/icons/Chevron'
14
import {Globe_Stroke2_Corner0_Rounded as Globe} from '#/components/icons/Globe'
···
18
return (
19
<View style={[a.gap_md]}>
20
<Text style={[a.font_bold, a.text_5xl]}>Buttons</Text>
21
-
22
-
<View style={[a.flex_row, a.gap_md, a.align_start, {maxWidth: 350}]}>
23
-
<StackedButton
24
-
label="stacked"
25
-
icon={Globe}
26
-
color="secondary"
27
-
style={[a.flex_1]}>
28
-
Bop it
29
-
</StackedButton>
30
-
<StackedButton
31
-
label="stacked"
32
-
icon={Globe}
33
-
color="negative_subtle"
34
-
style={[a.flex_1]}>
35
-
Twist it
36
-
</StackedButton>
37
-
<StackedButton
38
-
label="stacked"
39
-
icon={Globe}
40
-
color="primary"
41
-
style={[a.flex_1]}>
42
-
Pull it
43
-
</StackedButton>
44
-
</View>
45
46
{[
47
'primary',
···
8
ButtonIcon,
9
type ButtonSize,
10
ButtonText,
11
} from '#/components/Button'
12
import {ChevronLeft_Stroke2_Corner0_Rounded as ChevronLeft} from '#/components/icons/Chevron'
13
import {Globe_Stroke2_Corner0_Rounded as Globe} from '#/components/icons/Globe'
···
17
return (
18
<View style={[a.gap_md]}>
19
<Text style={[a.font_bold, a.text_5xl]}>Buttons</Text>
20
21
{[
22
'primary',
+12
-48
yarn.lock
+12
-48
yarn.lock
···
77
tlds "^1.234.0"
78
zod "^3.23.8"
79
80
-
"@atproto/api@^0.17.0":
81
-
version "0.17.0"
82
-
resolved "https://registry.yarnpkg.com/@atproto/api/-/api-0.17.0.tgz#1fe87ef703f8020dbe00bb5e5cc18622b8b91f4a"
83
-
integrity sha512-FNS9SW7/3kslAnJH7F4fO9/jPjXzC0NMD6u9NjJ/h4EnaIEpWHZQPkmD9Q2hvAwD6+Uo2boYZEPKkOa55Lr5Dg==
84
-
dependencies:
85
-
"@atproto/common-web" "^0.4.3"
86
-
"@atproto/lexicon" "^0.5.1"
87
-
"@atproto/syntax" "^0.4.1"
88
-
"@atproto/xrpc" "^0.7.5"
89
-
await-lock "^2.2.2"
90
-
multiformats "^9.9.0"
91
-
tlds "^1.234.0"
92
-
zod "^3.23.8"
93
-
94
"@atproto/aws@^0.2.28":
95
version "0.2.28"
96
resolved "https://registry.yarnpkg.com/@atproto/aws/-/aws-0.2.28.tgz#17bd88a6276e323ebb094a3f01bd94b1173a29a4"
···
184
uint8arrays "3.0.0"
185
zod "^3.23.8"
186
187
-
"@atproto/common-web@^0.4.3":
188
-
version "0.4.3"
189
-
resolved "https://registry.yarnpkg.com/@atproto/common-web/-/common-web-0.4.3.tgz#b4480220b5682db09da45f4ef906eb7619c838b5"
190
-
integrity sha512-nRDINmSe4VycJzPo6fP/hEltBcULFxt9Kw7fQk6405FyAWZiTluYHlXOnU7GkQfeUK44OENG1qFTBcmCJ7e8pg==
191
-
dependencies:
192
-
graphemer "^1.4.0"
193
-
multiformats "^9.9.0"
194
-
uint8arrays "3.0.0"
195
-
zod "^3.23.8"
196
-
197
"@atproto/common@0.1.0":
198
version "0.1.0"
199
resolved "https://registry.yarnpkg.com/@atproto/common/-/common-0.1.0.tgz#4216a8fef5b985ab62ac21252a0f8ca0f4a0f210"
···
322
integrity sha512-3aAzEAy9EAPs3CxznzMhEcqDd7m3vz1eze/ya9/ThbB7yleqJIhz5GY2q76tCCwHPhn5qDDMhlA9kKV6fG23gA==
323
dependencies:
324
"@atproto/common-web" "^0.4.2"
325
-
"@atproto/syntax" "^0.4.1"
326
-
iso-datestring-validator "^2.2.2"
327
-
multiformats "^9.9.0"
328
-
zod "^3.23.8"
329
-
330
-
"@atproto/lexicon@^0.5.1":
331
-
version "0.5.1"
332
-
resolved "https://registry.yarnpkg.com/@atproto/lexicon/-/lexicon-0.5.1.tgz#e9b7d5c70dc5a38518a8069cd80fea77ab526947"
333
-
integrity sha512-y8AEtYmfgVl4fqFxqXAeGvhesiGkxiy3CWoJIfsFDDdTlZUC8DFnZrYhcqkIop3OlCkkljvpSJi1hbeC1tbi8A==
334
-
dependencies:
335
-
"@atproto/common-web" "^0.4.3"
336
"@atproto/syntax" "^0.4.1"
337
iso-datestring-validator "^2.2.2"
338
multiformats "^9.9.0"
···
549
integrity sha512-sDi68+QE1XHegTaNAndlX41Gp827pouSzSs8CyAwhrqZdsJUxE3P7TMtrA0z+zAjvxVyvzscRc0TsN/fGUGrhw==
550
dependencies:
551
"@atproto/lexicon" "^0.5.0"
552
-
zod "^3.23.8"
553
-
554
-
"@atproto/xrpc@^0.7.5":
555
-
version "0.7.5"
556
-
resolved "https://registry.yarnpkg.com/@atproto/xrpc/-/xrpc-0.7.5.tgz#40cef1a657b5f28af8ebec9e3dac5872e58e88ea"
557
-
integrity sha512-MUYNn5d2hv8yVegRL0ccHvTHAVj5JSnW07bkbiaz96UH45lvYNRVwt44z+yYVnb0/mvBzyD3/ZQ55TRGt7fHkA==
558
-
dependencies:
559
-
"@atproto/lexicon" "^0.5.1"
560
zod "^3.23.8"
561
562
"@aws-crypto/crc32@3.0.0":
···
8646
dependencies:
8647
"@babel/helper-define-polyfill-provider" "^0.6.3"
8648
8649
-
babel-plugin-react-compiler@^19.1.0-rc.2, babel-plugin-react-compiler@^19.1.0-rc.3:
8650
version "19.1.0-rc.3"
8651
resolved "https://registry.yarnpkg.com/babel-plugin-react-compiler/-/babel-plugin-react-compiler-19.1.0-rc.3.tgz#45e5a282a2460b3701971e5eb8310a90a7919022"
8652
integrity sha512-mjRn69WuTz4adL0bXGx8Rsyk1086zFJeKmes6aK0xPuK3aaXmDJdLHqwKKMrpm6KAI1MCoUK72d2VeqQbu8YIA==
···
10860
dependencies:
10861
"@typescript-eslint/utils" "^5.61.0"
10862
10863
-
eslint-plugin-react-compiler@^19.1.0-rc.2:
10864
-
version "19.1.0-rc.2"
10865
-
resolved "https://registry.yarnpkg.com/eslint-plugin-react-compiler/-/eslint-plugin-react-compiler-19.1.0-rc.2.tgz#83343e7422e00fa61e729af8e8468f0ddec37925"
10866
-
integrity sha512-oKalwDGcD+RX9mf3NEO4zOoUMeLvjSvcbbEOpquzmzqEEM2MQdp7/FY/Hx9NzmUwFzH1W9SKTz5fihfMldpEYw==
10867
dependencies:
10868
"@babel/core" "^7.24.4"
10869
"@babel/parser" "^7.24.4"
···
77
tlds "^1.234.0"
78
zod "^3.23.8"
79
80
"@atproto/aws@^0.2.28":
81
version "0.2.28"
82
resolved "https://registry.yarnpkg.com/@atproto/aws/-/aws-0.2.28.tgz#17bd88a6276e323ebb094a3f01bd94b1173a29a4"
···
170
uint8arrays "3.0.0"
171
zod "^3.23.8"
172
173
"@atproto/common@0.1.0":
174
version "0.1.0"
175
resolved "https://registry.yarnpkg.com/@atproto/common/-/common-0.1.0.tgz#4216a8fef5b985ab62ac21252a0f8ca0f4a0f210"
···
298
integrity sha512-3aAzEAy9EAPs3CxznzMhEcqDd7m3vz1eze/ya9/ThbB7yleqJIhz5GY2q76tCCwHPhn5qDDMhlA9kKV6fG23gA==
299
dependencies:
300
"@atproto/common-web" "^0.4.2"
301
"@atproto/syntax" "^0.4.1"
302
iso-datestring-validator "^2.2.2"
303
multiformats "^9.9.0"
···
514
integrity sha512-sDi68+QE1XHegTaNAndlX41Gp827pouSzSs8CyAwhrqZdsJUxE3P7TMtrA0z+zAjvxVyvzscRc0TsN/fGUGrhw==
515
dependencies:
516
"@atproto/lexicon" "^0.5.0"
517
zod "^3.23.8"
518
519
"@aws-crypto/crc32@3.0.0":
···
8603
dependencies:
8604
"@babel/helper-define-polyfill-provider" "^0.6.3"
8605
8606
+
babel-plugin-react-compiler@^19.1.0-rc.1:
8607
+
version "19.1.0-rc.1"
8608
+
resolved "https://registry.yarnpkg.com/babel-plugin-react-compiler/-/babel-plugin-react-compiler-19.1.0-rc.1.tgz#99d131be61017e40abbaedd98321069bf8b7e54a"
8609
+
integrity sha512-M4fpG+Hfq5gWzsJeeMErdRokzg0fdJ8IAk+JDhfB/WLT+U3WwJWR8edphypJrk447/JEvYu6DBFwsTn10bMW4Q==
8610
+
dependencies:
8611
+
"@babel/types" "^7.26.0"
8612
+
8613
+
babel-plugin-react-compiler@^19.1.0-rc.2:
8614
version "19.1.0-rc.3"
8615
resolved "https://registry.yarnpkg.com/babel-plugin-react-compiler/-/babel-plugin-react-compiler-19.1.0-rc.3.tgz#45e5a282a2460b3701971e5eb8310a90a7919022"
8616
integrity sha512-mjRn69WuTz4adL0bXGx8Rsyk1086zFJeKmes6aK0xPuK3aaXmDJdLHqwKKMrpm6KAI1MCoUK72d2VeqQbu8YIA==
···
10824
dependencies:
10825
"@typescript-eslint/utils" "^5.61.0"
10826
10827
+
eslint-plugin-react-compiler@^19.1.0-rc.1:
10828
+
version "19.1.0-rc.1"
10829
+
resolved "https://registry.yarnpkg.com/eslint-plugin-react-compiler/-/eslint-plugin-react-compiler-19.1.0-rc.1.tgz#e974ba9541c9a4464d77723e0505b5742bc22e56"
10830
+
integrity sha512-3umw5eqZXapBl7aQGmvcjheKhUbsElb9jTETxRZg371e1LG4EPs/zCHt2JzP+wNcdaZWzjU/R730zPUJblY2zw==
10831
dependencies:
10832
"@babel/core" "^7.24.4"
10833
"@babel/parser" "^7.24.4"