deer social fork for personal usage. but you might see a use idk. github mirror

Compare changes

Choose any two refs to compare.

Changed files
+1727 -511
bskyembed
patches
src
components
lib
statsig
locale
locales
logger
screens
Onboarding
state
session
view
com
profile
shell
+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
··· 4 4 "type": "module", 5 5 "scripts": { 6 6 "dev": "vite", 7 + "dev-snippet": "tsc --project tsconfig.snippet.json && serve -s dist -p 3000 -n", 7 8 "build": "tsc && vite build", 8 9 "build-snippet": "tsc --project tsconfig.snippet.json", 9 10 "lint": "eslint --cache --ext .js,.jsx,.ts,.tsx src", ··· 21 22 "eslint-config-preact": "^1.3.0", 22 23 "eslint-plugin-simple-import-sort": "^12.0.0", 23 24 "postcss": "^8.4.38", 25 + "serve": "^14.2.5", 24 26 "tailwindcss": "^3.4.3", 25 27 "terser": "^5.43.1", 26 28 "typescript": "^5.8.3",
+11 -1
bskyembed/snippet/embed.ts
··· 3 3 bluesky: { 4 4 scan: (element?: Pick<Element, 'querySelectorAll'>) => void 5 5 } 6 + BSKY_DEV_EMBED_URL?: string 6 7 } 7 8 8 - const EMBED_URL = 'https://embed.bsky.app' 9 + /** 10 + * Allow url to be overwritten during development 11 + */ 12 + const IS_DEV = 13 + window.location.protocol === 'file:' || 14 + window.location.hostname === 'localhost' 15 + const EMBED_URL = 16 + IS_DEV && window.BSKY_DEV_EMBED_URL 17 + ? window.BSKY_DEV_EMBED_URL 18 + : 'https://embed.bsky.app' 9 19 10 20 window.bluesky = window.bluesky || { 11 21 scan,
+1054
bskyembed/test.html
··· 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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 + &mdash; 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&#x27;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 + &mdash; 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 + &mdash; 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 + &mdash; 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
··· 1 + import fs from 'node:fs' 1 2 import {resolve} from 'node:path' 2 3 3 4 import preact from '@preact/preset-vite' 4 5 import legacy from '@vitejs/plugin-legacy' 5 - import type {UserConfig} from 'vite' 6 + import type {Plugin, UserConfig} from 'vite' 6 7 import paths from 'vite-tsconfig-paths' 7 8 9 + /** 10 + * World's hackiest router, for dev only. Serves `/post.html` to requests that start with `/embed/` 11 + */ 12 + function devOnlyRouter(): Plugin { 13 + return { 14 + name: 'embed-to-post-html', 15 + configureServer(server) { 16 + server.middlewares.use((req, res, next) => { 17 + const url = req.url || '' 18 + if (!url.startsWith('/embed/')) return next() 19 + 20 + const html = fs.readFileSync( 21 + resolve(process.cwd(), 'post.html'), 22 + 'utf8', 23 + ) 24 + 25 + server 26 + .transformIndexHtml(url, html) 27 + .then(transformed => { 28 + res.statusCode = 200 29 + res.setHeader('Content-Type', 'text/html') 30 + res.end(transformed) 31 + }) 32 + .catch(next) 33 + }) 34 + }, 35 + } 36 + } 37 + 8 38 const config: UserConfig = { 9 39 plugins: [ 10 40 preact(), ··· 12 42 legacy({ 13 43 targets: ['defaults', 'not IE 11'], 14 44 }), 45 + devOnlyRouter(), 15 46 ], 16 47 build: { 17 48 assetsDir: 'static',
+376 -5
bskyembed/yarn.lock
··· 1447 1447 regenerator-runtime "^0.14.1" 1448 1448 systemjs "^6.15.1" 1449 1449 1450 + "@zeit/schemas@2.36.0": 1451 + version "2.36.0" 1452 + resolved "https://registry.yarnpkg.com/@zeit/schemas/-/schemas-2.36.0.tgz#7a1b53f4091e18d0b404873ea3e3c83589c765f2" 1453 + integrity sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg== 1454 + 1450 1455 acorn-jsx@^5.3.2: 1451 1456 version "5.3.2" 1452 1457 resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" ··· 1461 1466 version "8.11.3" 1462 1467 resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" 1463 1468 integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== 1469 + 1470 + ajv@8.12.0: 1471 + version "8.12.0" 1472 + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" 1473 + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== 1474 + dependencies: 1475 + fast-deep-equal "^3.1.1" 1476 + json-schema-traverse "^1.0.0" 1477 + require-from-string "^2.0.2" 1478 + uri-js "^4.2.2" 1464 1479 1465 1480 ajv@^6.12.4: 1466 1481 version "6.12.6" ··· 1472 1487 json-schema-traverse "^0.4.1" 1473 1488 uri-js "^4.2.2" 1474 1489 1490 + ansi-align@^3.0.1: 1491 + version "3.0.1" 1492 + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" 1493 + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== 1494 + dependencies: 1495 + string-width "^4.1.0" 1496 + 1475 1497 ansi-regex@^5.0.1: 1476 1498 version "5.0.1" 1477 1499 resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" ··· 1507 1529 normalize-path "^3.0.0" 1508 1530 picomatch "^2.0.4" 1509 1531 1510 - arg@^5.0.2: 1532 + arch@^2.2.0: 1533 + version "2.2.0" 1534 + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" 1535 + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== 1536 + 1537 + arg@5.0.2, arg@^5.0.2: 1511 1538 version "5.0.2" 1512 1539 resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" 1513 1540 integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== ··· 1684 1711 resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" 1685 1712 integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== 1686 1713 1714 + boxen@7.0.0: 1715 + version "7.0.0" 1716 + resolved "https://registry.yarnpkg.com/boxen/-/boxen-7.0.0.tgz#9e5f8c26e716793fc96edcf7cf754cdf5e3fbf32" 1717 + integrity sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg== 1718 + dependencies: 1719 + ansi-align "^3.0.1" 1720 + camelcase "^7.0.0" 1721 + chalk "^5.0.1" 1722 + cli-boxes "^3.0.0" 1723 + string-width "^5.1.2" 1724 + type-fest "^2.13.0" 1725 + widest-line "^4.0.1" 1726 + wrap-ansi "^8.0.1" 1727 + 1687 1728 brace-expansion@^1.1.7: 1688 1729 version "1.1.11" 1689 1730 resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" ··· 1738 1779 resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 1739 1780 integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 1740 1781 1782 + bytes@3.0.0: 1783 + version "3.0.0" 1784 + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 1785 + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== 1786 + 1787 + bytes@3.1.2: 1788 + version "3.1.2" 1789 + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 1790 + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 1791 + 1741 1792 call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: 1742 1793 version "1.0.7" 1743 1794 resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" ··· 1759 1810 resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" 1760 1811 integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== 1761 1812 1813 + camelcase@^7.0.0: 1814 + version "7.0.1" 1815 + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-7.0.1.tgz#f02e50af9fd7782bc8b88a3558c32fd3a388f048" 1816 + integrity sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw== 1817 + 1762 1818 caniuse-lite@^1.0.30001524: 1763 1819 version "1.0.30001606" 1764 1820 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001606.tgz#b4d5f67ab0746a3b8b5b6d1f06e39c51beb39a9e" ··· 1769 1825 resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz#22e9706422ad37aa50556af8c10e40e2d93a8b85" 1770 1826 integrity sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q== 1771 1827 1772 - chalk@^4.0.0: 1828 + chalk-template@0.4.0: 1829 + version "0.4.0" 1830 + resolved "https://registry.yarnpkg.com/chalk-template/-/chalk-template-0.4.0.tgz#692c034d0ed62436b9062c1707fadcd0f753204b" 1831 + integrity sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg== 1832 + dependencies: 1833 + chalk "^4.1.2" 1834 + 1835 + chalk@5.0.1: 1836 + version "5.0.1" 1837 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" 1838 + integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== 1839 + 1840 + chalk@^4.0.0, chalk@^4.1.2: 1773 1841 version "4.1.2" 1774 1842 resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 1775 1843 integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== ··· 1777 1845 ansi-styles "^4.1.0" 1778 1846 supports-color "^7.1.0" 1779 1847 1848 + chalk@^5.0.1: 1849 + version "5.6.2" 1850 + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.6.2.tgz#b1238b6e23ea337af71c7f8a295db5af0c158aea" 1851 + integrity sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA== 1852 + 1780 1853 chokidar@^3.5.3: 1781 1854 version "3.6.0" 1782 1855 resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" ··· 1792 1865 optionalDependencies: 1793 1866 fsevents "~2.3.2" 1794 1867 1868 + cli-boxes@^3.0.0: 1869 + version "3.0.0" 1870 + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" 1871 + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== 1872 + 1873 + clipboardy@3.0.0: 1874 + version "3.0.0" 1875 + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-3.0.0.tgz#f3876247404d334c9ed01b6f269c11d09a5e3092" 1876 + integrity sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg== 1877 + dependencies: 1878 + arch "^2.2.0" 1879 + execa "^5.1.1" 1880 + is-wsl "^2.2.0" 1881 + 1795 1882 color-convert@^2.0.1: 1796 1883 version "2.0.1" 1797 1884 resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" ··· 1814 1901 resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" 1815 1902 integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== 1816 1903 1904 + compressible@~2.0.18: 1905 + version "2.0.18" 1906 + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" 1907 + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== 1908 + dependencies: 1909 + mime-db ">= 1.43.0 < 2" 1910 + 1911 + compression@1.8.1: 1912 + version "1.8.1" 1913 + resolved "https://registry.yarnpkg.com/compression/-/compression-1.8.1.tgz#4a45d909ac16509195a9a28bd91094889c180d79" 1914 + integrity sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w== 1915 + dependencies: 1916 + bytes "3.1.2" 1917 + compressible "~2.0.18" 1918 + debug "2.6.9" 1919 + negotiator "~0.6.4" 1920 + on-headers "~1.1.0" 1921 + safe-buffer "5.2.1" 1922 + vary "~1.1.2" 1923 + 1817 1924 concat-map@0.0.1: 1818 1925 version "0.0.1" 1819 1926 resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1820 1927 integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 1928 + 1929 + content-disposition@0.5.2: 1930 + version "0.5.2" 1931 + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 1932 + integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== 1821 1933 1822 1934 convert-source-map@^2.0.0: 1823 1935 version "2.0.0" ··· 1845 1957 shebang-command "^2.0.0" 1846 1958 which "^2.0.1" 1847 1959 1960 + cross-spawn@^7.0.3: 1961 + version "7.0.6" 1962 + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" 1963 + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 1964 + dependencies: 1965 + path-key "^3.1.0" 1966 + shebang-command "^2.0.0" 1967 + which "^2.0.1" 1968 + 1848 1969 css-select@^5.1.0: 1849 1970 version "5.2.2" 1850 1971 resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.2.2.tgz#01b6e8d163637bb2dd6c982ca4ed65863682786e" ··· 1893 2014 es-errors "^1.3.0" 1894 2015 is-data-view "^1.0.1" 1895 2016 2017 + debug@2.6.9: 2018 + version "2.6.9" 2019 + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 2020 + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 2021 + dependencies: 2022 + ms "2.0.0" 2023 + 1896 2024 debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4, debug@^4.4.1: 1897 2025 version "4.4.1" 1898 2026 resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" ··· 1906 2034 integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 1907 2035 dependencies: 1908 2036 ms "2.1.2" 2037 + 2038 + deep-extend@^0.6.0: 2039 + version "0.6.0" 2040 + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 2041 + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 1909 2042 1910 2043 deep-is@^0.1.3: 1911 2044 version "0.1.4" ··· 2356 2489 resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 2357 2490 integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 2358 2491 2492 + execa@^5.1.1: 2493 + version "5.1.1" 2494 + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 2495 + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 2496 + dependencies: 2497 + cross-spawn "^7.0.3" 2498 + get-stream "^6.0.0" 2499 + human-signals "^2.1.0" 2500 + is-stream "^2.0.0" 2501 + merge-stream "^2.0.0" 2502 + npm-run-path "^4.0.1" 2503 + onetime "^5.1.2" 2504 + signal-exit "^3.0.3" 2505 + strip-final-newline "^2.0.0" 2506 + 2359 2507 fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 2360 2508 version "3.1.3" 2361 2509 resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" ··· 2496 2644 has-symbols "^1.0.3" 2497 2645 hasown "^2.0.0" 2498 2646 2647 + get-stream@^6.0.0: 2648 + version "6.0.1" 2649 + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 2650 + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 2651 + 2499 2652 get-symbol-description@^1.0.2: 2500 2653 version "1.0.2" 2501 2654 resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" ··· 2631 2784 resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 2632 2785 integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 2633 2786 2787 + human-signals@^2.1.0: 2788 + version "2.1.0" 2789 + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 2790 + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 2791 + 2634 2792 ignore@^5.2.0: 2635 2793 version "5.3.1" 2636 2794 resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" ··· 2661 2819 version "2.0.4" 2662 2820 resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 2663 2821 integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 2822 + 2823 + ini@~1.3.0: 2824 + version "1.3.8" 2825 + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 2826 + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 2664 2827 2665 2828 internal-slot@^1.0.7: 2666 2829 version "1.0.7" ··· 2741 2904 dependencies: 2742 2905 has-tostringtag "^1.0.0" 2743 2906 2907 + is-docker@^2.0.0: 2908 + version "2.2.1" 2909 + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" 2910 + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== 2911 + 2744 2912 is-extglob@^2.1.1: 2745 2913 version "2.1.1" 2746 2914 resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" ··· 2799 2967 resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 2800 2968 integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 2801 2969 2970 + is-port-reachable@4.0.0: 2971 + version "4.0.0" 2972 + resolved "https://registry.yarnpkg.com/is-port-reachable/-/is-port-reachable-4.0.0.tgz#dac044091ef15319c8ab2f34604d8794181f8c2d" 2973 + integrity sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig== 2974 + 2802 2975 is-regex@^1.1.4: 2803 2976 version "1.1.4" 2804 2977 resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" ··· 2819 2992 dependencies: 2820 2993 call-bind "^1.0.7" 2821 2994 2995 + is-stream@^2.0.0: 2996 + version "2.0.1" 2997 + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 2998 + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 2999 + 2822 3000 is-string@^1.0.5, is-string@^1.0.7: 2823 3001 version "1.0.7" 2824 3002 resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" ··· 2859 3037 dependencies: 2860 3038 call-bind "^1.0.7" 2861 3039 get-intrinsic "^1.2.4" 3040 + 3041 + is-wsl@^2.2.0: 3042 + version "2.2.0" 3043 + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" 3044 + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== 3045 + dependencies: 3046 + is-docker "^2.0.0" 2862 3047 2863 3048 isarray@^2.0.5: 2864 3049 version "2.0.5" ··· 2932 3117 resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 2933 3118 integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 2934 3119 3120 + json-schema-traverse@^1.0.0: 3121 + version "1.0.0" 3122 + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" 3123 + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== 3124 + 2935 3125 json-stable-stringify-without-jsonify@^1.0.1: 2936 3126 version "1.0.1" 2937 3127 resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" ··· 3047 3237 resolved "https://registry.yarnpkg.com/meow/-/meow-13.2.0.tgz#6b7d63f913f984063b3cc261b6e8800c4cd3474f" 3048 3238 integrity sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA== 3049 3239 3240 + merge-stream@^2.0.0: 3241 + version "2.0.0" 3242 + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 3243 + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 3244 + 3050 3245 merge2@^1.3.0, merge2@^1.4.1: 3051 3246 version "1.4.1" 3052 3247 resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" ··· 3060 3255 braces "^3.0.2" 3061 3256 picomatch "^2.3.1" 3062 3257 3063 - minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 3258 + "mime-db@>= 1.43.0 < 2": 3259 + version "1.54.0" 3260 + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" 3261 + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== 3262 + 3263 + mime-db@~1.33.0: 3264 + version "1.33.0" 3265 + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" 3266 + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== 3267 + 3268 + mime-types@2.1.18: 3269 + version "2.1.18" 3270 + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" 3271 + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== 3272 + dependencies: 3273 + mime-db "~1.33.0" 3274 + 3275 + mimic-fn@^2.1.0: 3276 + version "2.1.0" 3277 + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 3278 + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 3279 + 3280 + minimatch@3.1.2, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: 3064 3281 version "3.1.2" 3065 3282 resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 3066 3283 integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== ··· 3074 3291 dependencies: 3075 3292 brace-expansion "^2.0.1" 3076 3293 3294 + minimist@^1.2.0: 3295 + version "1.2.8" 3296 + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 3297 + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 3298 + 3077 3299 "minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.4: 3078 3300 version "7.0.4" 3079 3301 resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" 3080 3302 integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== 3303 + 3304 + ms@2.0.0: 3305 + version "2.0.0" 3306 + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 3307 + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 3081 3308 3082 3309 ms@2.1.2: 3083 3310 version "2.1.2" ··· 3118 3345 resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 3119 3346 integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 3120 3347 3348 + negotiator@~0.6.4: 3349 + version "0.6.4" 3350 + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" 3351 + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== 3352 + 3121 3353 node-html-parser@^6.1.12: 3122 3354 version "6.1.13" 3123 3355 resolved "https://registry.yarnpkg.com/node-html-parser/-/node-html-parser-6.1.13.tgz#a1df799b83df5c6743fcd92740ba14682083b7e4" ··· 3141 3373 resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" 3142 3374 integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== 3143 3375 3376 + npm-run-path@^4.0.1: 3377 + version "4.0.1" 3378 + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 3379 + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 3380 + dependencies: 3381 + path-key "^3.0.0" 3382 + 3144 3383 nth-check@^2.0.1: 3145 3384 version "2.1.1" 3146 3385 resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" ··· 3215 3454 define-properties "^1.2.1" 3216 3455 es-object-atoms "^1.0.0" 3217 3456 3457 + on-headers@~1.1.0: 3458 + version "1.1.0" 3459 + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.1.0.tgz#59da4f91c45f5f989c6e4bcedc5a3b0aed70ff65" 3460 + integrity sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A== 3461 + 3218 3462 once@^1.3.0: 3219 3463 version "1.4.0" 3220 3464 resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 3221 3465 integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 3222 3466 dependencies: 3223 3467 wrappy "1" 3468 + 3469 + onetime@^5.1.2: 3470 + version "5.1.2" 3471 + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 3472 + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 3473 + dependencies: 3474 + mimic-fn "^2.1.0" 3224 3475 3225 3476 optionator@^0.9.3: 3226 3477 version "0.9.3" ··· 3265 3516 resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 3266 3517 integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 3267 3518 3268 - path-key@^3.1.0: 3519 + path-is-inside@1.0.2: 3520 + version "1.0.2" 3521 + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 3522 + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== 3523 + 3524 + path-key@^3.0.0, path-key@^3.1.0: 3269 3525 version "3.1.1" 3270 3526 resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 3271 3527 integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== ··· 3282 3538 dependencies: 3283 3539 lru-cache "^10.2.0" 3284 3540 minipass "^5.0.0 || ^6.0.2 || ^7.0.0" 3541 + 3542 + path-to-regexp@3.3.0: 3543 + version "3.3.0" 3544 + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-3.3.0.tgz#f7f31d32e8518c2660862b644414b6d5c63a611b" 3545 + integrity sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw== 3285 3546 3286 3547 path-type@^4.0.0: 3287 3548 version "4.0.0" ··· 3409 3670 resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" 3410 3671 integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== 3411 3672 3673 + range-parser@1.2.0: 3674 + version "1.2.0" 3675 + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 3676 + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== 3677 + 3678 + rc@^1.0.1, rc@^1.1.6: 3679 + version "1.2.8" 3680 + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 3681 + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 3682 + dependencies: 3683 + deep-extend "^0.6.0" 3684 + ini "~1.3.0" 3685 + minimist "^1.2.0" 3686 + strip-json-comments "~2.0.1" 3687 + 3412 3688 react-is@^16.13.1: 3413 3689 version "16.13.1" 3414 3690 resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" ··· 3480 3756 unicode-match-property-ecmascript "^2.0.0" 3481 3757 unicode-match-property-value-ecmascript "^2.1.0" 3482 3758 3759 + registry-auth-token@3.3.2: 3760 + version "3.3.2" 3761 + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" 3762 + integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== 3763 + dependencies: 3764 + rc "^1.1.6" 3765 + safe-buffer "^5.0.1" 3766 + 3767 + registry-url@3.1.0: 3768 + version "3.1.0" 3769 + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 3770 + integrity sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA== 3771 + dependencies: 3772 + rc "^1.0.1" 3773 + 3483 3774 regjsgen@^0.8.0: 3484 3775 version "0.8.0" 3485 3776 resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" ··· 3491 3782 integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== 3492 3783 dependencies: 3493 3784 jsesc "~3.0.2" 3785 + 3786 + require-from-string@^2.0.2: 3787 + version "2.0.2" 3788 + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" 3789 + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== 3494 3790 3495 3791 resolve-from@^4.0.0: 3496 3792 version "4.0.0" ··· 3582 3878 has-symbols "^1.0.3" 3583 3879 isarray "^2.0.5" 3584 3880 3881 + safe-buffer@5.2.1, safe-buffer@^5.0.1: 3882 + version "5.2.1" 3883 + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 3884 + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 3885 + 3585 3886 safe-regex-test@^1.0.3: 3586 3887 version "1.0.3" 3587 3888 resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" ··· 3603 3904 dependencies: 3604 3905 lru-cache "^6.0.0" 3605 3906 3907 + serve-handler@6.1.6: 3908 + version "6.1.6" 3909 + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.6.tgz#50803c1d3e947cd4a341d617f8209b22bd76cfa1" 3910 + integrity sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ== 3911 + dependencies: 3912 + bytes "3.0.0" 3913 + content-disposition "0.5.2" 3914 + mime-types "2.1.18" 3915 + minimatch "3.1.2" 3916 + path-is-inside "1.0.2" 3917 + path-to-regexp "3.3.0" 3918 + range-parser "1.2.0" 3919 + 3920 + serve@^14.2.5: 3921 + version "14.2.5" 3922 + resolved "https://registry.yarnpkg.com/serve/-/serve-14.2.5.tgz#569e333b99a484b3a6d25acce4a569c8c4f96373" 3923 + integrity sha512-Qn/qMkzCcMFVPb60E/hQy+iRLpiU8PamOfOSYoAHmmF+fFFmpPpqa6Oci2iWYpTdOUM3VF+TINud7CfbQnsZbA== 3924 + dependencies: 3925 + "@zeit/schemas" "2.36.0" 3926 + ajv "8.12.0" 3927 + arg "5.0.2" 3928 + boxen "7.0.0" 3929 + chalk "5.0.1" 3930 + chalk-template "0.4.0" 3931 + clipboardy "3.0.0" 3932 + compression "1.8.1" 3933 + is-port-reachable "4.0.0" 3934 + serve-handler "6.1.6" 3935 + update-check "1.5.4" 3936 + 3606 3937 set-function-length@^1.2.1: 3607 3938 version "1.2.2" 3608 3939 resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" ··· 3646 3977 es-errors "^1.3.0" 3647 3978 get-intrinsic "^1.2.4" 3648 3979 object-inspect "^1.13.1" 3980 + 3981 + signal-exit@^3.0.3: 3982 + version "3.0.7" 3983 + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 3984 + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 3649 3985 3650 3986 signal-exit@^4.0.1: 3651 3987 version "4.1.0" ··· 3791 4127 dependencies: 3792 4128 ansi-regex "^6.0.1" 3793 4129 4130 + strip-final-newline@^2.0.0: 4131 + version "2.0.0" 4132 + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 4133 + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 4134 + 3794 4135 strip-json-comments@^3.1.1: 3795 4136 version "3.1.1" 3796 4137 resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 3797 4138 integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 4139 + 4140 + strip-json-comments@~2.0.1: 4141 + version "2.0.1" 4142 + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 4143 + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== 3798 4144 3799 4145 sucrase@^3.32.0: 3800 4146 version "3.35.0" ··· 3937 4283 resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 3938 4284 integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 3939 4285 4286 + type-fest@^2.13.0: 4287 + version "2.19.0" 4288 + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" 4289 + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== 4290 + 3940 4291 typed-array-buffer@^1.0.2: 3941 4292 version "1.0.2" 3942 4293 resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" ··· 4034 4385 escalade "^3.2.0" 4035 4386 picocolors "^1.1.1" 4036 4387 4388 + update-check@1.5.4: 4389 + version "1.5.4" 4390 + resolved "https://registry.yarnpkg.com/update-check/-/update-check-1.5.4.tgz#5b508e259558f1ad7dbc8b4b0457d4c9d28c8743" 4391 + integrity sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ== 4392 + dependencies: 4393 + registry-auth-token "3.3.2" 4394 + registry-url "3.1.0" 4395 + 4037 4396 uri-js@^4.2.2: 4038 4397 version "4.4.1" 4039 4398 resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" ··· 4046 4405 resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 4047 4406 integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 4048 4407 4408 + vary@~1.1.2: 4409 + version "1.1.2" 4410 + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 4411 + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 4412 + 4049 4413 vite-prerender-plugin@^0.5.3: 4050 4414 version "0.5.11" 4051 4415 resolved "https://registry.yarnpkg.com/vite-prerender-plugin/-/vite-prerender-plugin-0.5.11.tgz#83e4f29e03269dceb763fb5ec2376dcc502aa79f" ··· 4138 4502 dependencies: 4139 4503 isexe "^2.0.0" 4140 4504 4505 + widest-line@^4.0.1: 4506 + version "4.0.1" 4507 + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" 4508 + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== 4509 + dependencies: 4510 + string-width "^5.0.1" 4511 + 4141 4512 "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 4142 4513 version "7.0.0" 4143 4514 resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" ··· 4147 4518 string-width "^4.1.0" 4148 4519 strip-ansi "^6.0.0" 4149 4520 4150 - wrap-ansi@^8.1.0: 4521 + wrap-ansi@^8.0.1, wrap-ansi@^8.1.0: 4151 4522 version "8.1.0" 4152 4523 resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" 4153 4524 integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
+22
patches/sonner-native+0.21.0.patch
··· 1 + diff --git a/node_modules/sonner-native/lib/commonjs/toast.js b/node_modules/sonner-native/lib/commonjs/toast.js 2 + index 121816a..0c3c7bd 100644 3 + --- a/node_modules/sonner-native/lib/commonjs/toast.js 4 + +++ b/node_modules/sonner-native/lib/commonjs/toast.js 5 + @@ -264,7 +264,7 @@ const Toast = exports.Toast = /*#__PURE__*/React.forwardRef(({ 6 + ...toastSwipeHandlerProps, 7 + children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, { 8 + entering: entering, 9 + - exiting: exiting, 10 + + exiting: _reactNative.Platform.OS === 'android' ? undefined : exiting, 11 + children: jsx 12 + }) 13 + }); 14 + @@ -274,7 +274,7 @@ const Toast = exports.Toast = /*#__PURE__*/React.forwardRef(({ 15 + children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNativeReanimated.default.View, { 16 + style: [unstyled ? undefined : elevationStyle, defaultStyles.toast, toastStyleCtx, styles?.toast, style, wiggleAnimationStyle], 17 + entering: entering, 18 + - exiting: exiting, 19 + + exiting: _reactNative.Platform.OS === 'android' ? undefined : exiting, 20 + children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_reactNative.View, { 21 + style: [defaultStyles.toastContent, toastContentStyleCtx, styles?.toastContent], 22 + children: [promiseOptions || variant === 'loading' ? 'loading' in icons ? icons.loading : /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.ActivityIndicator, {}) : icon ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
+3
patches/sonner-native+0.21.0.patch.md
··· 1 + # sonner-native+0.21.0.patch 2 + 3 + Removes Reanimated exit layout animations from the toasts. This was causing crashes if the toast was hidden while you were scrolling a flatlist.
+3
src/components/StarterPack/Wizard/WizardListCard.tsx
··· 13 13 import {DISCOVER_FEED_URI, STARTER_PACK_MAX_SIZE} from '#/lib/constants' 14 14 import {sanitizeDisplayName} from '#/lib/strings/display-names' 15 15 import {sanitizeHandle} from '#/lib/strings/handles' 16 + import {logger} from '#/logger' 16 17 import {useSession} from '#/state/session' 17 18 import {UserAvatar} from '#/view/com/util/UserAvatar' 18 19 import { ··· 150 151 if (profile.did === targetProfileDid) return 151 152 152 153 if (!included) { 154 + logger.metric('starterPack:addUser', {}) 153 155 dispatch({type: 'AddProfile', profile}) 154 156 } else { 157 + logger.metric('starterPack:removeUser', {}) 155 158 dispatch({type: 'RemoveProfile', profileDid: profile.did}) 156 159 } 157 160 }
-247
src/components/WelcomeModal.tsx
··· 1 - import {useEffect, useState} from 'react' 2 - import {Pressable, View} from 'react-native' 3 - import {ImageBackground} from 'expo-image' 4 - import {msg, Trans} from '@lingui/macro' 5 - import {useLingui} from '@lingui/react' 6 - import {FocusGuards, FocusScope} from 'radix-ui/internal' 7 - 8 - import {logger} from '#/logger' 9 - import {useLoggedOutViewControls} from '#/state/shell/logged-out' 10 - import {Logo} from '#/view/icons/Logo' 11 - import {atoms as a, flatten, useBreakpoints, web} from '#/alf' 12 - import {Button, ButtonText} from '#/components/Button' 13 - import {TimesLarge_Stroke2_Corner0_Rounded as XIcon} from '#/components/icons/Times' 14 - import {Text} from '#/components/Typography' 15 - 16 - const welcomeModalBg = require('../../assets/images/welcome-modal-bg.jpg') 17 - 18 - interface WelcomeModalProps { 19 - control: { 20 - isOpen: boolean 21 - open: () => void 22 - close: () => void 23 - } 24 - } 25 - 26 - export function WelcomeModal({control}: WelcomeModalProps) { 27 - const {_} = useLingui() 28 - const {requestSwitchToAccount} = useLoggedOutViewControls() 29 - const {gtMobile} = useBreakpoints() 30 - const [isExiting, setIsExiting] = useState(false) 31 - const [signInLinkHovered, setSignInLinkHovered] = useState(false) 32 - 33 - const fadeOutAndClose = (callback?: () => void) => { 34 - setIsExiting(true) 35 - setTimeout(() => { 36 - control.close() 37 - if (callback) callback() 38 - }, 150) 39 - } 40 - 41 - useEffect(() => { 42 - if (control.isOpen) { 43 - logger.metric('welcomeModal:presented', {}) 44 - } 45 - }, [control.isOpen]) 46 - 47 - const onPressCreateAccount = () => { 48 - logger.metric('welcomeModal:signupClicked', {}) 49 - control.close() 50 - requestSwitchToAccount({requestedAccount: 'new'}) 51 - } 52 - 53 - const onPressExplore = () => { 54 - logger.metric('welcomeModal:exploreClicked', {}) 55 - fadeOutAndClose() 56 - } 57 - 58 - const onPressSignIn = () => { 59 - logger.metric('welcomeModal:signinClicked', {}) 60 - control.close() 61 - requestSwitchToAccount({requestedAccount: 'existing'}) 62 - } 63 - 64 - FocusGuards.useFocusGuards() 65 - 66 - return ( 67 - <View 68 - role="dialog" 69 - aria-modal 70 - style={[ 71 - a.fixed, 72 - a.inset_0, 73 - a.justify_center, 74 - a.align_center, 75 - {zIndex: 9999, backgroundColor: 'rgba(0,0,0,0.2)'}, 76 - web({backdropFilter: 'blur(15px)'}), 77 - isExiting ? a.fade_out : a.fade_in, 78 - ]}> 79 - <FocusScope.FocusScope asChild loop trapped> 80 - <View 81 - style={flatten([ 82 - { 83 - maxWidth: 800, 84 - maxHeight: 600, 85 - width: '90%', 86 - height: '90%', 87 - backgroundColor: '#C0DCF0', 88 - }, 89 - a.rounded_lg, 90 - a.overflow_hidden, 91 - a.zoom_in, 92 - ])}> 93 - <ImageBackground 94 - source={welcomeModalBg} 95 - style={[a.flex_1, a.justify_center]} 96 - contentFit="cover"> 97 - <View style={[a.gap_2xl, a.align_center, a.p_4xl]}> 98 - <View 99 - style={[ 100 - a.flex_row, 101 - a.align_center, 102 - a.justify_center, 103 - a.w_full, 104 - a.p_0, 105 - ]}> 106 - <View style={[a.flex_row, a.align_center, a.gap_xs]}> 107 - <Logo width={26} /> 108 - <Text 109 - style={[ 110 - a.text_2xl, 111 - a.font_semi_bold, 112 - a.user_select_none, 113 - {color: '#354358', letterSpacing: -0.5}, 114 - ]}> 115 - Bluesky 116 - </Text> 117 - </View> 118 - </View> 119 - <View 120 - style={[ 121 - a.gap_sm, 122 - a.align_center, 123 - a.pt_5xl, 124 - a.pb_3xl, 125 - a.mt_2xl, 126 - ]}> 127 - <Text 128 - style={[ 129 - gtMobile ? a.text_4xl : a.text_3xl, 130 - a.font_semi_bold, 131 - a.text_center, 132 - {color: '#354358'}, 133 - web({ 134 - backgroundImage: 135 - 'linear-gradient(180deg, #313F54 0%, #667B99 83.65%, rgba(102, 123, 153, 0.50) 100%)', 136 - backgroundClip: 'text', 137 - WebkitBackgroundClip: 'text', 138 - WebkitTextFillColor: 'transparent', 139 - color: 'transparent', 140 - lineHeight: 1.2, 141 - letterSpacing: -0.5, 142 - }), 143 - ]}> 144 - <Trans>Real people.</Trans> 145 - {'\n'} 146 - <Trans>Real conversations.</Trans> 147 - {'\n'} 148 - <Trans>Social media you control.</Trans> 149 - </Text> 150 - </View> 151 - <View style={[a.gap_md, a.align_center]}> 152 - <View> 153 - <Button 154 - onPress={onPressCreateAccount} 155 - label={_(msg`Create account`)} 156 - size="large" 157 - color="primary" 158 - style={{ 159 - width: 200, 160 - backgroundColor: '#006AFF', 161 - }}> 162 - <ButtonText> 163 - <Trans>Create account</Trans> 164 - </ButtonText> 165 - </Button> 166 - <Button 167 - onPress={onPressExplore} 168 - label={_(msg`Explore the app`)} 169 - size="large" 170 - color="primary" 171 - variant="ghost" 172 - style={[a.bg_transparent, {width: 200}]} 173 - hoverStyle={[a.bg_transparent]}> 174 - {({hovered}) => ( 175 - <ButtonText 176 - style={[hovered && [a.underline], {color: '#006AFF'}]}> 177 - <Trans>Explore the app</Trans> 178 - </ButtonText> 179 - )} 180 - </Button> 181 - </View> 182 - <View style={[a.align_center, {minWidth: 200}]}> 183 - <Text 184 - style={[ 185 - a.text_md, 186 - a.text_center, 187 - {color: '#405168', lineHeight: 24}, 188 - ]}> 189 - <Trans>Already have an account?</Trans>{' '} 190 - <Pressable 191 - onPointerEnter={() => setSignInLinkHovered(true)} 192 - onPointerLeave={() => setSignInLinkHovered(false)} 193 - accessibilityRole="button" 194 - accessibilityLabel={_(msg`Sign in`)} 195 - accessibilityHint=""> 196 - <Text 197 - style={[ 198 - a.font_medium, 199 - { 200 - color: '#006AFF', 201 - fontSize: undefined, 202 - }, 203 - signInLinkHovered && a.underline, 204 - ]} 205 - onPress={onPressSignIn}> 206 - <Trans>Sign in</Trans> 207 - </Text> 208 - </Pressable> 209 - </Text> 210 - </View> 211 - </View> 212 - </View> 213 - <Button 214 - label={_(msg`Close welcome modal`)} 215 - style={[ 216 - a.absolute, 217 - { 218 - top: 8, 219 - right: 8, 220 - }, 221 - a.bg_transparent, 222 - ]} 223 - hoverStyle={[a.bg_transparent]} 224 - onPress={() => { 225 - logger.metric('welcomeModal:dismissed', {}) 226 - fadeOutAndClose() 227 - }} 228 - color="secondary" 229 - size="small" 230 - variant="ghost" 231 - shape="round"> 232 - {({hovered, pressed, focused}) => ( 233 - <XIcon 234 - size="md" 235 - style={{ 236 - color: '#354358', 237 - opacity: hovered || pressed || focused ? 1 : 0.7, 238 - }} 239 - /> 240 - )} 241 - </Button> 242 - </ImageBackground> 243 - </View> 244 - </FocusScope.FocusScope> 245 - </View> 246 - ) 247 - }
+4
src/components/dialogs/StarterPackDialog.tsx
··· 11 11 12 12 import {useRequireEmailVerification} from '#/lib/hooks/useRequireEmailVerification' 13 13 import {type NavigationProp} from '#/lib/routes/types' 14 + import {logger} from '#/logger' 14 15 import {isWeb} from '#/platform/detection' 15 16 import { 16 17 invalidateActorStarterPacksWithMembershipQuery, ··· 294 295 if (!starterPack.list?.uri || isPendingRefresh) return 295 296 296 297 const listUri = starterPack.list.uri 298 + const starterPackUri = starterPack.uri 297 299 298 300 setIsPendingRefresh(true) 299 301 ··· 302 304 listUri: listUri, 303 305 actorDid: targetDid, 304 306 }) 307 + logger.metric('starterPack:addUser', {starterPack: starterPackUri}) 305 308 } else { 306 309 if (!starterPackWithMembership.listItem?.uri) { 307 310 console.error('Cannot remove: missing membership URI') ··· 313 316 actorDid: targetDid, 314 317 membershipUri: starterPackWithMembership.listItem.uri, 315 318 }) 319 + logger.metric('starterPack:removeUser', {starterPack: starterPackUri}) 316 320 } 317 321 } 318 322
-3
src/components/hooks/useWelcomeModal.native.ts
··· 1 - export function useWelcomeModal() { 2 - throw new Error('useWelcomeModal is web only') 3 - }
-43
src/components/hooks/useWelcomeModal.ts
··· 1 - import {useEffect, useState} from 'react' 2 - 3 - import {isWeb} from '#/platform/detection' 4 - import {useSession} from '#/state/session' 5 - 6 - export function useWelcomeModal() { 7 - const {hasSession} = useSession() 8 - const [isOpen, setIsOpen] = useState(false) 9 - 10 - const open = () => setIsOpen(true) 11 - const close = () => { 12 - setIsOpen(false) 13 - // Mark that user has actively closed the modal, don't show again this session 14 - if (typeof window !== 'undefined') { 15 - sessionStorage.setItem('welcomeModalClosed', 'true') 16 - } 17 - } 18 - 19 - useEffect(() => { 20 - // Only show modal if: 21 - // 1. User is not logged in 22 - // 2. We're on the web (this is a web-only feature) 23 - // 3. We're on the homepage (path is '/' or '/home') 24 - // 4. User hasn't actively closed the modal in this session 25 - if (isWeb && !hasSession && typeof window !== 'undefined') { 26 - const currentPath = window.location.pathname 27 - const isHomePage = currentPath === '/' 28 - const hasUserClosedModal = 29 - sessionStorage.getItem('welcomeModalClosed') === 'true' 30 - 31 - if (isHomePage && !hasUserClosedModal) { 32 - // Small delay to ensure the page has loaded 33 - const timer = setTimeout(() => { 34 - open() 35 - }, 1000) 36 - 37 - return () => clearTimeout(timer) 38 - } 39 - } 40 - }, [hasSession]) 41 - 42 - return {isOpen, open, close} 43 - }
-1
src/lib/statsig/gates.ts
··· 15 15 | 'remove_show_latest_button' 16 16 | 'test_gate_1' 17 17 | 'test_gate_2' 18 - | 'welcome_modal'
+116 -153
src/locale/locales/en/messages.po
··· 125 125 msgid "{0, plural, other {# people have}} used this starter pack!" 126 126 msgstr "" 127 127 128 - #: src/components/dialogs/StarterPackDialog.tsx:356 128 + #: src/components/dialogs/StarterPackDialog.tsx:360 129 129 msgid "{0, plural, other {+# more}}" 130 130 msgstr "" 131 131 ··· 593 593 594 594 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:429 595 595 #: src/screens/Messages/components/RequestButtons.tsx:91 596 - #: src/view/com/profile/ProfileMenu.tsx:178 596 + #: src/view/com/profile/ProfileMenu.tsx:183 597 597 msgctxt "toast" 598 598 msgid "Account blocked" 599 599 msgstr "" 600 600 601 - #: src/view/com/profile/ProfileMenu.tsx:191 601 + #: src/view/com/profile/ProfileMenu.tsx:196 602 602 msgctxt "toast" 603 603 msgid "Account followed" 604 604 msgstr "" 605 605 606 606 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:452 607 - #: src/view/com/profile/ProfileMenu.tsx:154 607 + #: src/view/com/profile/ProfileMenu.tsx:159 608 608 msgctxt "toast" 609 609 msgid "Account muted" 610 610 msgstr "" ··· 627 627 msgstr "" 628 628 629 629 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:146 630 - #: src/view/com/profile/ProfileMenu.tsx:168 630 + #: src/view/com/profile/ProfileMenu.tsx:173 631 631 msgctxt "toast" 632 632 msgid "Account unblocked" 633 633 msgstr "" 634 634 635 - #: src/view/com/profile/ProfileMenu.tsx:203 635 + #: src/view/com/profile/ProfileMenu.tsx:208 636 636 msgctxt "toast" 637 637 msgid "Account unfollowed" 638 638 msgstr "" 639 639 640 640 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:442 641 - #: src/view/com/profile/ProfileMenu.tsx:144 641 + #: src/view/com/profile/ProfileMenu.tsx:149 642 642 msgctxt "toast" 643 643 msgid "Account unmuted" 644 644 msgstr "" ··· 659 659 660 660 #: src/components/dialogs/lists/ListAddRemoveUsersDialog.tsx:169 661 661 #: src/components/dialogs/MutedWords.tsx:333 662 - #: src/components/dialogs/StarterPackDialog.tsx:370 663 - #: src/components/dialogs/StarterPackDialog.tsx:376 662 + #: src/components/dialogs/StarterPackDialog.tsx:374 663 + #: src/components/dialogs/StarterPackDialog.tsx:380 664 664 #: src/view/com/modals/UserAddRemoveLists.tsx:235 665 665 msgid "Add" 666 666 msgstr "" ··· 669 669 msgid "Add {0} more to continue" 670 670 msgstr "" 671 671 672 - #: src/components/StarterPack/Wizard/WizardListCard.tsx:61 672 + #: src/components/StarterPack/Wizard/WizardListCard.tsx:62 673 673 msgid "Add {displayName} to starter pack" 674 674 msgstr "" 675 675 ··· 790 790 msgid "Add this feed to your feeds" 791 791 msgstr "" 792 792 793 - #: src/view/com/profile/ProfileMenu.tsx:361 794 - #: src/view/com/profile/ProfileMenu.tsx:364 793 + #: src/view/com/profile/ProfileMenu.tsx:366 794 + #: src/view/com/profile/ProfileMenu.tsx:369 795 795 msgid "Add to lists" 796 796 msgstr "" 797 797 798 - #: src/components/dialogs/StarterPackDialog.tsx:175 799 - #: src/view/com/profile/ProfileMenu.tsx:351 800 - #: src/view/com/profile/ProfileMenu.tsx:354 798 + #: src/components/dialogs/StarterPackDialog.tsx:176 799 + #: src/view/com/profile/ProfileMenu.tsx:356 800 + #: src/view/com/profile/ProfileMenu.tsx:359 801 801 msgid "Add to starter packs" 802 802 msgstr "" 803 803 ··· 814 814 msgid "Added to list" 815 815 msgstr "" 816 816 817 - #: src/components/dialogs/StarterPackDialog.tsx:257 817 + #: src/components/dialogs/StarterPackDialog.tsx:258 818 818 msgid "Added to starter pack" 819 819 msgstr "" 820 820 ··· 908 908 msgid "Already have a code?" 909 909 msgstr "" 910 910 911 - #: src/components/WelcomeModal.tsx:189 912 - msgid "Already have an account?" 913 - msgstr "" 914 - 915 911 #: src/screens/Login/ChooseAccountForm.tsx:43 916 912 msgid "Already signed in as @{0}" 917 913 msgstr "" ··· 1074 1070 msgstr "" 1075 1071 1076 1072 #: src/Navigation.tsx:524 1077 - #: src/screens/Settings/AppIconSettings/index.tsx:67 1073 + #: src/screens/Settings/AppIconSettings/index.tsx:61 1078 1074 #: src/screens/Settings/AppIconSettings/SettingsListItem.tsx:18 1079 1075 #: src/screens/Settings/AppIconSettings/SettingsListItem.tsx:23 1080 1076 msgid "App Icon" ··· 1286 1282 msgid "Before creating a post or replying, you must first verify your email." 1287 1283 msgstr "" 1288 1284 1289 - #: src/components/dialogs/StarterPackDialog.tsx:70 1285 + #: src/components/dialogs/StarterPackDialog.tsx:71 1290 1286 #: src/components/StarterPack/ProfileStarterPacks.tsx:231 1291 1287 #: src/components/StarterPack/ProfileStarterPacks.tsx:241 1292 1288 msgid "Before creating a starter pack, you must first verify your email." ··· 1314 1310 1315 1311 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:858 1316 1312 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:352 1317 - #: src/view/com/profile/ProfileMenu.tsx:559 1313 + #: src/view/com/profile/ProfileMenu.tsx:564 1318 1314 msgid "Block" 1319 1315 msgstr "" 1320 1316 ··· 1324 1320 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:745 1325 1321 #: src/screens/Messages/components/RequestButtons.tsx:144 1326 1322 #: src/screens/Messages/components/RequestButtons.tsx:146 1327 - #: src/view/com/profile/ProfileMenu.tsx:465 1328 - #: src/view/com/profile/ProfileMenu.tsx:472 1323 + #: src/view/com/profile/ProfileMenu.tsx:470 1324 + #: src/view/com/profile/ProfileMenu.tsx:477 1329 1325 msgid "Block account" 1330 1326 msgstr "" 1331 1327 1332 1328 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:853 1333 - #: src/view/com/profile/ProfileMenu.tsx:542 1329 + #: src/view/com/profile/ProfileMenu.tsx:547 1334 1330 msgid "Block Account?" 1335 1331 msgstr "" 1336 1332 ··· 1386 1382 msgstr "" 1387 1383 1388 1384 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:855 1389 - #: src/view/com/profile/ProfileMenu.tsx:554 1385 + #: src/view/com/profile/ProfileMenu.tsx:559 1390 1386 msgid "Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." 1391 1387 msgstr "" 1392 1388 ··· 1403 1399 msgid "Blocking is public. Blocked accounts cannot reply in your threads, mention you, or otherwise interact with you." 1404 1400 msgstr "" 1405 1401 1406 - #: src/view/com/profile/ProfileMenu.tsx:551 1402 + #: src/view/com/profile/ProfileMenu.tsx:556 1407 1403 msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you." 1408 1404 msgstr "" 1409 1405 ··· 1446 1442 1447 1443 #: src/screens/Signup/StepInfo/Policies.tsx:32 1448 1444 msgid "Bluesky's Updated Community Guidelines" 1449 - msgstr "" 1450 - 1451 - #: src/screens/Settings/AppIconSettings/index.tsx:99 1452 - msgid "Bluesky+" 1453 - msgstr "" 1454 - 1455 - #: src/screens/Settings/AppIconSettings/index.tsx:102 1456 - msgid "Bluesky+ icons" 1457 1445 msgstr "" 1458 1446 1459 1447 #: src/lib/moderation/useLabelBehaviorDescription.ts:56 ··· 1579 1567 #: src/screens/Profile/Header/EditProfileDialog.tsx:254 1580 1568 #: src/screens/Profile/Header/EditProfileDialog.tsx:262 1581 1569 #: src/screens/Search/Shell.tsx:349 1582 - #: src/screens/Settings/AppIconSettings/index.tsx:44 1583 - #: src/screens/Settings/AppIconSettings/index.tsx:230 1570 + #: src/screens/Settings/AppIconSettings/index.tsx:38 1571 + #: src/screens/Settings/AppIconSettings/index.tsx:195 1584 1572 #: src/screens/Settings/components/ChangeHandleDialog.tsx:78 1585 1573 #: src/screens/Settings/components/ChangeHandleDialog.tsx:85 1586 1574 #: src/screens/Settings/components/ChangePasswordDialog.tsx:246 ··· 1645 1633 msgid "Change" 1646 1634 msgstr "" 1647 1635 1648 - #: src/screens/Settings/AppIconSettings/index.tsx:39 1636 + #: src/screens/Settings/AppIconSettings/index.tsx:33 1649 1637 msgid "Change app icon" 1650 1638 msgstr "" 1651 1639 1652 - #: src/screens/Settings/AppIconSettings/index.tsx:38 1653 - #: src/screens/Settings/AppIconSettings/index.tsx:226 1640 + #: src/screens/Settings/AppIconSettings/index.tsx:32 1641 + #: src/screens/Settings/AppIconSettings/index.tsx:191 1654 1642 msgid "Change app icon to \"{0}\"" 1655 1643 msgstr "" 1656 1644 ··· 1684 1672 msgid "Change your password" 1685 1673 msgstr "" 1686 1674 1687 - #: src/screens/Settings/AppIconSettings/index.tsx:221 1675 + #: src/screens/Settings/AppIconSettings/index.tsx:186 1688 1676 msgid "Changes app icon" 1689 1677 msgstr "" 1690 1678 ··· 1880 1868 #: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:178 1881 1869 #: src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx:187 1882 1870 #: src/components/dialogs/SearchablePeopleList.tsx:295 1883 - #: src/components/dialogs/StarterPackDialog.tsx:178 1871 + #: src/components/dialogs/StarterPackDialog.tsx:179 1884 1872 #: src/components/dms/EmojiPopup.android.tsx:58 1885 1873 #: src/components/dms/ReportDialog.tsx:387 1886 1874 #: src/components/dms/ReportDialog.tsx:396 ··· 1926 1914 msgid "Close dialog" 1927 1915 msgstr "" 1928 1916 1929 - #: src/view/shell/index.web.tsx:106 1917 + #: src/view/shell/index.web.tsx:96 1930 1918 msgid "Close drawer menu" 1931 1919 msgstr "" 1932 1920 ··· 1957 1945 msgid "Close this dialog" 1958 1946 msgstr "" 1959 1947 1960 - #: src/components/WelcomeModal.tsx:214 1961 - msgid "Close welcome modal" 1962 - msgstr "" 1963 - 1964 1948 #: src/screens/Login/PasswordUpdatedForm.tsx:32 1965 1949 msgid "Closes password update alert" 1966 1950 msgstr "" ··· 2217 2201 msgid "Copy App Password" 2218 2202 msgstr "" 2219 2203 2220 - #: src/view/com/profile/ProfileMenu.tsx:502 2221 - #: src/view/com/profile/ProfileMenu.tsx:505 2204 + #: src/view/com/profile/ProfileMenu.tsx:507 2205 + #: src/view/com/profile/ProfileMenu.tsx:510 2222 2206 msgid "Copy at:// URI" 2223 2207 msgstr "" 2224 2208 ··· 2233 2217 msgstr "" 2234 2218 2235 2219 #: src/screens/Settings/components/ChangeHandleDialog.tsx:501 2236 - #: src/view/com/profile/ProfileMenu.tsx:511 2237 - #: src/view/com/profile/ProfileMenu.tsx:514 2220 + #: src/view/com/profile/ProfileMenu.tsx:516 2221 + #: src/view/com/profile/ProfileMenu.tsx:519 2238 2222 msgid "Copy DID" 2239 2223 msgstr "" 2240 2224 ··· 2265 2249 msgid "Copy link to post" 2266 2250 msgstr "" 2267 2251 2268 - #: src/view/com/profile/ProfileMenu.tsx:263 2269 - #: src/view/com/profile/ProfileMenu.tsx:274 2252 + #: src/view/com/profile/ProfileMenu.tsx:268 2253 + #: src/view/com/profile/ProfileMenu.tsx:279 2270 2254 msgid "Copy link to profile" 2271 2255 msgstr "" 2272 2256 ··· 2298 2282 msgstr "" 2299 2283 2300 2284 #: src/components/PostControls/ShareMenu/ShareMenuItems.web.tsx:104 2301 - #: src/view/com/profile/ProfileMenu.tsx:283 2302 - #: src/view/com/profile/ProfileMenu.tsx:293 2285 + #: src/view/com/profile/ProfileMenu.tsx:288 2286 + #: src/view/com/profile/ProfileMenu.tsx:298 2303 2287 #: src/view/screens/ProfileList.tsx:530 2304 2288 msgid "Copy via bsky.app" 2305 2289 msgstr "" ··· 2357 2341 2358 2342 #. Text on button to create a new starter pack 2359 2343 #. Text on button to create a new starter pack 2360 - #: src/components/dialogs/StarterPackDialog.tsx:111 2361 - #: src/components/dialogs/StarterPackDialog.tsx:200 2344 + #: src/components/dialogs/StarterPackDialog.tsx:112 2345 + #: src/components/dialogs/StarterPackDialog.tsx:201 2362 2346 #: src/components/StarterPack/ProfileStarterPacks.tsx:296 2363 2347 msgid "Create" 2364 2348 msgstr "" ··· 2379 2363 2380 2364 #: src/components/LoggedOutCTA.tsx:71 2381 2365 #: src/components/LoggedOutCTA.tsx:76 2382 - #: src/components/WelcomeModal.tsx:155 2383 - #: src/components/WelcomeModal.tsx:163 2384 2366 #: src/view/com/auth/SplashScreen.tsx:74 2385 2367 #: src/view/com/auth/SplashScreen.web.tsx:123 2386 2368 #: src/view/shell/bottom-bar/BottomBar.tsx:345 ··· 2429 2411 msgid "Create report for {0}" 2430 2412 msgstr "" 2431 2413 2432 - #: src/components/dialogs/StarterPackDialog.tsx:106 2433 - #: src/components/dialogs/StarterPackDialog.tsx:195 2414 + #: src/components/dialogs/StarterPackDialog.tsx:107 2415 + #: src/components/dialogs/StarterPackDialog.tsx:196 2434 2416 msgid "Create starter pack" 2435 2417 msgstr "" 2436 2418 ··· 2459 2441 msgid "Customize who can interact with this post." 2460 2442 msgstr "" 2461 2443 2462 - #: src/screens/Onboarding/Layout.tsx:60 2444 + #: src/screens/Onboarding/Layout.tsx:61 2463 2445 msgid "Customizes your Bluesky experience" 2464 2446 msgstr "" 2465 2447 ··· 2519 2501 msgid "Default" 2520 2502 msgstr "" 2521 2503 2522 - #: src/screens/Settings/AppIconSettings/index.tsx:75 2504 + #: src/screens/Settings/AppIconSettings/index.tsx:69 2523 2505 msgid "Default icons" 2524 2506 msgstr "" 2525 2507 ··· 2654 2636 msgid "Detach quote post?" 2655 2637 msgstr "" 2656 2638 2639 + #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:43 2640 + msgctxt "Name of app icon variant" 2641 + msgid "Dev mode!!!" 2642 + msgstr "" 2643 + 2657 2644 #: src/screens/Settings/AboutSettings.tsx:138 2658 2645 msgctxt "toast" 2659 2646 msgid "Developer mode disabled" ··· 2805 2792 msgid "Ditch the trolls and clickbait. Find real people and conversations that matter to you." 2806 2793 msgstr "" 2807 2794 2808 - #: src/view/com/profile/ProfileMenu.tsx:323 2809 - #: src/view/com/profile/ProfileMenu.tsx:335 2795 + #: src/view/com/profile/ProfileMenu.tsx:328 2796 + #: src/view/com/profile/ProfileMenu.tsx:340 2810 2797 msgid "Divorce mutual" 2811 2798 msgstr "" 2812 2799 ··· 3002 2989 msgid "Edit list details" 3003 2990 msgstr "" 3004 2991 3005 - #: src/view/com/profile/ProfileMenu.tsx:398 3006 - #: src/view/com/profile/ProfileMenu.tsx:404 2992 + #: src/view/com/profile/ProfileMenu.tsx:403 2993 + #: src/view/com/profile/ProfileMenu.tsx:409 3007 2994 msgid "Edit live status" 3008 2995 msgstr "" 3009 2996 ··· 3393 3380 msgid "Explore" 3394 3381 msgstr "" 3395 3382 3396 - #: src/components/WelcomeModal.tsx:168 3397 - #: src/components/WelcomeModal.tsx:177 3398 - msgid "Explore the app" 3399 - msgstr "" 3400 - 3401 3383 #: src/screens/Settings/AccountSettings.tsx:150 3402 3384 #: src/screens/Settings/AccountSettings.tsx:154 3403 3385 msgid "Export my data" ··· 3437 3419 msgid "Failed to add emoji reaction" 3438 3420 msgstr "" 3439 3421 3440 - #: src/components/dialogs/StarterPackDialog.tsx:269 3422 + #: src/components/dialogs/StarterPackDialog.tsx:270 3441 3423 msgid "Failed to add to starter pack" 3442 3424 msgstr "" 3443 3425 ··· 3543 3525 msgid "Failed to remove emoji reaction" 3544 3526 msgstr "" 3545 3527 3546 - #: src/components/dialogs/StarterPackDialog.tsx:288 3528 + #: src/components/dialogs/StarterPackDialog.tsx:289 3547 3529 msgid "Failed to remove from starter pack" 3548 3530 msgstr "" 3549 3531 ··· 3647 3629 msgid "Feed menu" 3648 3630 msgstr "" 3649 3631 3650 - #: src/components/StarterPack/Wizard/WizardListCard.tsx:57 3632 + #: src/components/StarterPack/Wizard/WizardListCard.tsx:58 3651 3633 msgid "Feed toggle" 3652 3634 msgstr "" 3653 3635 ··· 3797 3779 msgid "Follow 7 accounts" 3798 3780 msgstr "" 3799 3781 3800 - #: src/view/com/profile/ProfileMenu.tsx:325 3801 - #: src/view/com/profile/ProfileMenu.tsx:340 3782 + #: src/view/com/profile/ProfileMenu.tsx:330 3783 + #: src/view/com/profile/ProfileMenu.tsx:345 3802 3784 msgid "Follow account" 3803 3785 msgstr "" 3804 3786 ··· 4092 4074 #: src/components/dms/ReportDialog.tsx:197 4093 4075 #: src/components/ReportDialog/SelectReportOptionView.tsx:81 4094 4076 #: src/components/ReportDialog/SubmitView.tsx:110 4095 - #: src/screens/Onboarding/Layout.tsx:120 4096 - #: src/screens/Onboarding/Layout.tsx:213 4077 + #: src/screens/Onboarding/Layout.tsx:121 4078 + #: src/screens/Onboarding/Layout.tsx:214 4097 4079 #: src/screens/Signup/BackNextButtons.tsx:35 4098 4080 msgid "Go back to previous step" 4099 4081 msgstr "" ··· 4112 4094 msgid "Go Home" 4113 4095 msgstr "" 4114 4096 4115 - #: src/view/com/profile/ProfileMenu.tsx:399 4116 - #: src/view/com/profile/ProfileMenu.tsx:406 4097 + #: src/view/com/profile/ProfileMenu.tsx:404 4098 + #: src/view/com/profile/ProfileMenu.tsx:411 4117 4099 msgid "Go live" 4118 4100 msgstr "" 4119 4101 ··· 5302 5284 msgstr "" 5303 5285 5304 5286 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:149 5305 - #: src/view/com/profile/ProfileMenu.tsx:240 5306 - #: src/view/com/profile/ProfileMenu.tsx:246 5287 + #: src/view/com/profile/ProfileMenu.tsx:245 5288 + #: src/view/com/profile/ProfileMenu.tsx:251 5307 5289 #: src/view/screens/ProfileList.tsx:768 5308 5290 msgid "More options" 5309 5291 msgstr "" ··· 5337 5319 5338 5320 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:726 5339 5321 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:732 5340 - #: src/view/com/profile/ProfileMenu.tsx:444 5341 - #: src/view/com/profile/ProfileMenu.tsx:451 5322 + #: src/view/com/profile/ProfileMenu.tsx:449 5323 + #: src/view/com/profile/ProfileMenu.tsx:456 5342 5324 msgid "Mute account" 5343 5325 msgstr "" 5344 5326 ··· 5594 5576 msgid "New posts from {firstAuthorName} and {additionalAuthorsCount, plural, one {{formattedAuthorsCount} other} other {{formattedAuthorsCount} others}}" 5595 5577 msgstr "" 5596 5578 5597 - #: src/components/dialogs/StarterPackDialog.tsx:192 5579 + #: src/components/dialogs/StarterPackDialog.tsx:193 5598 5580 msgid "New starter pack" 5599 5581 msgstr "" 5600 5582 ··· 5630 5612 #: src/screens/StarterPack/Wizard/index.tsx:214 5631 5613 #: src/screens/StarterPack/Wizard/index.tsx:392 5632 5614 #: src/screens/StarterPack/Wizard/index.tsx:399 5633 - msgid "Next" 5634 - msgstr "" 5635 - 5636 - #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:42 5637 - msgctxt "Name of app icon variant" 5638 5615 msgid "Next" 5639 5616 msgstr "" 5640 5617 ··· 5800 5777 msgid "Not Found" 5801 5778 msgstr "" 5802 5779 5803 - #: src/view/com/profile/ProfileMenu.tsx:566 5780 + #: src/view/com/profile/ProfileMenu.tsx:571 5804 5781 msgid "Note about sharing" 5805 5782 msgstr "" 5806 5783 ··· 5889 5866 #. Confirm button text. 5890 5867 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:391 5891 5868 #: src/screens/Search/modules/ExploreInterestsCard.tsx:48 5892 - #: src/screens/Settings/AppIconSettings/index.tsx:48 5893 - #: src/screens/Settings/AppIconSettings/index.tsx:234 5869 + #: src/screens/Settings/AppIconSettings/index.tsx:42 5870 + #: src/screens/Settings/AppIconSettings/index.tsx:199 5894 5871 msgid "OK" 5895 5872 msgstr "" 5896 5873 ··· 6270 6247 msgid "Permission to access your photo library was denied. Please enable it in your system settings." 6271 6248 msgstr "" 6272 6249 6273 - #: src/components/StarterPack/Wizard/WizardListCard.tsx:57 6250 + #: src/components/StarterPack/Wizard/WizardListCard.tsx:58 6274 6251 msgid "Person toggle" 6275 6252 msgstr "" 6276 6253 ··· 6871 6848 msgid "Read the patches and contribute" 6872 6849 msgstr "" 6873 6850 6874 - #: src/components/WelcomeModal.tsx:146 6875 - msgid "Real conversations." 6876 - msgstr "" 6877 - 6878 - #: src/components/WelcomeModal.tsx:144 6879 - msgid "Real people." 6880 - msgstr "" 6881 - 6882 6851 #: src/screens/Takendown.tsx:171 6883 6852 #: src/screens/Takendown.tsx:179 6884 6853 msgid "Reason for appeal" ··· 6937 6906 6938 6907 #: src/components/dialogs/lists/ListAddRemoveUsersDialog.tsx:171 6939 6908 #: src/components/dialogs/MutedWords.tsx:443 6940 - #: src/components/dialogs/StarterPackDialog.tsx:370 6941 - #: src/components/dialogs/StarterPackDialog.tsx:376 6909 + #: src/components/dialogs/StarterPackDialog.tsx:374 6910 + #: src/components/dialogs/StarterPackDialog.tsx:380 6942 6911 #: src/components/FeedCard.tsx:343 6943 - #: src/components/StarterPack/Wizard/WizardListCard.tsx:104 6944 - #: src/components/StarterPack/Wizard/WizardListCard.tsx:111 6912 + #: src/components/StarterPack/Wizard/WizardListCard.tsx:105 6913 + #: src/components/StarterPack/Wizard/WizardListCard.tsx:112 6945 6914 #: src/screens/Bookmarks/index.tsx:255 6946 6915 #: src/screens/Settings/Settings.tsx:668 6947 6916 #: src/view/com/modals/UserAddRemoveLists.tsx:235 ··· 6949 6918 msgid "Remove" 6950 6919 msgstr "" 6951 6920 6952 - #: src/components/StarterPack/Wizard/WizardListCard.tsx:60 6921 + #: src/components/StarterPack/Wizard/WizardListCard.tsx:61 6953 6922 msgid "Remove {displayName} from starter pack" 6954 6923 msgstr "" 6955 6924 ··· 7050 7019 msgid "Remove this feed from your saved feeds" 7051 7020 msgstr "" 7052 7021 7053 - #: src/view/com/profile/ProfileMenu.tsx:373 7054 7022 #: src/view/com/profile/ProfileMenu.tsx:378 7023 + #: src/view/com/profile/ProfileMenu.tsx:383 7055 7024 msgid "Remove trust" 7056 7025 msgstr "" 7057 7026 ··· 7061 7030 7062 7031 #: src/components/verification/VerificationRemovePrompt.tsx:46 7063 7032 #: src/components/verification/VerificationsDialog.tsx:252 7064 - #: src/view/com/profile/ProfileMenu.tsx:417 7065 - #: src/view/com/profile/ProfileMenu.tsx:420 7033 + #: src/view/com/profile/ProfileMenu.tsx:422 7034 + #: src/view/com/profile/ProfileMenu.tsx:425 7066 7035 msgid "Remove verification" 7067 7036 msgstr "" 7068 7037 ··· 7092 7061 msgid "Removed from saved feeds" 7093 7062 msgstr "" 7094 7063 7095 - #: src/components/dialogs/StarterPackDialog.tsx:276 7064 + #: src/components/dialogs/StarterPackDialog.tsx:277 7096 7065 msgid "Removed from starter pack" 7097 7066 msgstr "" 7098 7067 ··· 7209 7178 msgid "Report" 7210 7179 msgstr "" 7211 7180 7212 - #: src/view/com/profile/ProfileMenu.tsx:484 7213 - #: src/view/com/profile/ProfileMenu.tsx:487 7181 + #: src/view/com/profile/ProfileMenu.tsx:489 7182 + #: src/view/com/profile/ProfileMenu.tsx:492 7214 7183 msgid "Report account" 7215 7184 msgstr "" 7216 7185 ··· 7662 7631 msgid "Search my posts" 7663 7632 msgstr "" 7664 7633 7665 - #: src/view/com/profile/ProfileMenu.tsx:302 7666 - #: src/view/com/profile/ProfileMenu.tsx:305 7634 + #: src/view/com/profile/ProfileMenu.tsx:307 7635 + #: src/view/com/profile/ProfileMenu.tsx:310 7667 7636 msgid "Search posts" 7668 7637 msgstr "" 7669 7638 ··· 7945 7914 msgid "Server address" 7946 7915 msgstr "" 7947 7916 7948 - #: src/screens/Settings/AppIconSettings/index.tsx:178 7917 + #: src/screens/Settings/AppIconSettings/index.tsx:143 7949 7918 msgid "Set app icon to {0}" 7950 7919 msgstr "" 7951 7920 ··· 7953 7922 msgid "Set new password" 7954 7923 msgstr "" 7955 7924 7956 - #: src/screens/Onboarding/Layout.tsx:49 7925 + #: src/screens/Onboarding/Layout.tsx:50 7957 7926 msgid "Set up your account" 7958 7927 msgstr "" 7959 7928 ··· 8047 8016 msgid "Share a fun fact!" 8048 8017 msgstr "" 8049 8018 8050 - #: src/view/com/profile/ProfileMenu.tsx:571 8019 + #: src/view/com/profile/ProfileMenu.tsx:576 8051 8020 msgid "Share anyway" 8052 8021 msgstr "" 8053 8022 ··· 8095 8064 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:171 8096 8065 #: src/screens/StarterPack/StarterPackScreen.tsx:615 8097 8066 #: src/screens/StarterPack/StarterPackScreen.tsx:623 8098 - #: src/view/com/profile/ProfileMenu.tsx:263 8099 - #: src/view/com/profile/ProfileMenu.tsx:276 8100 - #: src/view/com/profile/ProfileMenu.tsx:283 8101 - #: src/view/com/profile/ProfileMenu.tsx:295 8067 + #: src/view/com/profile/ProfileMenu.tsx:268 8068 + #: src/view/com/profile/ProfileMenu.tsx:281 8069 + #: src/view/com/profile/ProfileMenu.tsx:288 8070 + #: src/view/com/profile/ProfileMenu.tsx:300 8102 8071 msgid "Share via..." 8103 8072 msgstr "" 8104 8073 ··· 8223 8192 8224 8193 #: src/components/dialogs/Signin.tsx:97 8225 8194 #: src/components/dialogs/Signin.tsx:99 8226 - #: src/components/WelcomeModal.tsx:194 8227 - #: src/components/WelcomeModal.tsx:206 8228 8195 #: src/screens/Login/index.tsx:177 8229 8196 #: src/screens/Login/index.tsx:200 8230 8197 #: src/screens/Login/LoginForm.tsx:188 ··· 8338 8305 msgid "Snoozes the reminder" 8339 8306 msgstr "" 8340 8307 8341 - #: src/components/WelcomeModal.tsx:148 8342 - msgid "Social media you control." 8343 - msgstr "" 8344 - 8345 8308 #: src/screens/Onboarding/index.tsx:53 8346 8309 #: src/screens/Onboarding/state.ts:108 8347 8310 msgid "Software Dev" ··· 8775 8738 msgstr "" 8776 8739 8777 8740 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:348 8778 - #: src/view/com/profile/ProfileMenu.tsx:547 8741 + #: src/view/com/profile/ProfileMenu.tsx:552 8779 8742 msgid "The account will be able to interact with you after unblocking." 8780 8743 msgstr "" 8781 8744 8782 - #: src/screens/Settings/AppIconSettings/index.tsx:41 8783 - #: src/screens/Settings/AppIconSettings/index.tsx:227 8745 + #: src/screens/Settings/AppIconSettings/index.tsx:35 8746 + #: src/screens/Settings/AppIconSettings/index.tsx:192 8784 8747 msgid "The app will be restarted" 8785 8748 msgstr "" 8786 8749 ··· 8954 8917 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:115 8955 8918 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137 8956 8919 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:150 8957 - #: src/view/com/profile/ProfileMenu.tsx:148 8958 - #: src/view/com/profile/ProfileMenu.tsx:158 8959 - #: src/view/com/profile/ProfileMenu.tsx:172 8960 - #: src/view/com/profile/ProfileMenu.tsx:182 8961 - #: src/view/com/profile/ProfileMenu.tsx:195 8962 - #: src/view/com/profile/ProfileMenu.tsx:207 8920 + #: src/view/com/profile/ProfileMenu.tsx:153 8921 + #: src/view/com/profile/ProfileMenu.tsx:163 8922 + #: src/view/com/profile/ProfileMenu.tsx:177 8923 + #: src/view/com/profile/ProfileMenu.tsx:187 8924 + #: src/view/com/profile/ProfileMenu.tsx:200 8925 + #: src/view/com/profile/ProfileMenu.tsx:212 8963 8926 msgid "There was an issue! {0}" 8964 8927 msgstr "" 8965 8928 ··· 9172 9135 msgid "This post's author has disabled quote posts." 9173 9136 msgstr "" 9174 9137 9175 - #: src/view/com/profile/ProfileMenu.tsx:568 9138 + #: src/view/com/profile/ProfileMenu.tsx:573 9176 9139 msgid "This profile is only visible to logged-in users. It won't be visible to people who aren't signed in." 9177 9140 msgstr "" 9178 9141 ··· 9344 9307 msgid "Trust emerges from relationships, communities, and shared context, so weโ€™re also enabling <0>trusted verifiers</0>: organizations that can directly issue verification." 9345 9308 msgstr "" 9346 9309 9347 - #: src/view/com/profile/ProfileMenu.tsx:385 9348 - #: src/view/com/profile/ProfileMenu.tsx:388 9310 + #: src/view/com/profile/ProfileMenu.tsx:390 9311 + #: src/view/com/profile/ProfileMenu.tsx:393 9349 9312 msgid "Trust verifier" 9350 9313 msgstr "" 9351 9314 ··· 9422 9385 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:352 9423 9386 #: src/screens/ProfileList/components/Header.tsx:171 9424 9387 #: src/screens/ProfileList/components/Header.tsx:178 9425 - #: src/view/com/profile/ProfileMenu.tsx:559 9388 + #: src/view/com/profile/ProfileMenu.tsx:564 9426 9389 #: src/view/screens/ProfileList.tsx:741 9427 9390 msgid "Unblock" 9428 9391 msgstr "" ··· 9434 9397 9435 9398 #: src/components/dms/ConvoMenu.tsx:247 9436 9399 #: src/components/dms/ConvoMenu.tsx:250 9437 - #: src/view/com/profile/ProfileMenu.tsx:464 9438 - #: src/view/com/profile/ProfileMenu.tsx:470 9400 + #: src/view/com/profile/ProfileMenu.tsx:469 9401 + #: src/view/com/profile/ProfileMenu.tsx:475 9439 9402 msgid "Unblock account" 9440 9403 msgstr "" 9441 9404 9442 9405 #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:346 9443 - #: src/view/com/profile/ProfileMenu.tsx:541 9406 + #: src/view/com/profile/ProfileMenu.tsx:546 9444 9407 msgid "Unblock Account?" 9445 9408 msgstr "" 9446 9409 ··· 9469 9432 msgid "Unfollow {0}" 9470 9433 msgstr "" 9471 9434 9472 - #: src/view/com/profile/ProfileMenu.tsx:324 9473 - #: src/view/com/profile/ProfileMenu.tsx:337 9435 + #: src/view/com/profile/ProfileMenu.tsx:329 9436 + #: src/view/com/profile/ProfileMenu.tsx:342 9474 9437 msgid "Unfollow account" 9475 9438 msgstr "" 9476 9439 ··· 9514 9477 9515 9478 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:725 9516 9479 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:731 9517 - #: src/view/com/profile/ProfileMenu.tsx:443 9518 - #: src/view/com/profile/ProfileMenu.tsx:449 9480 + #: src/view/com/profile/ProfileMenu.tsx:448 9481 + #: src/view/com/profile/ProfileMenu.tsx:454 9519 9482 msgid "Unmute account" 9520 9483 msgstr "" 9521 9484 ··· 9842 9805 9843 9806 #: src/components/verification/VerificationCreatePrompt.tsx:84 9844 9807 #: src/components/verification/VerificationCreatePrompt.tsx:86 9845 - #: src/view/com/profile/ProfileMenu.tsx:427 9846 - #: src/view/com/profile/ProfileMenu.tsx:430 9808 + #: src/view/com/profile/ProfileMenu.tsx:432 9809 + #: src/view/com/profile/ProfileMenu.tsx:435 9847 9810 msgid "Verify account" 9848 9811 msgstr "" 9849 9812 ··· 10599 10562 msgid "You have no lists." 10600 10563 msgstr "" 10601 10564 10602 - #: src/components/dialogs/StarterPackDialog.tsx:100 10565 + #: src/components/dialogs/StarterPackDialog.tsx:101 10603 10566 msgid "You have no starter packs." 10604 10567 msgstr "" 10605 10568
+7 -5
src/logger/metrics.ts
··· 48 48 // Screen events 49 49 'splash:signInPressed': {} 50 50 'splash:createAccountPressed': {} 51 - 'welcomeModal:signupClicked': {} 52 - 'welcomeModal:exploreClicked': {} 53 - 'welcomeModal:signinClicked': {} 54 - 'welcomeModal:dismissed': {} 55 - 'welcomeModal:presented': {} 56 51 'signup:nextPressed': { 57 52 activeStep: number 58 53 phoneVerificationRequired?: boolean ··· 326 321 | 'ChatsList' 327 322 | 'SendViaChatDialog' 328 323 } 324 + 'starterPack:addUser': { 325 + starterPack?: string 326 + } 327 + 'starterPack:removeUser': { 328 + starterPack?: string 329 + } 329 330 'starterPack:share': { 330 331 starterPack: string 331 332 shareType: 'link' | 'qrcode' ··· 357 358 'feed:interstitial:feedCard:press': {} 358 359 359 360 'profile:header:suggestedFollowsCard:press': {} 361 + 'profile:addToStarterPack': {} 360 362 361 363 'test:all:always': {} 362 364 'test:all:sometimes': {}
+3 -2
src/screens/Onboarding/Layout.tsx
··· 1 1 import React, {useState} from 'react' 2 2 import {ScrollView, View} from 'react-native' 3 + import {Dimensions} from 'react-native' 3 4 import {useSafeAreaInsets} from 'react-native-safe-area-context' 4 5 import {msg} from '@lingui/macro' 5 6 import {useLingui} from '@lingui/react' ··· 77 78 a.absolute, 78 79 a.z_10, 79 80 { 80 - left: '50%', 81 + left: isWeb ? '50%' : Dimensions.get('window').width / 2 - 45, 81 82 top: insets.top + 2, 82 - transform: [{translateX: '-50%'}], 83 83 }, 84 + web({transform: [{translateX: '-50%'}]}), 84 85 ]}> 85 86 <ButtonText>[DEV] Clear</ButtonText> 86 87 </Button>
+62 -39
src/state/session/index.tsx
··· 14 14 createAgentAndResume, 15 15 sessionAccountToSession, 16 16 } from './agent' 17 - import {getInitialState, reducer} from './reducer' 17 + import {type Action, getInitialState, reducer, type State} from './reducer' 18 18 19 19 export {isSignupQueued} from './util' 20 20 import {addSessionDebugLog} from './logging' ··· 46 46 }) 47 47 ApiContext.displayName = 'SessionApiContext' 48 48 49 + class SessionStore { 50 + private state: State 51 + private listeners = new Set<() => void>() 52 + 53 + constructor() { 54 + // Careful: By the time this runs, `persisted` needs to already be filled. 55 + const initialState = getInitialState(persisted.get('session').accounts) 56 + addSessionDebugLog({type: 'reducer:init', state: initialState}) 57 + this.state = initialState 58 + } 59 + 60 + getState = (): State => { 61 + return this.state 62 + } 63 + 64 + subscribe = (listener: () => void) => { 65 + this.listeners.add(listener) 66 + return () => { 67 + this.listeners.delete(listener) 68 + } 69 + } 70 + 71 + dispatch = (action: Action) => { 72 + const nextState = reducer(this.state, action) 73 + this.state = nextState 74 + // Persist synchronously without waiting for the React render cycle. 75 + if (nextState.needsPersist) { 76 + nextState.needsPersist = false 77 + const persistedData = { 78 + accounts: nextState.accounts, 79 + currentAccount: nextState.accounts.find( 80 + a => a.did === nextState.currentAgentState.did, 81 + ), 82 + } 83 + addSessionDebugLog({type: 'persisted:broadcast', data: persistedData}) 84 + persisted.write('session', persistedData) 85 + } 86 + this.listeners.forEach(listener => listener()) 87 + } 88 + } 89 + 49 90 export function Provider({children}: React.PropsWithChildren<{}>) { 50 91 const cancelPendingTask = useOneTaskAtATime() 51 - const [state, dispatch] = React.useReducer(reducer, null, () => { 52 - const initialState = getInitialState(persisted.get('session').accounts) 53 - addSessionDebugLog({type: 'reducer:init', state: initialState}) 54 - return initialState 55 - }) 92 + const [store] = React.useState(() => new SessionStore()) 93 + const state = React.useSyncExternalStore(store.subscribe, store.getState) 56 94 57 95 const onAgentSessionChange = React.useCallback( 58 96 (agent: BskyAgent, accountDid: string, sessionEvent: AtpSessionEvent) => { ··· 60 98 if (sessionEvent === 'expired' || sessionEvent === 'create-failed') { 61 99 emitSessionDropped() 62 100 } 63 - dispatch({ 101 + store.dispatch({ 64 102 type: 'received-agent-event', 65 103 agent, 66 104 refreshedAccount, ··· 68 106 sessionEvent, 69 107 }) 70 108 }, 71 - [], 109 + [store], 72 110 ) 73 111 74 112 const createAccount = React.useCallback<SessionApiContext['createAccount']>( ··· 84 122 if (signal.aborted) { 85 123 return 86 124 } 87 - dispatch({ 125 + store.dispatch({ 88 126 type: 'switched-to-account', 89 127 newAgent: agent, 90 128 newAccount: account, ··· 92 130 logger.metric('account:create:success', metrics, {statsig: true}) 93 131 addSessionDebugLog({type: 'method:end', method: 'createAccount', account}) 94 132 }, 95 - [onAgentSessionChange, cancelPendingTask], 133 + [store, onAgentSessionChange, cancelPendingTask], 96 134 ) 97 135 98 136 const login = React.useCallback<SessionApiContext['login']>( ··· 107 145 if (signal.aborted) { 108 146 return 109 147 } 110 - dispatch({ 148 + store.dispatch({ 111 149 type: 'switched-to-account', 112 150 newAgent: agent, 113 151 newAccount: account, ··· 119 157 ) 120 158 addSessionDebugLog({type: 'method:end', method: 'login', account}) 121 159 }, 122 - [onAgentSessionChange, cancelPendingTask], 160 + [store, onAgentSessionChange, cancelPendingTask], 123 161 ) 124 162 125 163 const logoutCurrentAccount = React.useCallback< ··· 128 166 logContext => { 129 167 addSessionDebugLog({type: 'method:start', method: 'logout'}) 130 168 cancelPendingTask() 131 - dispatch({ 169 + store.dispatch({ 132 170 type: 'logged-out-current-account', 133 171 }) 134 172 logger.metric( ··· 138 176 ) 139 177 addSessionDebugLog({type: 'method:end', method: 'logout'}) 140 178 }, 141 - [cancelPendingTask], 179 + [store, cancelPendingTask], 142 180 ) 143 181 144 182 const logoutEveryAccount = React.useCallback< ··· 147 185 logContext => { 148 186 addSessionDebugLog({type: 'method:start', method: 'logout'}) 149 187 cancelPendingTask() 150 - dispatch({ 188 + store.dispatch({ 151 189 type: 'logged-out-every-account', 152 190 }) 153 191 logger.metric( ··· 157 195 ) 158 196 addSessionDebugLog({type: 'method:end', method: 'logout'}) 159 197 }, 160 - [cancelPendingTask], 198 + [store, cancelPendingTask], 161 199 ) 162 200 163 201 const resumeSession = React.useCallback<SessionApiContext['resumeSession']>( ··· 176 214 if (signal.aborted) { 177 215 return 178 216 } 179 - dispatch({ 217 + store.dispatch({ 180 218 type: 'switched-to-account', 181 219 newAgent: agent, 182 220 newAccount: account, 183 221 }) 184 222 addSessionDebugLog({type: 'method:end', method: 'resumeSession', account}) 185 223 }, 186 - [onAgentSessionChange, cancelPendingTask], 224 + [store, onAgentSessionChange, cancelPendingTask], 187 225 ) 188 226 189 227 const partialRefreshSession = React.useCallback< ··· 193 231 const signal = cancelPendingTask() 194 232 const {data} = await agent.com.atproto.server.getSession() 195 233 if (signal.aborted) return 196 - dispatch({ 234 + store.dispatch({ 197 235 type: 'partial-refresh-session', 198 236 accountDid: agent.session!.did, 199 237 patch: { ··· 201 239 emailAuthFactor: data.emailAuthFactor, 202 240 }, 203 241 }) 204 - }, [state, cancelPendingTask]) 242 + }, [store, state, cancelPendingTask]) 205 243 206 244 const removeAccount = React.useCallback<SessionApiContext['removeAccount']>( 207 245 account => { ··· 211 249 account, 212 250 }) 213 251 cancelPendingTask() 214 - dispatch({ 252 + store.dispatch({ 215 253 type: 'removed-account', 216 254 accountDid: account.did, 217 255 }) 218 256 addSessionDebugLog({type: 'method:end', method: 'removeAccount', account}) 219 257 }, 220 - [cancelPendingTask], 258 + [store, cancelPendingTask], 221 259 ) 222 - 223 - React.useEffect(() => { 224 - if (state.needsPersist) { 225 - state.needsPersist = false 226 - const persistedData = { 227 - accounts: state.accounts, 228 - currentAccount: state.accounts.find( 229 - a => a.did === state.currentAgentState.did, 230 - ), 231 - } 232 - addSessionDebugLog({type: 'persisted:broadcast', data: persistedData}) 233 - persisted.write('session', persistedData) 234 - } 235 - }, [state]) 236 - 237 260 React.useEffect(() => { 238 261 return persisted.onUpdate('session', nextSession => { 239 262 const synced = nextSession 240 263 addSessionDebugLog({type: 'persisted:receive', data: synced}) 241 - dispatch({ 264 + store.dispatch({ 242 265 type: 'synced-accounts', 243 266 syncedAccounts: synced.accounts, 244 267 syncedCurrentDid: synced.currentAccount?.did, ··· 262 285 } 263 286 } 264 287 }) 265 - }, [state, resumeSession]) 288 + }, [store, state, resumeSession]) 266 289 267 290 const stateContext = React.useMemo( 268 291 () => ({
+6 -1
src/view/com/profile/ProfileMenu.tsx
··· 118 118 }) 119 119 }, [queryClient, profile.did]) 120 120 121 + const onPressAddToStarterPacks = React.useCallback(() => { 122 + logger.metric('profile:addToStarterPack', {}) 123 + addToStarterPacksDialogControl.open() 124 + }, [addToStarterPacksDialogControl]) 125 + 121 126 const onPressShare = React.useCallback(() => { 122 127 shareUrl(toShareUrl(makeProfileLink(profile))) 123 128 }, [profile]) ··· 349 354 <Menu.Item 350 355 testID="profileHeaderDropdownStarterPackAddRemoveBtn" 351 356 label={_(msg`Add to starter packs`)} 352 - onPress={addToStarterPacksDialogControl.open}> 357 + onPress={onPressAddToStarterPacks}> 353 358 <Menu.ItemText> 354 359 <Trans>Add to starter packs</Trans> 355 360 </Menu.ItemText>
-10
src/view/shell/index.web.tsx
··· 8 8 import {useIntentHandler} from '#/lib/hooks/useIntentHandler' 9 9 import {useWebMediaQueries} from '#/lib/hooks/useWebMediaQueries' 10 10 import {type NavigationProp} from '#/lib/routes/types' 11 - import {useGate} from '#/lib/statsig/statsig' 12 11 import {useIsDrawerOpen, useSetDrawerOpen} from '#/state/shell' 13 12 import {useComposerKeyboardShortcut} from '#/state/shell/composer/useComposerKeyboardShortcut' 14 13 import {useCloseAllActiveElements} from '#/state/util' ··· 20 19 import {LinkWarningDialog} from '#/components/dialogs/LinkWarning' 21 20 import {MutedWordsDialog} from '#/components/dialogs/MutedWords' 22 21 import {SigninDialog} from '#/components/dialogs/Signin' 23 - import {useWelcomeModal} from '#/components/hooks/useWelcomeModal' 24 22 import { 25 23 Outlet as PolicyUpdateOverlayPortalOutlet, 26 24 usePolicyUpdateContext, 27 25 } from '#/components/PolicyUpdateOverlay' 28 26 import {Outlet as PortalOutlet} from '#/components/Portal' 29 - import {WelcomeModal} from '#/components/WelcomeModal' 30 27 import {FlatNavigator, RoutesContainer} from '#/Navigation' 31 28 import {Composer} from './Composer.web' 32 29 import {DrawerContent} from './Drawer' ··· 42 39 const showDrawer = !isDesktop && isDrawerOpen 43 40 const [showDrawerDelayedExit, setShowDrawerDelayedExit] = useState(showDrawer) 44 41 const {state: policyUpdateState} = usePolicyUpdateContext() 45 - const welcomeModalControl = useWelcomeModal() 46 - const gate = useGate() 47 42 48 43 useLayoutEffect(() => { 49 44 if (showDrawer !== showDrawerDelayedExit) { ··· 80 75 <EmailDialog /> 81 76 <LinkWarningDialog /> 82 77 <Lightbox /> 83 - 84 - {/* Show welcome modal if the gate is enabled */} 85 - {welcomeModalControl.isOpen && gate('welcome_modal') && ( 86 - <WelcomeModal control={welcomeModalControl} /> 87 - )} 88 78 89 79 {/* Until policy update has been completed by the user, don't render anything that is portaled */} 90 80 {policyUpdateState.completed && (