Bluesky app fork with some witchin' additions 💫

Merge branch 'main' of https://github.com/bluesky-social/social-app

+342 -188
+5
.gitignore
··· 123 # deer 124 .direnv 125 .wrangler
··· 123 # deer 124 .direnv 125 .wrangler 126 + 127 + # bskyweb build output 128 + bskyweb/static/media/*.webp 129 + bskyweb/static/media/*.jpg 130 + bskyweb/static/media/*.png
+6
__tests__/lib/string.test.ts
··· 378 'https://music.apple.com/us/playlist/playlistName/playlistId', 379 'https://music.apple.com/us/album/albumName/albumId', 380 'https://music.apple.com/us/album/albumName/albumId?i=songId', 381 382 'https://vimeo.com/videoId', 383 'https://vimeo.com/videoId?autoplay=0', ··· 603 source: 'appleMusic', 604 playerUri: 605 'https://embed.music.apple.com/us/album/albumName/albumId?i=songId', 606 }, 607 608 {
··· 378 'https://music.apple.com/us/playlist/playlistName/playlistId', 379 'https://music.apple.com/us/album/albumName/albumId', 380 'https://music.apple.com/us/album/albumName/albumId?i=songId', 381 + 'https://music.apple.com/us/song/songName/songId', 382 383 'https://vimeo.com/videoId', 384 'https://vimeo.com/videoId?autoplay=0', ··· 604 source: 'appleMusic', 605 playerUri: 606 'https://embed.music.apple.com/us/album/albumName/albumId?i=songId', 607 + }, 608 + { 609 + type: 'apple_music_song', 610 + source: 'appleMusic', 611 + playerUri: 'https://embed.music.apple.com/us/song/songName/songId', 612 }, 613 614 {
+9 -10
app.config.js
··· 11 * 12 * @see https://docs.expo.dev/build-reference/variables/#built-in-environment-variables 13 */ 14 - const PLATFORM = process.env.EAS_BUILD_PLATFORM 15 16 const IS_TESTFLIGHT = process.env.EXPO_PUBLIC_ENV === 'testflight' 17 const IS_PRODUCTION = process.env.EXPO_PUBLIC_ENV === 'production' ··· 54 config: { 55 usesNonExemptEncryption: false, 56 }, 57 infoPlist: { 58 UIBackgroundModes: ['remote-notification'], 59 NSCameraUsageDescription: ··· 351 * Default set 352 */ 353 default_light: { 354 - ios: './assets/app-icons/ios_icon_default_light.png', 355 - android: './assets/app-icons/android_icon_default_light.png', 356 prerendered: true, 357 }, 358 default_dark: { 359 - ios: './assets/app-icons/ios_icon_default_dark.png', 360 - android: './assets/app-icons/android_icon_default_dark.png', 361 - prerendered: true, 362 - }, 363 - next: { 364 - ios: './assets/app-icons/ios_icon_default_next.png', 365 - android: './assets/app-icons/android_icon_default_next.png', 366 prerendered: true, 367 }, 368
··· 11 * 12 * @see https://docs.expo.dev/build-reference/variables/#built-in-environment-variables 13 */ 14 + const PLATFORM = process.env.EAS_BUILD_PLATFORM ?? 'web' 15 16 const IS_TESTFLIGHT = process.env.EXPO_PUBLIC_ENV === 'testflight' 17 const IS_PRODUCTION = process.env.EXPO_PUBLIC_ENV === 'production' ··· 54 config: { 55 usesNonExemptEncryption: false, 56 }, 57 + icon: 58 + PLATFORM === 'web' // web build doesn't like .icon files 59 + ? './assets/app-icons/ios_icon_default_next.png' 60 + : './assets/app-icons/ios_icon_default.icon', 61 infoPlist: { 62 UIBackgroundModes: ['remote-notification'], 63 NSCameraUsageDescription: ··· 355 * Default set 356 */ 357 default_light: { 358 + ios: './assets/app-icons/ios_icon_legacy_light.png', 359 + android: './assets/app-icons/android_icon_legacy_light.png', 360 prerendered: true, 361 }, 362 default_dark: { 363 + ios: './assets/app-icons/ios_icon_legacy_dark.png', 364 + android: './assets/app-icons/android_icon_legacy_dark.png', 365 prerendered: true, 366 }, 367
assets/app-icons/android_icon_default_dark.png assets/app-icons/android_icon_legacy_dark.png
assets/app-icons/android_icon_default_light.png assets/app-icons/android_icon_legacy_light.png
assets/app-icons/ios_icon_default.icon/Assets/iOS transparent.png

This is a binary file and will not be displayed.

+31
assets/app-icons/ios_icon_default.icon/icon.json
···
··· 1 + { 2 + "fill" : { 3 + "automatic-gradient" : "srgb:0.00000,0.41569,1.00000,1.00000" 4 + }, 5 + "groups" : [ 6 + { 7 + "layers" : [ 8 + { 9 + "fill" : "none", 10 + "glass" : false, 11 + "image-name" : "iOS transparent.png", 12 + "name" : "iOS transparent" 13 + } 14 + ], 15 + "shadow" : { 16 + "kind" : "neutral", 17 + "opacity" : 0.5 18 + }, 19 + "translucency" : { 20 + "enabled" : true, 21 + "value" : 0.5 22 + } 23 + } 24 + ], 25 + "supported-platforms" : { 26 + "circles" : [ 27 + "watchOS" 28 + ], 29 + "squares" : "shared" 30 + } 31 + }
assets/app-icons/ios_icon_default_dark.png assets/app-icons/ios_icon_legacy_dark.png
assets/app-icons/ios_icon_default_light.png assets/app-icons/ios_icon_legacy_light.png
+10
bskyembed/assets/logo_full_name.svg
···
··· 1 + <svg width="105" height="32" viewBox="0 0 105 32" fill="none" xmlns="http://www.w3.org/2000/svg"> 2 + <path d="M19.7901 9.77492C21.7947 11.2889 23.9508 14.3587 24.7425 16.0059C25.5342 14.3587 27.6903 11.2889 29.6949 9.77492C31.1413 8.68251 33.485 7.83725 33.485 10.5269C33.485 11.064 33.1789 15.0393 32.9993 15.6848C32.3752 17.9285 30.1009 18.5008 28.0778 18.1544C31.6141 18.7598 32.5136 20.7653 30.5709 22.7708C26.1996 27.2831 24.7425 20.3569 24.7425 20.3569C24.7425 20.3569 23.2854 27.2831 18.9142 22.7708C16.9714 20.7653 17.871 18.7598 21.4072 18.1544C19.3841 18.5008 17.1099 17.9285 16.4857 15.6848C16.3061 15.0393 16 11.064 16 10.5269C16 7.83725 18.3437 8.68251 19.7901 9.77492Z" fill="white"/> 3 + <path d="M44.3863 16.3646C45.5901 16.7932 46.2292 17.7837 46.2292 18.8924C46.2292 20.7698 44.9659 21.908 42.5434 21.908H37.5942V11.3828H42.3799C44.6835 11.3828 45.7982 12.5506 45.7982 14.1028C45.7982 15.1376 45.3226 15.8915 44.3863 16.3646ZM42.2313 13.0237H39.6006V15.7732H42.2313C43.2568 15.7732 43.8067 15.2411 43.8067 14.3541C43.8067 13.5411 43.2419 13.0237 42.2313 13.0237ZM39.6006 20.2524H42.4393C43.5689 20.2524 44.1782 19.735 44.1782 18.8037C44.1782 17.828 43.5986 17.3402 42.4393 17.3402H39.6006V20.2524Z" fill="white"/> 4 + <path d="M49.0111 21.908H47.1385V11.3828H49.0111V21.908Z" fill="white"/> 5 + <path d="M55.2202 18.5524V14.2802H57.0929V21.908H55.2797V20.7993C54.7 21.6567 53.8975 22.0854 52.872 22.0854C51.252 22.0854 50.1968 21.1098 50.1968 19.3359V14.2802H52.0694V19.0254C52.0694 19.9863 52.545 20.4741 53.5111 20.4741C54.4177 20.4741 55.2202 19.8089 55.2202 18.5524Z" fill="white"/> 6 + <path d="M65.6167 18.2272V18.6706H59.8799C60.0137 19.9863 60.7419 20.6367 61.8714 20.6367C62.7334 20.6367 63.3131 20.2672 63.6252 19.5428H65.4235C65.0222 21.095 63.6846 22.0854 61.8566 22.0854C60.7122 22.0854 59.7907 21.7159 59.0922 20.9915C58.3937 20.2672 58.037 19.3063 58.037 18.0941C58.037 16.8967 58.3788 15.9359 59.0773 15.1967C59.7759 14.4724 60.6825 14.1028 61.8269 14.1028C62.9861 14.1028 63.9076 14.4872 64.5912 15.2411C65.2749 15.995 65.6167 17.0002 65.6167 18.2272ZM61.812 15.5515C60.7865 15.5515 60.0731 16.1428 59.8948 17.3698H63.7441C63.5806 16.2611 62.8969 15.5515 61.812 15.5515Z" fill="white"/> 7 + <path d="M69.7673 22.115C67.5379 22.115 66.3638 21.2428 66.2598 19.4837H68.0878C68.1918 20.4298 68.6674 20.7846 69.797 20.7846C70.8076 20.7846 71.3129 20.4741 71.3129 19.868C71.3129 19.3211 70.9562 19.055 69.8118 18.8628L68.935 18.715C67.2555 18.4341 66.4232 17.6654 66.4232 16.4089C66.4232 14.975 67.5676 14.1028 69.6038 14.1028C71.7885 14.1028 72.9181 14.9602 72.9924 16.6898H71.2238C71.1792 15.7585 70.6293 15.4332 69.6038 15.4332C68.712 15.4332 68.2662 15.7289 68.2662 16.3202C68.2662 16.8524 68.6526 17.0889 69.5443 17.2515L70.5104 17.3993C72.3681 17.7393 73.1707 18.4193 73.1707 19.7202C73.1707 21.2576 71.9223 22.115 69.7673 22.115Z" fill="white"/> 8 + <path d="M81.3899 21.908H79.2497L77.0204 18.3602L75.8611 19.5132V21.908H74.0182V11.3828H75.8611V17.4437L78.9822 14.2802H81.2116L78.3134 17.1628L81.3899 21.908Z" fill="white"/> 9 + <path d="M86.2805 16.2019L86.9047 14.2802H88.8665L85.909 22.5289C85.5968 23.3715 85.2104 23.9776 84.72 24.3176C84.2295 24.6576 83.531 24.8202 82.6095 24.8202C82.2974 24.8202 82.0299 24.8054 81.7921 24.7759V23.3124H82.5055C83.3526 23.3124 83.7688 22.795 83.7688 22.0854C83.7688 21.7306 83.6499 21.2132 83.4121 20.548L81.1827 14.2802H83.204L83.8282 16.1872C84.289 17.6211 84.6902 19.0402 85.0469 20.4446C85.3739 19.2324 85.7901 17.8132 86.2805 16.2019Z" fill="white"/> 10 + </svg>
+4 -2
bskyembed/src/components/container.tsx
··· 37 return ( 38 <div 39 ref={ref} 40 - className="w-full bg-white text-black hover:bg-neutral-50 dark:bg-dimmedBg dark:hover:bg-dimmedBgLighten relative transition-colors max-w-[600px] min-w-[300px] flex border dark:border-slate-600 dark:text-slate-200 rounded-xl" 41 onClick={() => { 42 if (ref.current && href) { 43 // forwardRef requires preact/compat - let's keep it simple ··· 49 } 50 }}> 51 {href && <Link href={href} />} 52 - <div className="flex-1 px-4 pt-3 pb-2.5 max-w-full">{children}</div> 53 </div> 54 ) 55 }
··· 37 return ( 38 <div 39 ref={ref} 40 + className="w-full bg-brand text-black dark:bg-brand relative transition-colors max-w-[600px] min-w-[300px] flex items-center dark:text-slate-200 rounded-[20px] cursor-pointer hover:bg-opacity-90" 41 onClick={() => { 42 if (ref.current && href) { 43 // forwardRef requires preact/compat - let's keep it simple ··· 49 } 50 }}> 51 {href && <Link href={href} />} 52 + <div className="flex-1 px-[6px] pt-[6px] pb-2.5 max-w-full"> 53 + {children} 54 + </div> 55 </div> 56 ) 57 }
+3 -3
bskyembed/src/components/embed.tsx
··· 83 return ( 84 <Link 85 href={`/profile/${record.author.did}/post/${getRkey(record)}`} 86 - className="transition-colors hover:bg-neutral-100 dark:hover:bg-slate-700 border dark:border-slate-600 rounded-xl p-2 gap-1.5 w-full flex flex-col"> 87 <div className="flex gap-1.5 items-center"> 88 - <div className="w-4 h-4 rounded-full bg-neutral-300 dark:bg-slate-700 shrink-0"> 89 <img 90 className="rounded-full" 91 src={record.author.avatar} ··· 222 223 function Info({children}: {children: ComponentChildren}) { 224 return ( 225 - <div className="w-full rounded-xl border py-2 px-2.5 flex-row flex gap-2 bg-neutral-50"> 226 <img src={infoIcon} className="w-4 h-4 shrink-0 mt-0.5" /> 227 <p className="text-sm text-textLight dark:text-textDimmed">{children}</p> 228 </div>
··· 83 return ( 84 <Link 85 href={`/profile/${record.author.did}/post/${getRkey(record)}`} 86 + className="transition-colors hover:bg-blue-50 dark:hover:bg-slate-900 border dark:border-slate-600 rounded-xl p-2 gap-1.5 w-full flex flex-col"> 87 <div className="flex gap-1.5 items-center"> 88 + <div className="w-4 h-4 rounded-full bg-neutral-300 dark:bg-slate-900 shrink-0"> 89 <img 90 className="rounded-full" 91 src={record.author.avatar} ··· 222 223 function Info({children}: {children: ComponentChildren}) { 224 return ( 225 + <div className="w-full rounded-xl border py-2 px-2.5 flex-row flex gap-2 hover:bg-blue-50 dark:border-slate-600 dark:hover:bg-slate-900"> 226 <img src={infoIcon} className="w-4 h-4 shrink-0 mt-0.5" /> 227 <p className="text-sm text-textLight dark:text-textDimmed">{children}</p> 228 </div>
+63 -51
bskyembed/src/components/post.tsx
··· 6 } from '@atproto/api' 7 import {h} from 'preact' 8 9 - import replyIcon from '../../assets/bubble_filled_stroke2_corner2_rounded.svg' 10 - import likeIcon from '../../assets/heart2_filled_stroke2_corner0_rounded.svg' 11 - import logo from '../../assets/logo.svg' 12 - import repostIcon from '../../assets/repost_stroke2_corner2_rounded.svg' 13 import {CONTENT_LABELS} from '../labels' 14 import * as bsky from '../types/bsky' 15 import {niceDate} from '../util/nice-date' ··· 45 const verification = getVerificationState({profile: post.author}) 46 47 const href = `/profile/${post.author.did}/post/${getRkey(post)}` 48 return ( 49 <Container href={href}> 50 - <div className="flex-1 flex-col flex gap-2" lang={record?.langs?.[0]}> 51 - <div className="flex gap-2.5 items-center cursor-pointer w-full max-w-full"> 52 <Link 53 href={`/profile/${post.author.did}`} 54 className="rounded-full shrink-0"> ··· 80 @{post.author.handle} 81 </Link> 82 </div> 83 - <Link 84 - href={href} 85 - className="transition-transform hover:scale-110 shrink-0 self-start"> 86 - <img src={logo} className="h-8" /> 87 - </Link> 88 </div> 89 <PostContent record={record} /> 90 <Embed content={post.embed} labels={post.labels} /> 91 - <Link href={href}> 92 - <time 93 - datetime={new Date(post.indexedAt).toISOString()} 94 - className="text-textLight dark:text-textDimmed mt-1 text-sm hover:underline"> 95 - {niceDate(post.indexedAt)} 96 - </time> 97 - </Link> 98 - <div className="border-t dark:border-slate-600 w-full pt-2.5 flex items-center gap-5 text-sm cursor-pointer"> 99 - {!!post.likeCount && ( 100 - <div className="flex items-center gap-2 cursor-pointer"> 101 - <img src={likeIcon} className="w-5 h-5" /> 102 - <p className="font-bold text-neutral-500 dark:text-neutral-300 mb-px"> 103 - {prettyNumber(post.likeCount)} 104 - </p> 105 - </div> 106 - )} 107 - {!!post.repostCount && ( 108 - <div className="flex items-center gap-2 cursor-pointer"> 109 - <img src={repostIcon} className="w-5 h-5" /> 110 - <p className="font-bold text-neutral-500 dark:text-neutral-300 mb-px"> 111 - {prettyNumber(post.repostCount)} 112 - </p> 113 - </div> 114 - )} 115 - <div className="flex items-center gap-2 cursor-pointer"> 116 - <img src={replyIcon} className="w-5 h-5" /> 117 - <p className="font-bold text-neutral-500 dark:text-neutral-300 mb-px"> 118 - Reply 119 - </p> 120 </div> 121 - <div className="flex-1" /> 122 - <p className="cursor-pointer text-brand dark:text-brandLighten font-bold hover:underline hidden min-[450px]:inline"> 123 - {post.replyCount 124 - ? `Read ${prettyNumber(post.replyCount)} ${ 125 - post.replyCount > 1 ? 'replies' : 'reply' 126 - } on Bluesky` 127 - : `View on Bluesky`} 128 - </p> 129 - <p className="cursor-pointer text-brand font-bold hover:underline min-[450px]:hidden"> 130 - <span className="hidden min-[380px]:inline">View on </span>Bluesky 131 - </p> 132 </div> 133 </div> 134 </Container> 135 )
··· 6 } from '@atproto/api' 7 import {h} from 'preact' 8 9 + import logo from '../../assets/logo_full_name.svg' 10 + import {Like as LikeIcon} from '../icons/Like' 11 + import {Reply as ReplyIcon} from '../icons/Reply' 12 + import {Repost as RepostIcon} from '../icons/Repost' 13 import {CONTENT_LABELS} from '../labels' 14 import * as bsky from '../types/bsky' 15 import {niceDate} from '../util/nice-date' ··· 45 const verification = getVerificationState({profile: post.author}) 46 47 const href = `/profile/${post.author.did}/post/${getRkey(post)}` 48 + 49 return ( 50 <Container href={href}> 51 + <div 52 + className="flex-1 flex-col flex gap-2 bg-neutral-50 dark:bg-black dark:hover:bg-slate-900 hover:bg-blue-50 rounded-[14px] p-4" 53 + lang={record?.langs?.[0]}> 54 + <div className="flex gap-2.5 items-center cursor-pointer w-full max-w-full "> 55 <Link 56 href={`/profile/${post.author.did}`} 57 className="rounded-full shrink-0"> ··· 83 @{post.author.handle} 84 </Link> 85 </div> 86 </div> 87 <PostContent record={record} /> 88 <Embed content={post.embed} labels={post.labels} /> 89 + 90 + <div className="flex items-center justify-between w-full pt-2.5 text-sm"> 91 + <div className="flex items-center gap-3 text-sm cursor-pointer"> 92 + {!!post.likeCount && ( 93 + <div className="flex items-center gap-1 cursor-pointer group"> 94 + <LikeIcon 95 + width={20} 96 + height={20} 97 + className="text-slate-600 dark:text-slate-400 group-hover:text-neutral-800 dark:group-hover:text-white transition-colors" 98 + /> 99 + <p className="font-medium text-slate-600 text-neutral-600 dark:text-neutral-300 mb-px group-hover:text-neutral-800 dark:group-hover:text-white transition-colors dark:text-slate-400"> 100 + {prettyNumber(post.likeCount)} 101 + </p> 102 + </div> 103 + )} 104 + {!!post.replyCount && ( 105 + <div className="flex items-center gap-1 cursor-pointer group"> 106 + <ReplyIcon 107 + width={20} 108 + height={20} 109 + className="text-slate-600 dark:text-slate-400 group-hover:text-neutral-800 dark:group-hover:text-white transition-colors" 110 + /> 111 + <p className="font-medium text-slate-600 text-neutral-600 dark:text-neutral-300 mb-px group-hover:text-neutral-800 dark:group-hover:text-white transition-colors dark:text-slate-400"> 112 + {prettyNumber(post.replyCount)} 113 + </p> 114 + </div> 115 + )} 116 + 117 + {!!post.repostCount && ( 118 + <div className="flex items-center gap-1 cursor-pointer group"> 119 + <RepostIcon 120 + width={20} 121 + height={20} 122 + className="text-slate-600 dark:text-slate-400 group-hover:text-neutral-800 dark:group-hover:text-white transition-colors" 123 + /> 124 + <p className="font-medium text-slate-600 dark:text-slate-400 mb-px group-hover:text-neutral-800 dark:group-hover:text-white transition-colors"> 125 + {prettyNumber(post.repostCount)} 126 + </p> 127 + </div> 128 + )} 129 </div> 130 + <Link href={href}> 131 + <time 132 + datetime={new Date(post.indexedAt).toISOString()} 133 + className="text-slate-500 dark:text-textDimmed text-sm hover:underline dark:text-slate-500"> 134 + {niceDate(post.indexedAt)} 135 + </time> 136 + </Link> 137 </div> 138 + </div> 139 + <div className="flex items-center justify-end pt-2"> 140 + <Link 141 + href={href} 142 + className="transition-transform hover:scale-110 shrink-0"> 143 + <img src={logo} className="h-8" /> 144 + </Link> 145 </div> 146 </Container> 147 )
+28
bskyembed/src/icons/Like.tsx
···
··· 1 + import {h} from 'preact' 2 + 3 + export const Like = ({ 4 + width = 16, 5 + height = 17, 6 + fill = 'currentColor', 7 + className, 8 + }: { 9 + width?: number 10 + height?: number 11 + fill?: string 12 + className?: string 13 + }) => ( 14 + <svg 15 + className={className} 16 + width={width} 17 + height={height} 18 + viewBox="0 0 16 17" 19 + fill="none" 20 + xmlns="http://www.w3.org/2000/svg"> 21 + <path 22 + fillRule="evenodd" 23 + clipRule="evenodd" 24 + d="M11.1561 3.62664C10.3307 3.44261 9.35086 3.65762 8.47486 4.54615C8.34958 4.67323 8.17857 4.74478 8.00012 4.74478C7.82167 4.74478 7.65066 4.67324 7.52538 4.54616C6.64938 3.65762 5.66955 3.44261 4.84416 3.62664C4.0022 3.81438 3.25812 4.43047 2.89709 5.33069C2.21997 7.01907 2.83524 10.1257 8.00015 13.1315C13.165 10.1257 13.7803 7.01906 13.1032 5.33069C12.7421 4.43047 11.998 3.81437 11.1561 3.62664ZM14.3407 4.83438C15.4101 7.50098 14.0114 11.2942 8.32611 14.4808C8.12362 14.5943 7.87668 14.5943 7.6742 14.4808C1.98891 11.2942 0.590133 7.501 1.65956 4.83439C2.1788 3.53968 3.26862 2.61187 4.55399 2.32527C5.68567 2.07294 6.92237 2.32723 8.00012 3.18278C9.07786 2.32723 10.3146 2.07294 11.4462 2.32526C12.7316 2.61186 13.8214 3.53967 14.3407 4.83438Z" 25 + fill={fill} 26 + /> 27 + </svg> 28 + )
+28
bskyembed/src/icons/Reply.tsx
···
··· 1 + import {h} from 'preact' 2 + 3 + export const Reply = ({ 4 + width = 16, 5 + height = 17, 6 + fill = 'currentColor', 7 + className, 8 + }: { 9 + width?: number 10 + height?: number 11 + fill?: string 12 + className?: string 13 + }) => ( 14 + <svg 15 + className={className} 16 + width={width} 17 + height={height} 18 + viewBox="0 0 16 17" 19 + fill="none" 20 + xmlns="http://www.w3.org/2000/svg"> 21 + <path 22 + fillRule="evenodd" 23 + clipRule="evenodd" 24 + d="M1.3335 4.23242C1.3335 3.12785 2.22893 2.23242 3.3335 2.23242H12.6668C13.7714 2.23242 14.6668 3.12785 14.6668 4.23242V10.8991C14.6668 12.0037 13.7714 12.8991 12.6668 12.8991H8.18482L5.00983 14.8041C4.80387 14.9277 4.54737 14.9309 4.33836 14.8126C4.12936 14.6942 4.00016 14.4726 4.00016 14.2324V12.8991H3.3335C2.22893 12.8991 1.3335 12.0037 1.3335 10.8991V4.23242ZM3.3335 3.56576C2.96531 3.56576 2.66683 3.86423 2.66683 4.23242V10.8991C2.66683 11.2673 2.96531 11.5658 3.3335 11.5658H4.66683C5.03502 11.5658 5.3335 11.8642 5.3335 12.2324V13.055L7.65717 11.6608C7.76078 11.5986 7.87933 11.5658 8.00016 11.5658H12.6668C13.035 11.5658 13.3335 11.2673 13.3335 10.8991V4.23242C13.3335 3.86423 13.035 3.56576 12.6668 3.56576H3.3335Z" 25 + fill={fill} 26 + /> 27 + </svg> 28 + )
+26
bskyembed/src/icons/Repost.tsx
···
··· 1 + import {h} from 'preact' 2 + 3 + export const Repost = ({ 4 + width = 16, 5 + height = 17, 6 + fill = 'currentColor', 7 + className, 8 + }: { 9 + width?: number 10 + height?: number 11 + fill?: string 12 + className?: string 13 + }) => ( 14 + <svg 15 + className={className} 16 + width={width} 17 + height={height} 18 + viewBox="0 0 16 17" 19 + fill="none" 20 + xmlns="http://www.w3.org/2000/svg"> 21 + <path 22 + d="M3.86204 9.76164C4.12239 9.50134 4.54442 9.50131 4.80475 9.76164C5.06503 10.022 5.06503 10.444 4.80475 10.7044L3.94277 11.5663H11.3334C12.0697 11.5663 12.6667 10.9693 12.6667 10.233V8.89966C12.6667 8.53147 12.9652 8.233 13.3334 8.233C13.7015 8.23305 14.0001 8.53151 14.0001 8.89966V10.233C14.0001 11.7057 12.8061 12.8996 11.3334 12.8997H3.94277L4.80475 13.7616C5.06503 14.022 5.06503 14.444 4.80475 14.7044C4.54442 14.9647 4.12239 14.9646 3.86204 14.7044L2.3334 13.1757C1.8127 12.655 1.8127 11.811 2.3334 11.2903L3.86204 9.76164ZM2.00006 7.56633V6.233C2.00006 4.76024 3.19397 3.56633 4.66673 3.56633H12.0574L11.1954 2.70435C10.935 2.444 10.935 2.02199 11.1954 1.76164C11.4557 1.50134 11.8778 1.50131 12.1381 1.76164L13.6667 3.29029C14.1873 3.81096 14.1873 4.65503 13.6667 5.17571L12.1381 6.70435C11.8778 6.96468 11.4557 6.96465 11.1954 6.70435C10.935 6.444 10.935 6.02199 11.1954 5.76164L12.0574 4.89966H4.66673C3.93035 4.89966 3.3334 5.49662 3.3334 6.233V7.56633C3.3334 7.93449 3.03487 8.23294 2.66673 8.233C2.29854 8.233 2.00006 7.93452 2.00006 7.56633Z" 23 + fill={fill} 24 + /> 25 + </svg> 26 + )
+13 -5
src/components/MediaInsetBorder.tsx
··· 1 import type React from 'react' 2 3 - import {atoms as a, useTheme, type ViewStyleProp} from '#/alf' 4 import {Fill} from '#/components/Fill' 5 6 /** ··· 25 <Fill 26 style={[ 27 a.rounded_md, 28 - a.border, 29 opaque 30 ? [t.atoms.border_contrast_low] 31 : [ ··· 34 : t.atoms.border_contrast_high, 35 {opacity: 0.6}, 36 ], 37 - { 38 - pointerEvents: 'none', 39 - }, 40 style, 41 ]}> 42 {children}
··· 1 + import {StyleSheet} from 'react-native' 2 import type React from 'react' 3 4 + import {isHighDPI} from '#/lib/browser' 5 + import {atoms as a, platform, useTheme, type ViewStyleProp} from '#/alf' 6 import {Fill} from '#/components/Fill' 7 8 /** ··· 27 <Fill 28 style={[ 29 a.rounded_md, 30 + { 31 + borderWidth: platform({ 32 + native: StyleSheet.hairlineWidth, 33 + // while we generally use hairlineWidth (aka 1px), 34 + // we make an exception here for high DPI screens 35 + // as the 1px border is very noticeable -sfn 36 + web: isHighDPI ? 0.5 : StyleSheet.hairlineWidth, 37 + }), 38 + }, 39 opaque 40 ? [t.atoms.border_contrast_low] 41 : [ ··· 44 : t.atoms.border_contrast_high, 45 {opacity: 0.6}, 46 ], 47 + a.pointer_events_none, 48 style, 49 ]}> 50 {children}
+1
src/lib/browser.native.ts
··· 2 export const isFirefox = false 3 export const isTouchDevice = true 4 export const isAndroidWeb = false
··· 2 export const isFirefox = false 3 export const isTouchDevice = true 4 export const isAndroidWeb = false 5 + export const isHighDPI = true
+1
src/lib/browser.ts
··· 6 export const isTouchDevice = window.matchMedia('(pointer: coarse)').matches 7 export const isAndroidWeb = 8 /android/i.test(navigator.userAgent) && isTouchDevice
··· 6 export const isTouchDevice = window.matchMedia('(pointer: coarse)').matches 7 export const isAndroidWeb = 8 /android/i.test(navigator.userAgent) && isTouchDevice 9 + export const isHighDPI = window.matchMedia('(min-resolution: 2dppx)').matches
+7 -4
src/lib/hooks/useIntentHandler.ts
··· 5 6 import {useOpenComposer} from '#/lib/hooks/useOpenComposer' 7 import {logger} from '#/logger' 8 - import {isNative} from '#/platform/detection' 9 import {useSession} from '#/state/session' 10 import {useCloseAllActiveElements} from '#/state/util' 11 import { ··· 34 35 React.useEffect(() => { 36 const handleIncomingURL = async (url: string) => { 37 - if (isNative) { 38 - // Close in-app browser if it's open 39 - await WebBrowser.dismissBrowser().catch(() => {}) 40 } 41 42 const referrerInfo = Referrer.getReferrerInfo()
··· 5 6 import {useOpenComposer} from '#/lib/hooks/useOpenComposer' 7 import {logger} from '#/logger' 8 + import {isIOS, isNative} from '#/platform/detection' 9 import {useSession} from '#/state/session' 10 import {useCloseAllActiveElements} from '#/state/util' 11 import { ··· 34 35 React.useEffect(() => { 36 const handleIncomingURL = async (url: string) => { 37 + if (isIOS) { 38 + // Close in-app browser if it's open (iOS only) 39 + // TEMP: promise never resolves if the browser is not open, so don't await 40 + // https://github.com/expo/expo/issues/40710 41 + // add the await back when possible since it's needed to fix the IAB share bug -sfn 42 + /* await */ WebBrowser.dismissBrowser().catch(() => {}) 43 } 44 45 const referrerInfo = Referrer.getReferrerInfo()
+11 -2
src/lib/strings/embed-player.ts
··· 239 const type = pathParams[2] 240 const songId = urlp.searchParams.get('i') 241 242 - if (pathParams.length === 5 && (type === 'playlist' || type === 'album')) { 243 // We want to append the songId to the end of the url if it exists 244 const embedUri = `https://embed.music.apple.com${urlp.pathname}${ 245 - urlp.search ? '?i=' + songId : '' 246 }` 247 248 if (type === 'playlist') { ··· 264 source: 'appleMusic', 265 playerUri: embedUri, 266 } 267 } 268 } 269 }
··· 239 const type = pathParams[2] 240 const songId = urlp.searchParams.get('i') 241 242 + if ( 243 + pathParams.length === 5 && 244 + (type === 'playlist' || type === 'album' || type === 'song') 245 + ) { 246 // We want to append the songId to the end of the url if it exists 247 const embedUri = `https://embed.music.apple.com${urlp.pathname}${ 248 + songId ? `?i=${songId}` : '' 249 }` 250 251 if (type === 'playlist') { ··· 267 source: 'appleMusic', 268 playerUri: embedUri, 269 } 270 + } 271 + } else if (type === 'song') { 272 + return { 273 + type: 'apple_music_song', 274 + source: 'appleMusic', 275 + playerUri: embedUri, 276 } 277 } 278 }
+85 -86
src/locale/locales/en/messages.po
··· 95 msgid "{0, plural, one {following} other {following}}" 96 msgstr "" 97 98 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:476 99 msgid "{0, plural, one {like} other {likes}}" 100 msgstr "" 101 ··· 103 msgid "{0, plural, one {post} other {posts}}" 104 msgstr "" 105 106 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:460 107 msgid "{0, plural, one {quote} other {quotes}}" 108 msgstr "" 109 110 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:442 111 msgid "{0, plural, one {repost} other {reposts}}" 112 msgstr "" 113 114 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:487 115 msgid "{0, plural, one {save} other {saves}}" 116 msgstr "" 117 ··· 397 msgid "{firstAuthorName} verified you" 398 msgstr "" 399 400 - #: src/components/ProfileHoverCard/index.web.tsx:572 401 msgid "{following} following" 402 msgstr "" 403 ··· 630 msgid "Account removed from quick access" 631 msgstr "" 632 633 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:137 634 #: src/view/com/profile/ProfileMenu.tsx:156 635 msgctxt "toast" 636 msgid "Account unblocked" ··· 1144 msgid "App Passwords" 1145 msgstr "" 1146 1147 - #: src/components/moderation/LabelsOnMeDialog.tsx:152 1148 - #: src/components/moderation/LabelsOnMeDialog.tsx:155 1149 msgid "Appeal" 1150 msgstr "" 1151 1152 - #: src/components/moderation/LabelsOnMeDialog.tsx:270 1153 msgid "Appeal \"{0}\" label" 1154 msgstr "" 1155 1156 - #: src/components/moderation/LabelsOnMeDialog.tsx:260 1157 #: src/screens/Messages/components/ChatDisabled.tsx:103 1158 msgctxt "toast" 1159 msgid "Appeal submitted" ··· 1192 msgid "Apply Pull Request" 1193 msgstr "" 1194 1195 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:656 1196 msgid "Archived from {0}" 1197 msgstr "" 1198 1199 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:625 1200 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:664 1201 msgid "Archived post" 1202 msgstr "" 1203 ··· 1268 msgid "At least 8 characters" 1269 msgstr "" 1270 1271 - #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:62 1272 msgctxt "Name of app icon variant" 1273 msgid "Aurora" 1274 msgstr "" ··· 1283 msgid "Available" 1284 msgstr "" 1285 1286 - #: src/components/moderation/LabelsOnMeDialog.tsx:317 1287 - #: src/components/moderation/LabelsOnMeDialog.tsx:318 1288 #: src/screens/Login/ChooseAccountForm.tsx:90 1289 #: src/screens/Login/ChooseAccountForm.tsx:95 1290 #: src/screens/Login/ForgotPasswordForm.tsx:123 ··· 1355 msgstr "" 1356 1357 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:792 1358 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:333 1359 #: src/view/com/profile/ProfileMenu.tsx:495 1360 msgid "Block" 1361 msgstr "" ··· 1453 msgid "Bluesky" 1454 msgstr "" 1455 1456 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:686 1457 msgid "Bluesky cannot confirm the authenticity of the claimed date." 1458 msgstr "" 1459 1460 - #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:179 1461 msgctxt "Name of app icon variant" 1462 msgid "Bluesky Classic™" 1463 msgstr "" ··· 3016 #: src/screens/Profile/Header/EditProfileDialog.tsx:268 3017 #: src/screens/Profile/Header/EditProfileDialog.tsx:274 3018 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:181 3019 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:195 3020 msgid "Edit profile" 3021 msgstr "" 3022 3023 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184 3024 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:198 3025 msgid "Edit Profile" 3026 msgstr "" 3027 ··· 3347 msgid "Expires {0}" 3348 msgstr "" 3349 3350 - #: src/components/moderation/LabelsOnMeDialog.tsx:201 3351 #: src/components/moderation/ModerationDetailsDialog.tsx:210 3352 msgid "Expires in {0}" 3353 msgstr "" ··· 3556 msgid "Failed to send email, please try again." 3557 msgstr "" 3558 3559 - #: src/components/moderation/LabelsOnMeDialog.tsx:256 3560 #: src/screens/Messages/components/ChatDisabled.tsx:99 3561 msgid "Failed to submit appeal, please try again." 3562 msgstr "" ··· 3740 msgid "Fitness" 3741 msgstr "" 3742 3743 - #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:163 3744 msgctxt "Name of app icon variant" 3745 msgid "Flat Black" 3746 msgstr "" 3747 3748 - #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:131 3749 msgctxt "Name of app icon variant" 3750 msgid "Flat Blue" 3751 msgstr "" 3752 3753 - #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:147 3754 msgctxt "Name of app icon variant" 3755 msgid "Flat White" 3756 msgstr "" ··· 3764 #: src/components/ProfileHoverCard/index.web.tsx:496 3765 #: src/components/ProfileHoverCard/index.web.tsx:507 3766 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:131 3767 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:257 3768 #: src/screens/VideoFeed/index.tsx:856 3769 msgid "Follow" 3770 msgstr "" ··· 3775 msgstr "" 3776 3777 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:113 3778 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:242 3779 msgid "Follow {0}" 3780 msgstr "" 3781 ··· 3812 #. User is not following this account, click to follow back 3813 #: src/components/ProfileCard.tsx:518 3814 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:129 3815 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:255 3816 msgid "Follow back" 3817 msgstr "" 3818 ··· 3855 #: src/components/ProfileHoverCard/index.web.tsx:495 3856 #: src/components/ProfileHoverCard/index.web.tsx:506 3857 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:134 3858 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:253 3859 #: src/screens/VideoFeed/index.tsx:854 3860 msgid "Following" 3861 msgstr "" ··· 3867 msgstr "" 3868 3869 #: src/components/ProfileCard.tsx:474 3870 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:95 3871 msgid "Following {0}" 3872 msgstr "" 3873 ··· 4677 msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network." 4678 msgstr "" 4679 4680 - #: src/components/moderation/LabelsOnMeDialog.tsx:74 4681 msgid "Labels on your account" 4682 msgstr "" 4683 4684 - #: src/components/moderation/LabelsOnMeDialog.tsx:76 4685 msgid "Labels on your content" 4686 msgstr "" 4687 ··· 4902 msgid "Likes of your reposts notifications" 4903 msgstr "" 4904 4905 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:469 4906 msgid "Likes on this post" 4907 msgstr "" 4908 ··· 5196 msgid "Messages" 5197 msgstr "" 5198 5199 - #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:115 5200 msgctxt "Name of app icon variant" 5201 msgid "Midnight" 5202 msgstr "" ··· 5314 msgid "Mute" 5315 msgstr "" 5316 5317 - #: src/components/RichTextTag.tsx:140 5318 - #: src/components/RichTextTag.tsx:153 5319 msgid "Mute {tag}" 5320 msgstr "" 5321 ··· 5602 msgid "Next" 5603 msgstr "" 5604 5605 - #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:42 5606 - msgctxt "Name of app icon variant" 5607 - msgid "Next" 5608 - msgstr "" 5609 - 5610 #: src/view/com/lightbox/Lightbox.web.tsx:170 5611 msgid "Next image" 5612 msgstr "" ··· 5646 msgstr "" 5647 5648 #: src/components/ProfileCard.tsx:496 5649 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:118 5650 msgid "No longer following {0}" 5651 msgstr "" 5652 ··· 5872 msgstr "" 5873 5874 #: src/screens/Login/PasswordUpdatedForm.tsx:37 5875 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:691 5876 msgid "Okay" 5877 msgstr "" 5878 ··· 6274 msgid "Pin to your profile" 6275 msgstr "" 6276 6277 - #: src/view/com/posts/PostFeedReason.tsx:125 6278 msgid "Pinned" 6279 msgstr "" 6280 ··· 6424 msgid "Please enter your username" 6425 msgstr "" 6426 6427 - #: src/components/moderation/LabelsOnMeDialog.tsx:292 6428 msgid "Please explain why you think this label was incorrectly applied by {0}" 6429 msgstr "" 6430 ··· 6511 msgid "Post failed to upload. Please check your Internet connection and try again." 6512 msgstr "" 6513 6514 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:133 6515 - #: src/screens/PostThread/components/ThreadItemPost.tsx:111 6516 - #: src/screens/PostThread/components/ThreadItemTreePost.tsx:107 6517 #: src/screens/VideoFeed/index.tsx:534 6518 msgid "Post has been deleted" 6519 msgstr "" ··· 6774 msgid "Quotes" 6775 msgstr "" 6776 6777 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:453 6778 msgid "Quotes of this post" 6779 msgstr "" 6780 ··· 7276 msgid "Reposts" 7277 msgstr "" 7278 7279 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:435 7280 msgid "Reposts of this post" 7281 msgstr "" 7282 ··· 7429 msgid "Save" 7430 msgstr "" 7431 7432 - #: src/view/com/lightbox/ImageViewing/index.tsx:613 7433 msgctxt "action" 7434 msgid "Save" 7435 msgstr "" ··· 7609 msgid "Security step required" 7610 msgstr "" 7611 7612 - #: src/components/RichTextTag.tsx:111 7613 msgid "See {tag} posts" 7614 msgstr "" 7615 7616 - #: src/components/RichTextTag.tsx:124 7617 msgid "See {tag} posts by user" 7618 msgstr "" 7619 7620 - #: src/components/RichTextTag.tsx:118 7621 msgid "See #{tag} posts" 7622 msgstr "" 7623 7624 - #: src/components/RichTextTag.tsx:132 7625 msgid "See #{tag} posts by user" 7626 msgstr "" 7627 ··· 7817 msgid "Send message" 7818 msgstr "" 7819 7820 - #: src/components/PostControls/ShareMenu/RecentChats.tsx:122 7821 msgid "Send post to {name}" 7822 msgstr "" 7823 ··· 7952 msgid "Share" 7953 msgstr "" 7954 7955 - #: src/view/com/lightbox/ImageViewing/index.tsx:622 7956 msgctxt "action" 7957 msgid "Share" 7958 msgstr "" ··· 8124 msgid "Show warning and filter from feeds" 8125 msgstr "" 8126 8127 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:627 8128 msgid "Shows information about when this post was created" 8129 msgstr "" 8130 ··· 8338 msgid "Sort replies to the same post by:" 8339 msgstr "" 8340 8341 - #: src/components/moderation/LabelsOnMeDialog.tsx:180 8342 #: src/components/moderation/ModerationDetailsDialog.tsx:188 8343 msgid "Source: <0>{sourceName}</0>" 8344 msgstr "" ··· 8361 msgid "Sports" 8362 msgstr "" 8363 8364 - #: src/components/PostControls/ShareMenu/RecentChats.tsx:207 8365 msgid "Start a conversation, and it will appear here." 8366 msgstr "" 8367 ··· 8435 8436 #: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:117 8437 #: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:123 8438 - #: src/components/moderation/LabelsOnMeDialog.tsx:326 8439 - #: src/components/moderation/LabelsOnMeDialog.tsx:327 8440 #: src/screens/Messages/components/ChatDisabled.tsx:154 8441 #: src/screens/Messages/components/ChatDisabled.tsx:155 8442 msgid "Submit" ··· 8510 msgid "Suggestive" 8511 msgstr "" 8512 8513 - #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:86 8514 msgctxt "Name of app icon variant" 8515 msgid "Sunrise" 8516 msgstr "" 8517 8518 - #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:100 8519 msgctxt "Name of app icon variant" 8520 msgid "Sunset" 8521 msgstr "" ··· 8655 msgid "Text field" 8656 msgstr "" 8657 8658 - #: src/components/moderation/LabelsOnMeDialog.tsx:290 8659 #: src/screens/Messages/components/ChatDisabled.tsx:120 8660 msgid "Text input field" 8661 msgstr "" ··· 8702 msgid "That's everything!" 8703 msgstr "" 8704 8705 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:329 8706 #: src/view/com/profile/ProfileMenu.tsx:483 8707 msgid "The account will be able to interact with you after unblocking." 8708 msgstr "" ··· 8749 msgid "The feed has been replaced with Discover." 8750 msgstr "" 8751 8752 - #: src/components/moderation/LabelsOnMeDialog.tsx:61 8753 msgid "The following labels were applied to your account." 8754 msgstr "" 8755 8756 - #: src/components/moderation/LabelsOnMeDialog.tsx:62 8757 msgid "The following labels were applied to your content." 8758 msgstr "" 8759 ··· 8877 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:420 8878 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:90 8879 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:101 8880 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:104 8881 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:127 8882 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:141 8883 #: src/view/com/profile/ProfileMenu.tsx:136 8884 #: src/view/com/profile/ProfileMenu.tsx:146 8885 #: src/view/com/profile/ProfileMenu.tsx:160 ··· 8940 msgid "This action can be undone at any time." 8941 msgstr "" 8942 8943 - #: src/components/moderation/LabelsOnMeDialog.tsx:273 8944 msgid "This appeal will be sent to <0>{sourceName}</0>." 8945 msgstr "" 8946 ··· 9036 msgid "This label was applied by the author." 9037 msgstr "" 9038 9039 - #: src/components/moderation/LabelsOnMeDialog.tsx:167 9040 msgid "This label was applied by you." 9041 msgstr "" 9042 ··· 9064 msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us." 9065 msgstr "" 9066 9067 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:667 9068 msgid "This post claims to have been created on <0>{0}</0>, but was first seen by Bluesky on <1>{1}</1>." 9069 msgstr "" 9070 ··· 9234 #: src/components/dms/MessageContextMenu.tsx:139 9235 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:476 9236 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:478 9237 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:589 9238 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:592 9239 msgid "Translate" 9240 msgstr "" 9241 ··· 9323 #: src/components/dms/MessagesListBlockedFooter.tsx:104 9324 #: src/components/dms/MessagesListBlockedFooter.tsx:112 9325 #: src/components/dms/MessagesListBlockedFooter.tsx:119 9326 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:213 9327 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:333 9328 #: src/screens/ProfileList/components/Header.tsx:171 9329 #: src/screens/ProfileList/components/Header.tsx:178 9330 #: src/view/com/profile/ProfileMenu.tsx:495 9331 msgid "Unblock" 9332 msgstr "" 9333 9334 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:218 9335 msgctxt "action" 9336 msgid "Unblock" 9337 msgstr "" ··· 9343 msgid "Unblock account" 9344 msgstr "" 9345 9346 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:327 9347 #: src/view/com/profile/ProfileMenu.tsx:477 9348 msgid "Unblock Account?" 9349 msgstr "" ··· 9373 msgid "Unfollow" 9374 msgstr "" 9375 9376 - #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:241 9377 msgid "Unfollow {0}" 9378 msgstr "" 9379 ··· 9418 msgid "Unmute" 9419 msgstr "" 9420 9421 - #: src/components/RichTextTag.tsx:140 9422 - #: src/components/RichTextTag.tsx:153 9423 msgid "Unmute {tag}" 9424 msgstr "" 9425 ··· 10573 msgid "You joined Bluesky using a starter pack {timeAgoString} ago" 10574 msgstr "" 10575 10576 - #: src/components/moderation/LabelsOnMeDialog.tsx:81 10577 msgid "You may appeal non-self labels if you feel they were placed in error." 10578 msgstr "" 10579 10580 - #: src/components/moderation/LabelsOnMeDialog.tsx:86 10581 msgid "You may appeal these labels if you feel they were placed in error." 10582 msgstr "" 10583 ··· 10714 #: src/screens/Deactivated.tsx:89 10715 #: src/screens/Settings/components/DeactivateAccountDialog.tsx:54 10716 msgid "You're signed in with an App Password. Please sign in with your main password to continue deactivating your account." 10717 msgstr "" 10718 10719 #: src/components/moderation/ModerationDetailsDialog.tsx:110
··· 95 msgid "{0, plural, one {following} other {following}}" 96 msgstr "" 97 98 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:477 99 msgid "{0, plural, one {like} other {likes}}" 100 msgstr "" 101 ··· 103 msgid "{0, plural, one {post} other {posts}}" 104 msgstr "" 105 106 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:461 107 msgid "{0, plural, one {quote} other {quotes}}" 108 msgstr "" 109 110 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:443 111 msgid "{0, plural, one {repost} other {reposts}}" 112 msgstr "" 113 114 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:488 115 msgid "{0, plural, one {save} other {saves}}" 116 msgstr "" 117 ··· 397 msgid "{firstAuthorName} verified you" 398 msgstr "" 399 400 + #: src/components/ProfileHoverCard/index.web.tsx:577 401 msgid "{following} following" 402 msgstr "" 403 ··· 630 msgid "Account removed from quick access" 631 msgstr "" 632 633 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:138 634 #: src/view/com/profile/ProfileMenu.tsx:156 635 msgctxt "toast" 636 msgid "Account unblocked" ··· 1144 msgid "App Passwords" 1145 msgstr "" 1146 1147 + #: src/components/moderation/LabelsOnMeDialog.tsx:154 1148 + #: src/components/moderation/LabelsOnMeDialog.tsx:157 1149 msgid "Appeal" 1150 msgstr "" 1151 1152 + #: src/components/moderation/LabelsOnMeDialog.tsx:281 1153 msgid "Appeal \"{0}\" label" 1154 msgstr "" 1155 1156 + #: src/components/moderation/LabelsOnMeDialog.tsx:271 1157 #: src/screens/Messages/components/ChatDisabled.tsx:103 1158 msgctxt "toast" 1159 msgid "Appeal submitted" ··· 1192 msgid "Apply Pull Request" 1193 msgstr "" 1194 1195 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:658 1196 msgid "Archived from {0}" 1197 msgstr "" 1198 1199 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:627 1200 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:666 1201 msgid "Archived post" 1202 msgstr "" 1203 ··· 1268 msgid "At least 8 characters" 1269 msgstr "" 1270 1271 + #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:48 1272 msgctxt "Name of app icon variant" 1273 msgid "Aurora" 1274 msgstr "" ··· 1283 msgid "Available" 1284 msgstr "" 1285 1286 + #: src/components/moderation/LabelsOnMeDialog.tsx:333 1287 + #: src/components/moderation/LabelsOnMeDialog.tsx:334 1288 #: src/screens/Login/ChooseAccountForm.tsx:90 1289 #: src/screens/Login/ChooseAccountForm.tsx:95 1290 #: src/screens/Login/ForgotPasswordForm.tsx:123 ··· 1355 msgstr "" 1356 1357 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:792 1358 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:336 1359 #: src/view/com/profile/ProfileMenu.tsx:495 1360 msgid "Block" 1361 msgstr "" ··· 1453 msgid "Bluesky" 1454 msgstr "" 1455 1456 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:688 1457 msgid "Bluesky cannot confirm the authenticity of the claimed date." 1458 msgstr "" 1459 1460 + #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:165 1461 msgctxt "Name of app icon variant" 1462 msgid "Bluesky Classic™" 1463 msgstr "" ··· 3016 #: src/screens/Profile/Header/EditProfileDialog.tsx:268 3017 #: src/screens/Profile/Header/EditProfileDialog.tsx:274 3018 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:181 3019 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:196 3020 msgid "Edit profile" 3021 msgstr "" 3022 3023 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:184 3024 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:199 3025 msgid "Edit Profile" 3026 msgstr "" 3027 ··· 3347 msgid "Expires {0}" 3348 msgstr "" 3349 3350 + #: src/components/moderation/LabelsOnMeDialog.tsx:203 3351 #: src/components/moderation/ModerationDetailsDialog.tsx:210 3352 msgid "Expires in {0}" 3353 msgstr "" ··· 3556 msgid "Failed to send email, please try again." 3557 msgstr "" 3558 3559 + #: src/components/moderation/LabelsOnMeDialog.tsx:265 3560 #: src/screens/Messages/components/ChatDisabled.tsx:99 3561 msgid "Failed to submit appeal, please try again." 3562 msgstr "" ··· 3740 msgid "Fitness" 3741 msgstr "" 3742 3743 + #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:149 3744 msgctxt "Name of app icon variant" 3745 msgid "Flat Black" 3746 msgstr "" 3747 3748 + #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:117 3749 msgctxt "Name of app icon variant" 3750 msgid "Flat Blue" 3751 msgstr "" 3752 3753 + #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:133 3754 msgctxt "Name of app icon variant" 3755 msgid "Flat White" 3756 msgstr "" ··· 3764 #: src/components/ProfileHoverCard/index.web.tsx:496 3765 #: src/components/ProfileHoverCard/index.web.tsx:507 3766 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:131 3767 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:258 3768 #: src/screens/VideoFeed/index.tsx:856 3769 msgid "Follow" 3770 msgstr "" ··· 3775 msgstr "" 3776 3777 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:113 3778 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:243 3779 msgid "Follow {0}" 3780 msgstr "" 3781 ··· 3812 #. User is not following this account, click to follow back 3813 #: src/components/ProfileCard.tsx:518 3814 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:129 3815 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:256 3816 msgid "Follow back" 3817 msgstr "" 3818 ··· 3855 #: src/components/ProfileHoverCard/index.web.tsx:495 3856 #: src/components/ProfileHoverCard/index.web.tsx:506 3857 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:134 3858 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:254 3859 #: src/screens/VideoFeed/index.tsx:854 3860 msgid "Following" 3861 msgstr "" ··· 3867 msgstr "" 3868 3869 #: src/components/ProfileCard.tsx:474 3870 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:96 3871 msgid "Following {0}" 3872 msgstr "" 3873 ··· 4677 msgid "Labels are annotations on users and content. They can be used to hide, warn, and categorize the network." 4678 msgstr "" 4679 4680 + #: src/components/moderation/LabelsOnMeDialog.tsx:76 4681 msgid "Labels on your account" 4682 msgstr "" 4683 4684 + #: src/components/moderation/LabelsOnMeDialog.tsx:78 4685 msgid "Labels on your content" 4686 msgstr "" 4687 ··· 4902 msgid "Likes of your reposts notifications" 4903 msgstr "" 4904 4905 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:470 4906 msgid "Likes on this post" 4907 msgstr "" 4908 ··· 5196 msgid "Messages" 5197 msgstr "" 5198 5199 + #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:101 5200 msgctxt "Name of app icon variant" 5201 msgid "Midnight" 5202 msgstr "" ··· 5314 msgid "Mute" 5315 msgstr "" 5316 5317 + #: src/components/RichTextTag.tsx:141 5318 + #: src/components/RichTextTag.tsx:154 5319 msgid "Mute {tag}" 5320 msgstr "" 5321 ··· 5602 msgid "Next" 5603 msgstr "" 5604 5605 #: src/view/com/lightbox/Lightbox.web.tsx:170 5606 msgid "Next image" 5607 msgstr "" ··· 5641 msgstr "" 5642 5643 #: src/components/ProfileCard.tsx:496 5644 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:119 5645 msgid "No longer following {0}" 5646 msgstr "" 5647 ··· 5867 msgstr "" 5868 5869 #: src/screens/Login/PasswordUpdatedForm.tsx:37 5870 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:693 5871 msgid "Okay" 5872 msgstr "" 5873 ··· 6269 msgid "Pin to your profile" 6270 msgstr "" 6271 6272 + #: src/view/com/posts/PostFeedReason.tsx:126 6273 msgid "Pinned" 6274 msgstr "" 6275 ··· 6419 msgid "Please enter your username" 6420 msgstr "" 6421 6422 + #: src/components/moderation/LabelsOnMeDialog.tsx:308 6423 msgid "Please explain why you think this label was incorrectly applied by {0}" 6424 msgstr "" 6425 ··· 6506 msgid "Post failed to upload. Please check your Internet connection and try again." 6507 msgstr "" 6508 6509 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:134 6510 + #: src/screens/PostThread/components/ThreadItemPost.tsx:112 6511 + #: src/screens/PostThread/components/ThreadItemTreePost.tsx:108 6512 #: src/screens/VideoFeed/index.tsx:534 6513 msgid "Post has been deleted" 6514 msgstr "" ··· 6769 msgid "Quotes" 6770 msgstr "" 6771 6772 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:454 6773 msgid "Quotes of this post" 6774 msgstr "" 6775 ··· 7271 msgid "Reposts" 7272 msgstr "" 7273 7274 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:436 7275 msgid "Reposts of this post" 7276 msgstr "" 7277 ··· 7424 msgid "Save" 7425 msgstr "" 7426 7427 + #: src/view/com/lightbox/ImageViewing/index.tsx:614 7428 msgctxt "action" 7429 msgid "Save" 7430 msgstr "" ··· 7604 msgid "Security step required" 7605 msgstr "" 7606 7607 + #: src/components/RichTextTag.tsx:112 7608 msgid "See {tag} posts" 7609 msgstr "" 7610 7611 + #: src/components/RichTextTag.tsx:125 7612 msgid "See {tag} posts by user" 7613 msgstr "" 7614 7615 + #: src/components/RichTextTag.tsx:119 7616 msgid "See #{tag} posts" 7617 msgstr "" 7618 7619 + #: src/components/RichTextTag.tsx:133 7620 msgid "See #{tag} posts by user" 7621 msgstr "" 7622 ··· 7812 msgid "Send message" 7813 msgstr "" 7814 7815 + #: src/components/PostControls/ShareMenu/RecentChats.tsx:121 7816 msgid "Send post to {name}" 7817 msgstr "" 7818 ··· 7947 msgid "Share" 7948 msgstr "" 7949 7950 + #: src/view/com/lightbox/ImageViewing/index.tsx:623 7951 msgctxt "action" 7952 msgid "Share" 7953 msgstr "" ··· 8119 msgid "Show warning and filter from feeds" 8120 msgstr "" 8121 8122 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:629 8123 msgid "Shows information about when this post was created" 8124 msgstr "" 8125 ··· 8333 msgid "Sort replies to the same post by:" 8334 msgstr "" 8335 8336 + #: src/components/moderation/LabelsOnMeDialog.tsx:182 8337 #: src/components/moderation/ModerationDetailsDialog.tsx:188 8338 msgid "Source: <0>{sourceName}</0>" 8339 msgstr "" ··· 8356 msgid "Sports" 8357 msgstr "" 8358 8359 + #: src/components/PostControls/ShareMenu/RecentChats.tsx:206 8360 msgid "Start a conversation, and it will appear here." 8361 msgstr "" 8362 ··· 8430 8431 #: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:117 8432 #: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:123 8433 + #: src/components/moderation/LabelsOnMeDialog.tsx:342 8434 + #: src/components/moderation/LabelsOnMeDialog.tsx:343 8435 #: src/screens/Messages/components/ChatDisabled.tsx:154 8436 #: src/screens/Messages/components/ChatDisabled.tsx:155 8437 msgid "Submit" ··· 8505 msgid "Suggestive" 8506 msgstr "" 8507 8508 + #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:72 8509 msgctxt "Name of app icon variant" 8510 msgid "Sunrise" 8511 msgstr "" 8512 8513 + #: src/screens/Settings/AppIconSettings/useAppIconSets.ts:86 8514 msgctxt "Name of app icon variant" 8515 msgid "Sunset" 8516 msgstr "" ··· 8650 msgid "Text field" 8651 msgstr "" 8652 8653 + #: src/components/moderation/LabelsOnMeDialog.tsx:306 8654 #: src/screens/Messages/components/ChatDisabled.tsx:120 8655 msgid "Text input field" 8656 msgstr "" ··· 8697 msgid "That's everything!" 8698 msgstr "" 8699 8700 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:332 8701 #: src/view/com/profile/ProfileMenu.tsx:483 8702 msgid "The account will be able to interact with you after unblocking." 8703 msgstr "" ··· 8744 msgid "The feed has been replaced with Discover." 8745 msgstr "" 8746 8747 + #: src/components/moderation/LabelsOnMeDialog.tsx:63 8748 msgid "The following labels were applied to your account." 8749 msgstr "" 8750 8751 + #: src/components/moderation/LabelsOnMeDialog.tsx:64 8752 msgid "The following labels were applied to your content." 8753 msgstr "" 8754 ··· 8872 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:420 8873 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:90 8874 #: src/screens/PostThread/components/ThreadItemAnchorFollowButton.tsx:101 8875 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:105 8876 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:128 8877 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:142 8878 #: src/view/com/profile/ProfileMenu.tsx:136 8879 #: src/view/com/profile/ProfileMenu.tsx:146 8880 #: src/view/com/profile/ProfileMenu.tsx:160 ··· 8935 msgid "This action can be undone at any time." 8936 msgstr "" 8937 8938 + #: src/components/moderation/LabelsOnMeDialog.tsx:284 8939 msgid "This appeal will be sent to <0>{sourceName}</0>." 8940 msgstr "" 8941 ··· 9031 msgid "This label was applied by the author." 9032 msgstr "" 9033 9034 + #: src/components/moderation/LabelsOnMeDialog.tsx:169 9035 msgid "This label was applied by you." 9036 msgstr "" 9037 ··· 9059 msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us." 9060 msgstr "" 9061 9062 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:669 9063 msgid "This post claims to have been created on <0>{0}</0>, but was first seen by Bluesky on <1>{1}</1>." 9064 msgstr "" 9065 ··· 9229 #: src/components/dms/MessageContextMenu.tsx:139 9230 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:476 9231 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:478 9232 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:591 9233 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:594 9234 msgid "Translate" 9235 msgstr "" 9236 ··· 9318 #: src/components/dms/MessagesListBlockedFooter.tsx:104 9319 #: src/components/dms/MessagesListBlockedFooter.tsx:112 9320 #: src/components/dms/MessagesListBlockedFooter.tsx:119 9321 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:214 9322 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:336 9323 #: src/screens/ProfileList/components/Header.tsx:171 9324 #: src/screens/ProfileList/components/Header.tsx:178 9325 #: src/view/com/profile/ProfileMenu.tsx:495 9326 msgid "Unblock" 9327 msgstr "" 9328 9329 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:219 9330 msgctxt "action" 9331 msgid "Unblock" 9332 msgstr "" ··· 9338 msgid "Unblock account" 9339 msgstr "" 9340 9341 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:330 9342 #: src/view/com/profile/ProfileMenu.tsx:477 9343 msgid "Unblock Account?" 9344 msgstr "" ··· 9368 msgid "Unfollow" 9369 msgstr "" 9370 9371 + #: src/screens/Profile/Header/ProfileHeaderStandard.tsx:242 9372 msgid "Unfollow {0}" 9373 msgstr "" 9374 ··· 9413 msgid "Unmute" 9414 msgstr "" 9415 9416 + #: src/components/RichTextTag.tsx:141 9417 + #: src/components/RichTextTag.tsx:154 9418 msgid "Unmute {tag}" 9419 msgstr "" 9420 ··· 10568 msgid "You joined Bluesky using a starter pack {timeAgoString} ago" 10569 msgstr "" 10570 10571 + #: src/components/moderation/LabelsOnMeDialog.tsx:83 10572 msgid "You may appeal non-self labels if you feel they were placed in error." 10573 msgstr "" 10574 10575 + #: src/components/moderation/LabelsOnMeDialog.tsx:88 10576 msgid "You may appeal these labels if you feel they were placed in error." 10577 msgstr "" 10578 ··· 10709 #: src/screens/Deactivated.tsx:89 10710 #: src/screens/Settings/components/DeactivateAccountDialog.tsx:54 10711 msgid "You're signed in with an App Password. Please sign in with your main password to continue deactivating your account." 10712 + msgstr "" 10713 + 10714 + #: src/components/moderation/LabelsOnMeDialog.tsx:261 10715 + msgid "You've already appealed this label and it's being reviewed by our moderation team." 10716 msgstr "" 10717 10718 #: src/components/moderation/ModerationDetailsDialog.tsx:110
+4 -18
src/screens/Settings/AppIconSettings/useAppIconSets.ts
··· 14 name: _(msg({context: 'Name of app icon variant', message: 'Light'})), 15 iosImage: () => { 16 return require( 17 - `../../../../assets/app-icons/ios_icon_default_light.png`, 18 ) 19 }, 20 androidImage: () => { 21 return require( 22 - `../../../../assets/app-icons/android_icon_default_light.png`, 23 ) 24 }, 25 }, ··· 28 name: _(msg({context: 'Name of app icon variant', message: 'Dark'})), 29 iosImage: () => { 30 return require( 31 - `../../../../assets/app-icons/ios_icon_default_dark.png`, 32 - ) 33 - }, 34 - androidImage: () => { 35 - return require( 36 - `../../../../assets/app-icons/android_icon_default_dark.png`, 37 - ) 38 - }, 39 - }, 40 - { 41 - id: 'next', 42 - name: _(msg({context: 'Name of app icon variant', message: 'Next'})), 43 - iosImage: () => { 44 - return require( 45 - `../../../../assets/app-icons/ios_icon_default_next.png`, 46 ) 47 }, 48 androidImage: () => { 49 return require( 50 - `../../../../assets/app-icons/android_icon_default_next.png`, 51 ) 52 }, 53 },
··· 14 name: _(msg({context: 'Name of app icon variant', message: 'Light'})), 15 iosImage: () => { 16 return require( 17 + `../../../../assets/app-icons/ios_icon_legacy_light.png`, 18 ) 19 }, 20 androidImage: () => { 21 return require( 22 + `../../../../assets/app-icons/android_icon_legacy_light.png`, 23 ) 24 }, 25 }, ··· 28 name: _(msg({context: 'Name of app icon variant', message: 'Dark'})), 29 iosImage: () => { 30 return require( 31 + `../../../../assets/app-icons/ios_icon_legacy_dark.png`, 32 ) 33 }, 34 androidImage: () => { 35 return require( 36 + `../../../../assets/app-icons/android_icon_legacy_dark.png`, 37 ) 38 }, 39 },
+7 -7
src/style.css
··· 14 :root { 15 --text: black; 16 --background: white; 17 - --backgroundLight: hsl(211, 20%, 95%); 18 } 19 @media (prefers-color-scheme: dark) { 20 :root { 21 color-scheme: dark; 22 --text: white; 23 --background: black; 24 - --backgroundLight: hsl(211, 20%, 20%); 25 } 26 } 27 28 html.theme--light { 29 --text: black; 30 --background: white; 31 - --backgroundLight: hsl(211, 20%, 95%); 32 background-color: white; 33 } 34 html.theme--dark { ··· 36 background-color: black; 37 --text: white; 38 --background: black; 39 - --backgroundLight: hsl(211, 20%, 20%); 40 } 41 html.theme--dim { 42 color-scheme: dark; 43 - background-color: hsl(211, 28%, 12%); 44 --text: white; 45 - --background: hsl(211, 20%, 4%); 46 - --backgroundLight: hsl(211, 20%, 10%); 47 } 48 49 /* Buttons and inputs have a font set by UA, so we'll have to reset that */
··· 14 :root { 15 --text: black; 16 --background: white; 17 + --backgroundLight: #f9fafb; 18 } 19 @media (prefers-color-scheme: dark) { 20 :root { 21 color-scheme: dark; 22 --text: white; 23 --background: black; 24 + --backgroundLight: #111822; 25 } 26 } 27 28 html.theme--light { 29 --text: black; 30 --background: white; 31 + --backgroundLight: #f9fafb; 32 background-color: white; 33 } 34 html.theme--dark { ··· 36 background-color: black; 37 --text: white; 38 --background: black; 39 + --backgroundLight: #111822; 40 } 41 html.theme--dim { 42 color-scheme: dark; 43 + background-color: #151d28; 44 --text: white; 45 + --background: #151d28; 46 + --backgroundLight: #1c2736; 47 } 48 49 /* Buttons and inputs have a font set by UA, so we'll have to reset that */