mirror of https://git.lenooby09.tech/LeNooby09/social-app.git
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'ten-milly' into main

+1183 -125
+1
assets/icons/download_stroke2_corner0_rounded.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"><path fill="#000" fill-rule="evenodd" d="M12 3a1 1 0 0 1 1 1v8.086l1.793-1.793a1 1 0 1 1 1.414 1.414l-3.5 3.5a1 1 0 0 1-1.414 0l-3.5-3.5a1 1 0 1 1 1.414-1.414L11 12.086V4a1 1 0 0 1 1-1ZM4 14a1 1 0 0 1 1 1v4h14v-4a1 1 0 1 1 2 0v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1Z" clip-rule="evenodd"/></svg>
+2
src/App.native.tsx
··· 57 57 import {Shell} from '#/view/shell' 58 58 import {ThemeProvider as Alf} from '#/alf' 59 59 import {useColorModeTheme} from '#/alf/util/useColorModeTheme' 60 + import {NuxDialogs} from '#/components/dialogs/nuxs' 60 61 import {useStarterPackEntry} from '#/components/hooks/useStarterPackEntry' 61 62 import {Provider as IntentDialogProvider} from '#/components/intents/IntentDialogs' 62 63 import {Provider as PortalProvider} from '#/components/Portal' ··· 131 132 style={s.h100pct}> 132 133 <TestCtrls /> 133 134 <Shell /> 135 + <NuxDialogs /> 134 136 </GestureHandlerRootView> 135 137 </ProgressGuideProvider> 136 138 </MutedThreadsProvider>
+2
src/App.web.tsx
··· 46 46 import {Shell} from '#/view/shell/index' 47 47 import {ThemeProvider as Alf} from '#/alf' 48 48 import {useColorModeTheme} from '#/alf/util/useColorModeTheme' 49 + import {NuxDialogs} from '#/components/dialogs/nuxs' 49 50 import {useStarterPackEntry} from '#/components/hooks/useStarterPackEntry' 50 51 import {Provider as IntentDialogProvider} from '#/components/intents/IntentDialogs' 51 52 import {Provider as PortalProvider} from '#/components/Portal' ··· 113 114 <SafeAreaProvider> 114 115 <ProgressGuideProvider> 115 116 <Shell /> 117 + <NuxDialogs /> 116 118 </ProgressGuideProvider> 117 119 </SafeAreaProvider> 118 120 </MutedThreadsProvider>
+15 -3
src/alf/index.tsx
··· 18 18 export const Context = React.createContext<{ 19 19 themeName: ThemeName 20 20 theme: Theme 21 + themes: ReturnType<typeof createThemes> 21 22 }>({ 22 23 themeName: 'light', 23 24 theme: defaultTheme, 25 + themes: createThemes({ 26 + hues: { 27 + primary: BLUE_HUE, 28 + negative: RED_HUE, 29 + positive: GREEN_HUE, 30 + }, 31 + }), 24 32 }) 25 33 26 34 export function ThemeProvider({ ··· 42 50 <Context.Provider 43 51 value={React.useMemo( 44 52 () => ({ 53 + themes, 45 54 themeName: themeName, 46 55 theme: theme, 47 56 }), 48 - [theme, themeName], 57 + [theme, themeName, themes], 49 58 )}> 50 59 {children} 51 60 </Context.Provider> 52 61 ) 53 62 } 54 63 55 - export function useTheme() { 56 - return React.useContext(Context).theme 64 + export function useTheme(theme?: ThemeName) { 65 + const ctx = React.useContext(Context) 66 + return React.useMemo(() => { 67 + return theme ? ctx.themes[theme] : ctx.theme 68 + }, [theme, ctx]) 57 69 } 58 70 59 71 export function useBreakpoints() {
+1 -1
src/components/Dialog/index.tsx
··· 256 256 borderTopLeftRadius: 40, 257 257 borderTopRightRadius: 40, 258 258 }, 259 - flatten(style), 259 + style, 260 260 ]} 261 261 contentContainerStyle={a.pb_4xl} 262 262 ref={ref}>
+15
src/components/dialogs/nuxs/TenMillion/icons/OnePercent.tsx
··· 1 + import React from 'react' 2 + import Svg, {Path} from 'react-native-svg' 3 + 4 + export function OnePercent({fill}: {fill?: string}) { 5 + return ( 6 + <Svg fill="none" viewBox="0 0 101 101"> 7 + <Path 8 + fill={fill} 9 + fillRule="evenodd" 10 + clipRule="evenodd" 11 + d="m60.366 5.567 3.002.49c.053-.687-.01-1.314-.19-1.883a4.129 4.129 0 0 0-.837-1.497 4.633 4.633 0 0 0-1.387-1.074 6.196 6.196 0 0 0-1.854-.592c-.98-.16-1.901-.09-2.766.209-.865.296-1.599.822-2.204 1.58-.604.753-1.005 1.737-1.203 2.95-.197 1.206-.135 2.264.187 3.172.325.91.848 1.643 1.569 2.202.724.559 1.587.92 2.587 1.084.798.13 1.52.122 2.162-.024a4.662 4.662 0 0 0 1.675-.72 4.648 4.648 0 0 0 1.169-1.165 4.12 4.12 0 0 0 .618-1.347l-2.997-.511a1.926 1.926 0 0 1-.312.599c-.13.168-.284.305-.465.41a1.746 1.746 0 0 1-.614.211 2.5 2.5 0 0 1-.751-.019c-.479-.078-.87-.257-1.175-.536-.303-.282-.509-.662-.617-1.139-.104-.48-.1-1.053.008-1.72.103-.631.279-1.158.526-1.58.251-.422.567-.725.947-.91.383-.186.823-.238 1.32-.157.284.047.53.129.741.247.21.115.382.26.514.434.136.171.232.365.287.582.06.217.08.452.06.704Zm8.975-1.753-4.92 9.887 7.105 3.537 1.077-2.163-4.422-2.2.846-1.7 4.074 2.028 1.076-2.163-4.074-2.028.846-1.7 4.44 2.211 1.077-2.163-7.125-3.546Zm4.447 14.833 7.456-8.146 3.516 3.218c.605.553 1.033 1.148 1.285 1.783s.315 1.275.188 1.919c-.127.644-.455 1.256-.984 1.834-.534.583-1.114.956-1.74 1.119a3.216 3.216 0 0 1-1.786-.046l-1.125 4.552-2.403-2.199 1.03-3.998-.765-.7L76 20.672l-2.212-2.025Zm7.025-1.67-.78-.713 1.806-1.973.78.714c.26.237.448.476.566.715.122.239.165.478.127.716-.033.238-.156.474-.37.707-.21.23-.432.372-.664.422-.23.054-.467.029-.714-.075a2.758 2.758 0 0 1-.751-.512Zm10.376 3.54-2.07 1.245 1.713 2.846-7.393 4.448 1.524 2.532 7.392-4.448 1.713 2.846 2.07-1.246-4.95-8.224Zm7.375 14.937-10.45 3.575-.97-2.836 10.449-3.576.97 2.837Zm1.311 4.357-10.952 1.422.386 2.973 4.278-.555.553 4.256 2.395-.31-.552-4.257 1.882-.245.614 4.728 2.395-.311-.999-7.7Zm.737 15.417-11.016-.776.21-2.991 11.017.776-.211 2.99Zm-.483 4.547-10.636-2.972-2.136 7.644 2.326.65 1.33-4.757 1.828.511-1.225 4.383 2.326.65 1.226-4.383 1.828.511-1.336 4.778 2.327.65 2.142-7.665ZM84.151 70.583l2.293-3.578 9.298 5.96-2.27 3.54c-.613.957-1.328 1.664-2.147 2.121a4.568 4.568 0 0 1-2.634.592c-.937-.062-1.89-.404-2.859-1.025-.968-.62-1.68-1.343-2.133-2.168-.45-.822-.64-1.7-.568-2.631.075-.93.415-1.867 1.02-2.811Zm2.818.32-.617.962c-.295.46-.472.9-.531 1.319-.061.422.035.834.29 1.236.253.405.703.816 1.35 1.23.648.416 1.21.652 1.686.71.474.06.892-.03 1.256-.272.361-.238.697-.599 1.008-1.083l.57-.89-5.012-3.212Zm-5.738 19.42-5.842-9.373-4.411 2.75c-.68.424-1.195.903-1.544 1.438-.348.535-.53 1.085-.547 1.65-.02.568.13 1.107.45 1.62.276.442.613.766 1.012.97.4.208.823.302 1.269.283a2.77 2.77 0 0 0 1.29-.378l.056.092c-.317.3-.552.628-.706.987a2.38 2.38 0 0 0-.187 1.107c.025.379.144.74.36 1.086.296.475.678.81 1.147 1.006.466.197 1.003.239 1.61.127.606-.11 1.265-.388 1.98-.833l4.063-2.533Zm-8.31-5.013 1.19-.742 1.232 1.977-1.226.764c-.26.162-.505.26-.738.295a1.11 1.11 0 0 1-.647-.08 1.168 1.168 0 0 1-.499-.464c-.196-.314-.237-.619-.124-.913.114-.292.385-.571.812-.837Zm2.36 3.46 1.044-.65 1.118 1.793-1.08.673c-.317.198-.628.284-.933.257-.302-.023-.544-.18-.725-.47a.955.955 0 0 1-.158-.58c.012-.19.082-.374.21-.55.127-.177.301-.335.524-.474Zm-9.737-2.132 3.067 10.61-2.88.832-2.396-8.288-4.29 1.24-.67-2.321 7.17-2.073Zm-19.456 13.615 2.998.037.084-6.816c.004-.341.083-.646.237-.913.155-.265.366-.47.634-.618.268-.148.574-.22.92-.215.34.004.645.083.913.237.264.154.47.366.618.633.147.272.22.578.215.92l-.084 6.815 2.998.037.087-7.074c.01-.841-.178-1.572-.566-2.191-.392-.616-.943-1.096-1.654-1.439-.712-.34-1.544-.515-2.496-.527-.945-.011-1.778.144-2.497.466-.72.325-1.283.791-1.69 1.397-.41.61-.62 1.335-.63 2.177l-.087 7.074Zm-3.141-11.57-3.408 10.504-7.57-2.456.745-2.298 4.719 1.531.585-1.805-4.329-1.405.746-2.298 4.329 1.405.586-1.806-4.699-1.524.746-2.298 7.55 2.45Zm-19.303.375c-.087-.302-.042-.61.136-.923l-2.378-1.606c-.401.601-.605 1.224-.612 1.87-.012.647.168 1.277.54 1.888.373.612.928 1.167 1.667 1.666.724.489 1.449.8 2.174.934.722.132 1.389.085 2-.14.607-.223 1.105-.626 1.494-1.21.486-.712.636-1.433.451-2.16-.19-.728-.63-1.453-1.322-2.176l-.78-.812a5.515 5.515 0 0 1-.645-.787c-.143-.219-.222-.41-.236-.576a.682.682 0 0 1 .109-.46.776.776 0 0 1 .412-.301c.17-.054.367-.053.59.002.223.055.467.172.733.351.315.213.555.447.718.7.16.251.238.514.234.79-.003.274-.092.557-.266.847l2.359 1.594c.514-.768.775-1.507.782-2.218.002-.71-.212-1.382-.643-2.016-.434-.635-1.049-1.222-1.844-1.759-.775-.523-1.511-.862-2.21-1.017-.7-.156-1.34-.127-1.92.09-.58.215-1.074.623-1.484 1.223-.232.35-.392.71-.482 1.08a2.676 2.676 0 0 0-.032 1.136c.069.393.224.8.466 1.219.241.419.58.853 1.013 1.302l.643.668c.187.192.34.37.46.533.12.163.207.313.262.45.053.14.074.269.063.388a.708.708 0 0 1-.144.338.733.733 0 0 1-.362.276.915.915 0 0 1-.523.005c-.206-.049-.437-.159-.694-.332-.402-.272-.645-.557-.729-.857Zm.158-10.414-8.56 6.979-1.894-2.324 3.46-2.822-.095-.117-5.56.247L8.945 77.9l6.17-.215 2.335-6.83 2.263 2.775-1.643 4.54 1.63-.05 2.207-1.799 1.895 2.324ZM5.312 70.78l1.245 3.103 5.516-6.583 3.223-1.294-1.109-2.762-3.223 1.293-8.536-.943 1.245 3.102 4.967.331.032.08-3.36 3.673Zm6.595-17.898-11.033-.49.354-7.951 2.413.107-.22 4.956 1.896.084.202-4.546 2.414.107-.202 4.547 1.896.084.22-4.935 2.412.108-.352 7.93ZM2.16 39.01l10.522 3.355 2.267-7.11-2.302-.734-1.356 4.254-8.22-2.621-.91 2.856Zm16.115-9.721L15.88 32.8l-9.126-6.22 2.368-3.475c.64-.939 1.376-1.625 2.207-2.06a4.567 4.567 0 0 1 2.65-.517c.935.09 1.878.458 2.828 1.106.95.648 1.641 1.39 2.071 2.227.428.835.592 1.717.494 2.647-.101.927-.468 1.854-1.1 2.78Zm-2.808-.4.644-.944c.307-.452.497-.886.568-1.303.073-.42-.012-.835-.255-1.244-.241-.413-.68-.835-1.315-1.269-.636-.433-1.191-.685-1.665-.755-.472-.074-.893.005-1.263.235-.368.228-.714.579-1.038 1.054l-.596.874 4.92 3.352Zm.873-14.72 6.926 8.603 6.182-4.978-1.515-1.882-3.847 3.098-1.19-1.479 3.545-2.854-1.515-1.882-3.545 2.854-1.19-1.478 3.864-3.111-1.515-1.882-6.2 4.991Zm15.342 2.15L27.406 6.136l4.395-1.845c.756-.317 1.475-.457 2.157-.42.683.037 1.29.248 1.822.633s.95.938 1.253 1.66c.306.73.402 1.413.287 2.05a3.216 3.216 0 0 1-.789 1.603l3.662 2.928-3.003 1.26-3.199-2.61-.957.402 1.412 3.361-2.765 1.16Zm-.584-9.136 1.036 2.466.974-.409c.325-.136.585-.292.78-.468.198-.18.32-.385.367-.616.051-.232.016-.492-.105-.78-.122-.292-.285-.503-.487-.632a1.145 1.145 0 0 0-.704-.184 2.475 2.475 0 0 0-.886.214l-.975.41ZM64.39 27.996v2.67h3.672v9.539h3.267v-9.539H75v-2.67H64.39Zm-4.266 3.815c-.032-.398-.18-.708-.447-.93-.262-.223-.662-.334-1.198-.334-.342 0-.622.042-.84.125-.215.08-.374.189-.478.328a.81.81 0 0 0-.16.477.783.783 0 0 0 .077.4c.064.115.163.22.298.315.135.092.308.175.519.25.21.076.46.144.75.203l1.002.215c.676.143 1.254.332 1.735.566.48.235.874.511 1.18.83.306.313.531.667.674 1.06.147.394.223.823.227 1.288-.004.803-.205 1.482-.603 2.039-.397.556-.965.98-1.705 1.27-.735.29-1.619.435-2.652.435-1.062 0-1.988-.157-2.778-.471-.787-.314-1.4-.797-1.836-1.449-.434-.656-.652-1.494-.656-2.516h3.147c.02.374.114.688.28.942.168.255.402.447.704.578.306.132.67.197 1.091.197.354 0 .65-.043.888-.13.239-.088.42-.21.543-.364a.859.859 0 0 0 .19-.531.754.754 0 0 0-.184-.489c-.116-.143-.306-.27-.573-.382a6.098 6.098 0 0 0-1.079-.321l-1.216-.263c-1.08-.234-1.933-.626-2.557-1.174-.62-.553-.928-1.306-.924-2.26-.004-.774.202-1.452.62-2.032.421-.585 1.003-1.04 1.746-1.366.748-.325 1.604-.488 2.57-.488.986 0 1.838.165 2.557.494.72.33 1.274.795 1.664 1.395.393.596.592 1.294.596 2.093h-3.172Zm-17.795-3.816v12.21h3.315v-4.03h1.147l2.144 4.03h3.6l-2.48-4.552a3.556 3.556 0 0 0 1.49-1.297c.39-.6.585-1.337.585-2.211 0-.867-.189-1.61-.566-2.23a3.705 3.705 0 0 0-1.586-1.425c-.68-.33-1.473-.494-2.379-.494h-5.27Zm3.315 5.604h1.168c.39 0 .721-.047.996-.143.278-.1.49-.256.638-.47.15-.215.226-.496.226-.841 0-.35-.075-.634-.226-.853a1.266 1.266 0 0 0-.638-.489c-.275-.107-.606-.16-.996-.16h-1.168v2.956Zm-4.886-5.603v12.209h-3.314v-12.21h3.314Zm-13.118 0v12.209h3.315v-4.77h4.745v-2.67h-4.745v-2.099h5.27v-2.67h-8.585Zm33.322 38.79v-1.392c0-1.117.24-2.148.722-3.093a5.77 5.77 0 0 1 2.126-2.281c.928-.576 2.058-.864 3.39-.864 1.366 0 2.513.284 3.441.85a5.565 5.565 0 0 1 2.127 2.27c.481.944.722 1.984.722 3.118v1.392a6.622 6.622 0 0 1-.735 3.093 5.651 5.651 0 0 1-2.127 2.282c-.936.576-2.079.863-3.428.863-1.349 0-2.487-.287-3.416-.863a5.678 5.678 0 0 1-2.113-2.282c-.473-.945-.71-1.976-.71-3.093Zm4.485-1.392v1.392c0 .49.12.975.361 1.457.25.472.713.709 1.392.709.713 0 1.181-.232 1.405-.696.232-.464.348-.954.348-1.47v-1.392a3.63 3.63 0 0 0-.322-1.495c-.215-.481-.692-.722-1.431-.722-.679 0-1.143.241-1.392.722-.24.481-.36.98-.36 1.495ZM47.144 51.681v-1.392c0-1.135.245-2.174.735-3.12a5.774 5.774 0 0 1 2.14-2.268c.927-.567 2.049-.85 3.363-.85 1.367 0 2.514.283 3.442.85a5.565 5.565 0 0 1 2.126 2.269c.481.945.722 1.984.722 3.119v1.392c0 1.134-.245 2.17-.735 3.106a5.502 5.502 0 0 1-2.126 2.242c-.937.559-2.08.838-3.429.838-1.349 0-2.487-.283-3.415-.85a5.613 5.613 0 0 1-2.114-2.256c-.473-.937-.709-1.963-.709-3.08Zm4.537-1.392v1.392c0 .515.12 1.005.36 1.469.242.464.688.696 1.341.696.714 0 1.182-.232 1.405-.696.232-.464.348-.954.348-1.47V50.29a3.63 3.63 0 0 0-.322-1.495c-.215-.482-.692-.722-1.43-.722-.68 0-1.135.249-1.367.747-.223.49-.335.98-.335 1.47Zm-2.346 21.447 18.148-26.397h3.66L52.996 71.736h-3.66Zm-8.9 0V45.339h-6.599l-6.495 3.97v6.084l5.774-3.455h.154v19.798h7.166Z" 12 + /> 13 + </Svg> 14 + ) 15 + }
+15
src/components/dialogs/nuxs/TenMillion/icons/PointOnePercent.tsx
··· 1 + import React from 'react' 2 + import Svg, {Path} from 'react-native-svg' 3 + 4 + export function PointOnePercent({fill}: {fill?: string}) { 5 + return ( 6 + <Svg fill="none" viewBox="0 0 101 101"> 7 + <Path 8 + fill={fill} 9 + fillRule="evenodd" 10 + clipRule="evenodd" 11 + d="m62.493 6.057-3.001-.49c.019-.252-.001-.487-.06-.704a1.545 1.545 0 0 0-.288-.582 1.573 1.573 0 0 0-.513-.434c-.21-.118-.458-.2-.741-.247-.497-.08-.937-.029-1.32.156-.38.186-.696.49-.947.91-.248.423-.423.95-.526 1.581-.11.667-.112 1.24-.008 1.72.108.477.313.857.617 1.14.304.278.695.457 1.174.535a2.5 2.5 0 0 0 .751.02c.228-.036.433-.107.614-.212s.337-.242.466-.41c.134-.171.237-.371.311-.6l2.998.512c-.11.456-.317.905-.619 1.347-.301.439-.69.827-1.168 1.164a4.663 4.663 0 0 1-1.675.721c-.643.146-1.364.154-2.162.024-1-.164-1.863-.525-2.588-1.084-.72-.559-1.244-1.293-1.569-2.202-.321-.908-.383-1.966-.186-3.172.198-1.213.599-2.197 1.203-2.95.605-.758 1.339-1.284 2.203-1.58.865-.3 1.787-.37 2.766-.21.689.113 1.307.31 1.854.593a4.63 4.63 0 0 1 1.387 1.074c.378.43.657.928.838 1.497.18.569.243 1.196.19 1.883Zm1.053 7.644 4.92-9.887 7.126 3.546-1.076 2.163-4.442-2.21-.846 1.7 4.075 2.027-1.076 2.163-4.075-2.028-.846 1.7 4.422 2.2-1.076 2.163-7.106-3.537Zm16.823-3.2-7.456 8.146 2.212 2.025 2.46-2.69.766.701-1.03 3.998 2.402 2.2 1.126-4.553c.608.185 1.203.2 1.785.046.627-.163 1.207-.536 1.741-1.12.53-.578.857-1.189.984-1.833a3.35 3.35 0 0 0-.188-1.92c-.252-.634-.68-1.229-1.285-1.782l-3.517-3.218Zm-1.21 5.763.78.714c.26.237.51.408.751.512.246.104.484.129.713.076.232-.051.454-.192.665-.423.213-.233.337-.47.37-.707a1.146 1.146 0 0 0-.128-.716 2.476 2.476 0 0 0-.566-.715l-.78-.714-1.805 1.973Zm9.085 5.498 2.07-1.246 4.95 8.224-2.07 1.246-1.713-2.846-7.393 4.448-1.523-2.532 7.392-4.448-1.713-2.846ZM87.24 39.029l10.45-3.575-.972-2.837-10.448 3.576.97 2.836Zm.809 2.203L99 39.813l.999 7.7-2.396.31-.613-4.727-1.882.245.552 4.256-2.396.311-.552-4.256-4.278.555-.386-2.974Zm.672 13.22 11.017.776.21-2.991-11.016-.776-.21 2.99Zm-.102 2.35 10.636 2.973-2.142 7.666-2.327-.65 1.335-4.779-1.828-.51-1.225 4.383-2.327-.65 1.225-4.384-1.828-.51-1.33 4.756-2.326-.65 2.137-7.645Zm-3.05 10.203-2.292 3.578c-.606.944-.946 1.881-1.02 2.81a4.625 4.625 0 0 0 .567 2.632c.454.825 1.165 1.547 2.134 2.168.968.62 1.921.963 2.859 1.025a4.568 4.568 0 0 0 2.634-.592c.818-.457 1.534-1.164 2.147-2.12l2.27-3.542-9.299-5.959Zm-.091 4.86.617-.962 5.012 3.212-.57.89c-.311.484-.647.845-1.009 1.083-.363.241-.782.331-1.256.271-.476-.057-1.037-.293-1.685-.708-.648-.415-1.098-.826-1.35-1.231-.255-.402-.352-.814-.29-1.236.059-.42.236-.859.53-1.319ZM74.515 80.95l5.841 9.372-4.063 2.533c-.714.445-1.374.723-1.979.833-.607.112-1.144.07-1.61-.127-.469-.195-.852-.53-1.148-1.007a2.308 2.308 0 0 1-.36-1.085 2.381 2.381 0 0 1 .187-1.107 2.96 2.96 0 0 1 .707-.987l-.057-.092a2.77 2.77 0 0 1-1.29.378 2.48 2.48 0 0 1-1.269-.282c-.398-.205-.736-.529-1.011-.971a2.824 2.824 0 0 1-.45-1.62c.016-.565.198-1.115.547-1.65.348-.535.863-1.014 1.543-1.438l4.412-2.75Zm-1.278 3.618-1.19.742c-.427.266-.698.545-.813.837-.112.294-.071.599.125.913.137.22.303.374.499.464.196.09.411.117.647.08.232-.035.478-.133.738-.295l1.226-.764-1.232-1.977Zm2.213 3.551-1.043.65a1.82 1.82 0 0 0-.525.474c-.127.176-.197.36-.21.55a.954.954 0 0 0 .159.58c.18.29.422.447.725.47.304.027.615-.059.932-.257l1.08-.673-1.118-1.794Zm-7.713 9.129-3.067-10.61-7.17 2.073.671 2.32 4.29-1.24 2.396 8.29 2.88-.834ZM48.21 100.29l-2.998-.037.087-7.074c.01-.841.221-1.567.631-2.177.407-.606.97-1.072 1.69-1.397.719-.322 1.551-.477 2.496-.466.953.012 1.785.188 2.496.527.712.343 1.263.823 1.654 1.439.388.62.577 1.35.567 2.19l-.088 7.075-2.998-.037.084-6.815a1.844 1.844 0 0 0-.215-.92 1.634 1.634 0 0 0-.617-.633 1.844 1.844 0 0 0-.914-.237 1.825 1.825 0 0 0-.92.215 1.634 1.634 0 0 0-.633.618 1.843 1.843 0 0 0-.238.913l-.084 6.816Zm-9.547-1.103 3.409-10.504-7.55-2.45-.746 2.298 4.698 1.524-.586 1.806-4.329-1.405-.745 2.298 4.329 1.405-.586 1.805-4.719-1.53-.745 2.297 7.57 2.456ZM22.905 88.135c-.177.314-.222.621-.135.923.084.3.327.585.729.857.256.173.487.283.693.332.201.049.376.047.524-.005a.733.733 0 0 0 .362-.276.709.709 0 0 0 .144-.338.874.874 0 0 0-.063-.388 2.115 2.115 0 0 0-.262-.45 5.056 5.056 0 0 0-.46-.533l-.643-.668a6.809 6.809 0 0 1-1.014-1.302 3.733 3.733 0 0 1-.465-1.219c-.07-.39-.06-.769.032-1.136.089-.37.25-.73.482-1.08.41-.6.904-1.008 1.484-1.224.58-.216 1.22-.245 1.92-.089.698.155 1.435.494 2.21 1.017.795.537 1.41 1.124 1.843 1.76.431.633.646 1.305.644 2.015-.008.71-.268 1.45-.782 2.218l-2.36-1.594c.174-.29.263-.573.267-.848a1.41 1.41 0 0 0-.235-.79 2.494 2.494 0 0 0-.718-.699 2.352 2.352 0 0 0-.732-.351 1.085 1.085 0 0 0-.591-.002.777.777 0 0 0-.412.3.681.681 0 0 0-.108.46c.014.166.092.358.235.576.142.222.357.484.646.788l.78.812c.69.723 1.132 1.448 1.322 2.175.185.728.034 1.449-.451 2.162-.39.583-.888.986-1.494 1.21-.612.225-1.279.27-2 .139-.726-.134-1.45-.445-2.174-.934-.74-.5-1.295-1.054-1.667-1.666-.372-.611-.552-1.24-.54-1.888.006-.646.21-1.269.612-1.87l2.377 1.606Zm-8.537-2.512 8.56-6.979-1.895-2.324-2.207 1.8-1.63.048 1.642-4.54-2.262-2.774-2.336 6.83-6.17.215 2.209 2.708 5.56-.246.095.117-3.46 2.82 1.894 2.325Zm-8.685-11.74L4.437 70.78l3.36-3.673-.032-.08-4.967-.33-1.245-3.103 8.537.943 3.223-1.293 1.108 2.762-3.223 1.294-5.515 6.583ZM0 52.393l11.033.49.352-7.93-2.413-.108-.22 4.935-1.896-.084.202-4.547-2.413-.107-.202 4.546-1.897-.084.22-4.956-2.413-.107L0 52.392Zm11.806-10.028L1.285 39.01l.91-2.856 8.22 2.62 1.357-4.253 2.301.734-2.267 7.11Zm3.2-9.565L17.4 29.29c.632-.927.998-1.854 1.1-2.781a4.625 4.625 0 0 0-.494-2.647c-.43-.837-1.12-1.58-2.071-2.227-.95-.648-1.894-1.016-2.83-1.106a4.567 4.567 0 0 0-2.649.518c-.83.434-1.566 1.12-2.206 2.06L5.88 26.58l9.126 6.22Zm.23-4.855-.645.944-4.919-3.352.595-.874c.324-.475.67-.826 1.038-1.054.37-.23.792-.309 1.264-.235.474.07 1.028.322 1.664.756.636.433 1.074.855 1.315 1.268.243.409.329.824.255 1.244-.07.417-.26.851-.568 1.303Zm7.154-5.173-6.926-8.603 6.2-4.99 1.515 1.88-3.864 3.112 1.19 1.479 3.545-2.855 1.515 1.882-3.545 2.854 1.19 1.479 3.848-3.098 1.515 1.882-6.183 4.978Zm4.142-16.636 4.275 10.183 2.764-1.16-1.411-3.362.957-.402 3.199 2.61 3.003-1.26-3.662-2.928c.422-.475.685-1.01.789-1.603.114-.637.019-1.32-.288-2.05-.303-.722-.72-1.275-1.253-1.66a3.351 3.351 0 0 0-1.821-.633c-.683-.037-1.402.103-2.157.42l-4.395 1.845Zm4.726 3.513-1.035-2.466.974-.409c.325-.136.62-.208.887-.214.268-.012.503.05.703.184.203.13.365.34.488.632.12.288.156.548.105.78-.047.23-.17.436-.367.616a2.756 2.756 0 0 1-.78.468l-.975.41Zm32.256 21.017v-2.67h10.612v2.67h-3.673v9.539h-3.267v-9.539h-3.672Zm-4.712.215c.266.223.415.532.447.93h3.171c-.004-.799-.203-1.496-.596-2.093-.39-.6-.944-1.065-1.663-1.395-.72-.33-1.572-.494-2.558-.494-.965 0-1.822.163-2.569.488-.743.326-1.325.781-1.747 1.366-.417.58-.624 1.258-.62 2.032-.004.954.304 1.707.924 2.26.624.548 1.477.94 2.558 1.174l1.216.263c.453.099.813.206 1.079.322.266.11.457.238.572.381.12.14.181.302.185.489a.858.858 0 0 1-.19.53 1.2 1.2 0 0 1-.543.364c-.239.088-.535.131-.889.131-.42 0-.784-.065-1.09-.197a1.56 1.56 0 0 1-.704-.578c-.167-.254-.26-.568-.28-.942h-3.148c.004 1.022.223 1.86.656 2.516.437.652 1.05 1.135 1.836 1.449.791.314 1.717.47 2.778.47 1.033 0 1.918-.144 2.653-.434.74-.29 1.308-.714 1.705-1.27.398-.557.598-1.236.602-2.04a3.743 3.743 0 0 0-.226-1.287 2.957 2.957 0 0 0-.674-1.06 4.128 4.128 0 0 0-1.18-.83c-.481-.234-1.06-.423-1.735-.566l-1.002-.215a5.58 5.58 0 0 1-.75-.202 2.339 2.339 0 0 1-.52-.25.968.968 0 0 1-.298-.316.784.784 0 0 1-.077-.4.81.81 0 0 1 .16-.477c.104-.139.263-.248.478-.328.218-.083.499-.125.84-.125.537 0 .936.111 1.199.334Zm-17.348 9.324v-12.21h5.27c.906 0 1.699.165 2.378.495.68.33 1.209.805 1.586 1.425.378.62.566 1.363.566 2.23 0 .874-.194 1.611-.584 2.211-.36.56-.856.993-1.49 1.297l2.48 4.552h-3.601l-2.144-4.03h-1.147v4.03h-3.314Zm4.483-6.606h-1.169v-2.957h1.169c.39 0 .721.054.995.161.279.104.491.267.638.49.151.218.227.502.227.852 0 .345-.076.626-.227.84-.147.215-.36.372-.638.471a3.047 3.047 0 0 1-.995.143Zm-6.054 6.606v-12.21h-3.315v12.21h3.315Zm-13.118 0v-12.21h8.584v2.671h-5.27v2.099h4.746v2.67h-4.746v4.77h-3.314Zm33.871 25.421v1.346c0 1.079.233 2.075.7 2.989a5.535 5.535 0 0 0 2.086 2.204c.916.557 2.04.835 3.37.835 1.332 0 2.46-.278 3.384-.835.924-.556 1.624-1.29 2.099-2.204.483-.914.725-1.91.725-2.99v-1.345c0-1.096-.237-2.1-.712-3.014-.475-.913-1.175-1.644-2.1-2.192-.915-.548-2.047-.822-3.395-.822-1.315 0-2.43.278-3.346.834a5.625 5.625 0 0 0-2.099 2.205 6.384 6.384 0 0 0-.712 2.99Zm4.427 1.346v-1.346c0-.498.118-.98.356-1.445.246-.464.704-.697 1.374-.697.729 0 1.2.233 1.411.697.213.466.319.947.319 1.445v1.346c0 .498-.115.971-.344 1.42-.22.448-.683.672-1.386.672-.67 0-1.128-.228-1.374-.685a3.067 3.067 0 0 1-.356-1.407ZM47 51.029v1.345c0 1.08.233 2.071.7 2.976.474.906 1.17 1.632 2.086 2.18.916.548 2.04.822 3.37.822 1.332 0 2.46-.27 3.384-.81.924-.54 1.624-1.261 2.099-2.167.483-.905.725-1.905.725-3.001v-1.346c0-1.096-.237-2.1-.712-3.014-.475-.913-1.175-1.644-2.1-2.192-.915-.548-2.047-.822-3.395-.822-1.298 0-2.405.274-3.32.822a5.631 5.631 0 0 0-2.112 2.192c-.483.914-.725 1.918-.725 3.014Zm4.477 1.345v-1.346c0-.473.11-.946.331-1.42.23-.481.679-.722 1.349-.722.729 0 1.2.233 1.412.698.212.465.317.946.317 1.444v1.346c0 .498-.114.971-.343 1.42-.22.448-.683.672-1.386.672-.645 0-1.086-.224-1.323-.672a2.991 2.991 0 0 1-.357-1.42Zm15.595-6.129-17.91 25.51h3.613l17.91-25.51h-3.613Zm-23.51-.905v26.396h-7.167V51.938h-.155l-5.774 3.455v-6.084l6.496-3.97h6.6ZM29.5 72a3.5 3.5 0 1 0 0-7 3.5 3.5 0 0 0 0 7Z" 12 + /> 13 + </Svg> 14 + ) 15 + }
+15
src/components/dialogs/nuxs/TenMillion/icons/TenPercent.tsx
··· 1 + import React from 'react' 2 + import Svg, {Path} from 'react-native-svg' 3 + 4 + export function TenPercent({fill}: {fill?: string}) { 5 + return ( 6 + <Svg fill="none" viewBox="0 0 101 101"> 7 + <Path 8 + fill={fill} 9 + fillRule="evenodd" 10 + clipRule="evenodd" 11 + d="m62.493 5.13-3.001-.49c.019-.252-.001-.487-.06-.704a1.547 1.547 0 0 0-.288-.582 1.574 1.574 0 0 0-.513-.434c-.21-.118-.458-.2-.741-.247-.497-.08-.937-.029-1.32.156-.38.186-.696.49-.947.91-.248.423-.423.95-.526 1.581-.11.667-.112 1.24-.008 1.72.108.477.313.857.617 1.14.304.278.695.457 1.174.535a2.5 2.5 0 0 0 .751.02c.228-.036.433-.107.614-.212s.337-.242.466-.41c.134-.171.237-.371.311-.6l2.998.512c-.11.456-.317.905-.619 1.347-.301.439-.69.827-1.168 1.164a4.666 4.666 0 0 1-1.675.721c-.643.146-1.364.154-2.162.024-1-.164-1.863-.525-2.588-1.084-.72-.559-1.244-1.293-1.569-2.202-.321-.908-.383-1.966-.186-3.172.198-1.213.599-2.197 1.203-2.95.605-.758 1.339-1.284 2.203-1.58.865-.3 1.787-.37 2.766-.21.689.113 1.307.31 1.854.593a4.63 4.63 0 0 1 1.387 1.074c.378.43.657.928.838 1.497.18.569.243 1.196.19 1.883Zm1.053 7.644 4.92-9.887 7.126 3.546-1.076 2.163-4.442-2.21-.846 1.7 4.075 2.027-1.076 2.163-4.075-2.028-.846 1.7 4.422 2.2-1.076 2.163-7.106-3.537Zm16.823-3.2-7.456 8.146 2.212 2.024 2.461-2.689.765.701-1.03 3.998 2.402 2.2 1.126-4.552a3.216 3.216 0 0 0 1.785.045c.627-.163 1.207-.536 1.741-1.12.53-.578.857-1.189.984-1.833a3.352 3.352 0 0 0-.188-1.92c-.252-.634-.68-1.229-1.285-1.782l-3.517-3.218Zm-1.21 5.763.78.714c.26.238.51.408.751.512.246.104.484.129.713.076.232-.051.454-.192.665-.423.213-.233.337-.47.37-.707a1.145 1.145 0 0 0-.128-.716 2.474 2.474 0 0 0-.566-.715l-.78-.714-1.805 1.973Zm9.085 5.498 2.07-1.246 4.95 8.224-2.07 1.246-1.713-2.846-7.393 4.448-1.523-2.531 7.392-4.45-1.713-2.845ZM87.24 38.102l10.45-3.575-.971-2.837-10.45 3.576.971 2.836Zm.809 2.203L99 38.885l.999 7.7-2.396.31-.613-4.727-1.882.245.552 4.256-2.396.311-.552-4.256-4.278.555-.386-2.974Zm.672 13.22 11.017.776.21-2.991-11.016-.776-.21 2.99Zm-.102 2.35 10.636 2.973-2.142 7.665-2.327-.65 1.335-4.778-1.828-.51-1.225 4.383-2.326-.65 1.224-4.384-1.828-.51-1.33 4.756-2.326-.65 2.137-7.645Zm-3.05 10.203-2.292 3.578c-.606.944-.946 1.881-1.02 2.81a4.625 4.625 0 0 0 .567 2.632c.454.825 1.165 1.547 2.134 2.168.968.62 1.921.963 2.859 1.025a4.568 4.568 0 0 0 2.634-.592c.818-.457 1.534-1.164 2.147-2.12l2.27-3.542-9.299-5.959Zm-.091 4.86.617-.962 5.012 3.212-.57.89c-.31.484-.647.845-1.009 1.083-.363.241-.782.331-1.256.271-.476-.057-1.037-.293-1.685-.708-.648-.416-1.098-.826-1.35-1.231-.255-.402-.352-.814-.29-1.236.059-.42.236-.859.53-1.319Zm-10.963 9.085 5.841 9.372-4.063 2.533c-.714.445-1.374.723-1.979.833-.607.112-1.144.07-1.61-.127-.469-.195-.852-.53-1.148-1.007a2.308 2.308 0 0 1-.36-1.085 2.38 2.38 0 0 1 .187-1.107 2.96 2.96 0 0 1 .707-.987l-.057-.092a2.77 2.77 0 0 1-1.29.378 2.48 2.48 0 0 1-1.269-.282c-.398-.205-.736-.529-1.011-.971a2.824 2.824 0 0 1-.45-1.62c.016-.565.198-1.115.547-1.65.348-.535.863-1.014 1.543-1.438l4.412-2.75Zm-1.278 3.618-1.19.742c-.427.266-.698.545-.813.837-.113.294-.071.599.125.913.137.22.303.374.499.464.196.09.411.117.647.08.232-.035.478-.133.738-.295l1.226-.764-1.232-1.977Zm2.213 3.551-1.043.65a1.822 1.822 0 0 0-.525.474c-.127.176-.197.36-.21.55a.954.954 0 0 0 .159.58c.18.29.422.447.725.47.304.027.615-.059.932-.257l1.08-.673-1.118-1.794Zm-7.713 9.129L64.67 85.71l-7.17 2.073.671 2.32 4.29-1.24 2.396 8.29 2.88-.834Zm-19.526 3.042-2.997-.037.087-7.074c.01-.842.22-1.567.63-2.177.407-.606.97-1.072 1.69-1.397.719-.322 1.551-.477 2.496-.466.953.012 1.785.188 2.496.527.712.343 1.263.823 1.654 1.439.388.62.577 1.35.567 2.19l-.088 7.075-2.997-.037.084-6.815a1.845 1.845 0 0 0-.216-.92 1.634 1.634 0 0 0-.617-.633 1.843 1.843 0 0 0-.914-.237 1.824 1.824 0 0 0-.92.215 1.633 1.633 0 0 0-.633.617 1.843 1.843 0 0 0-.238.914l-.084 6.816Zm-9.547-1.103 3.409-10.504-7.55-2.45-.746 2.298 4.698 1.524-.586 1.806-4.329-1.405-.745 2.298 4.329 1.405-.586 1.805-4.719-1.53-.745 2.297 7.57 2.456ZM22.905 87.208c-.177.314-.222.621-.135.923.084.3.327.585.729.857.256.173.487.284.693.332.201.049.376.047.524-.005a.733.733 0 0 0 .362-.276.709.709 0 0 0 .144-.338.874.874 0 0 0-.063-.388 2.117 2.117 0 0 0-.262-.45 5.056 5.056 0 0 0-.46-.533l-.643-.668a6.812 6.812 0 0 1-1.014-1.302 3.734 3.734 0 0 1-.465-1.219c-.07-.39-.06-.769.032-1.136.089-.37.25-.73.482-1.08.41-.6.904-1.008 1.484-1.224.58-.216 1.22-.245 1.92-.089.698.155 1.435.494 2.21 1.017.795.537 1.41 1.124 1.843 1.76.431.633.646 1.305.644 2.015-.008.71-.268 1.45-.782 2.218l-2.36-1.594c.174-.29.263-.573.267-.848a1.41 1.41 0 0 0-.235-.79 2.495 2.495 0 0 0-.718-.699 2.35 2.35 0 0 0-.732-.351 1.085 1.085 0 0 0-.591-.002.777.777 0 0 0-.412.3.681.681 0 0 0-.108.46c.014.166.092.358.235.576.142.222.357.484.646.788l.78.812c.69.723 1.132 1.448 1.322 2.175.185.728.034 1.449-.451 2.162-.39.583-.888.986-1.494 1.21-.612.225-1.279.27-2 .139-.726-.134-1.45-.445-2.174-.934-.739-.5-1.295-1.054-1.667-1.666-.372-.611-.552-1.24-.54-1.888.006-.646.21-1.269.612-1.87l2.377 1.606Zm-8.537-2.512 8.56-6.979-1.895-2.323-2.207 1.799-1.63.048 1.642-4.54-2.262-2.774-2.336 6.83-6.17.215 2.209 2.708 5.56-.247.095.117-3.46 2.822 1.894 2.324Zm-8.685-11.74-1.246-3.103 3.36-3.673-.031-.08-4.968-.33-1.245-3.103 8.537.943 3.223-1.293 1.108 2.762-3.223 1.294-5.515 6.583ZM0 51.466l11.033.49.352-7.93-2.413-.108-.22 4.935-1.896-.084.202-4.547-2.413-.107-.202 4.546-1.897-.084.22-4.956-2.413-.107L0 51.465Zm11.806-10.028L1.285 38.083l.91-2.856 8.22 2.62 1.357-4.253 2.301.734-2.267 7.11Zm3.2-9.565 2.393-3.511c.632-.927.998-1.854 1.1-2.781a4.625 4.625 0 0 0-.494-2.647c-.43-.837-1.12-1.58-2.071-2.227-.95-.648-1.894-1.016-2.83-1.106a4.567 4.567 0 0 0-2.649.518c-.83.434-1.566 1.12-2.206 2.06L5.88 25.653l9.126 6.22Zm.23-4.855-.645.944-4.919-3.352.595-.874c.324-.475.67-.826 1.039-1.054.37-.23.79-.309 1.263-.235.474.07 1.028.322 1.664.755.636.434 1.074.856 1.315 1.269.243.409.329.824.255 1.244-.07.417-.26.851-.568 1.303Zm7.154-5.173-6.926-8.603 6.2-4.99 1.515 1.88-3.864 3.112 1.19 1.478 3.545-2.854 1.515 1.882-3.545 2.854 1.19 1.479 3.848-3.098 1.515 1.882-6.183 4.978Zm4.142-16.636 4.275 10.183 2.764-1.16-1.411-3.362.957-.401 3.199 2.61 3.003-1.26-3.662-2.93c.422-.474.685-1.009.789-1.602.114-.637.019-1.32-.288-2.05-.303-.722-.72-1.275-1.253-1.66a3.351 3.351 0 0 0-1.821-.633c-.683-.037-1.402.103-2.157.42l-4.395 1.845Zm4.726 3.513-1.035-2.466.974-.409c.325-.136.62-.208.887-.214.268-.012.503.05.703.184.203.13.365.34.488.632.12.288.156.548.105.78-.047.23-.17.436-.367.616a2.756 2.756 0 0 1-.78.468l-.975.41Zm33.428 24.42v-2.957h11.748v2.957H72.37v10.56h-3.617v-10.56h-4.066Zm-5.217.237c.294.247.46.59.495 1.03h3.51c-.003-.884-.223-1.657-.66-2.316-.43-.665-1.044-1.18-1.84-1.545-.797-.365-1.74-.548-2.832-.548-1.07 0-2.017.18-2.845.541-.822.361-1.467.865-1.933 1.512-.462.642-.691 1.393-.687 2.25-.004 1.056.337 1.89 1.023 2.502.691.607 1.635 1.04 2.832 1.3l1.346.29c.502.11.9.23 1.195.357.294.123.506.264.633.422.132.154.2.335.205.541a.95.95 0 0 1-.211.588c-.137.172-.337.306-.6.403-.265.096-.593.145-.984.145-.467 0-.87-.073-1.208-.218a1.728 1.728 0 0 1-.779-.64c-.185-.282-.288-.63-.31-1.043h-3.485c.004 1.13.246 2.06.726 2.785.484.722 1.162 1.256 2.033 1.604.875.348 1.9.521 3.075.521 1.145 0 2.123-.16 2.938-.481.818-.322 1.447-.79 1.887-1.406.44-.616.662-1.369.667-2.258a4.144 4.144 0 0 0-.251-1.425 3.273 3.273 0 0 0-.746-1.175c-.339-.352-.774-.658-1.307-.917-.532-.26-1.172-.469-1.92-.627l-1.11-.238a6.172 6.172 0 0 1-.83-.224 2.59 2.59 0 0 1-.575-.278 1.07 1.07 0 0 1-.33-.35.867.867 0 0 1-.086-.442.897.897 0 0 1 .178-.528c.115-.154.29-.275.529-.363.241-.092.552-.138.93-.138.594 0 1.036.123 1.327.37ZM40.263 43.703V30.185h5.834c1.003 0 1.881.183 2.633.548a4.102 4.102 0 0 1 1.756 1.577c.418.687.627 1.51.627 2.469 0 .968-.216 1.784-.647 2.448a3.936 3.936 0 0 1-1.65 1.435l2.746 5.04h-3.987l-2.373-4.462h-1.27v4.462h-3.67Zm3.67-10.587v3.274h1.293c.431 0 .798-.053 1.102-.158.308-.11.543-.284.706-.522.167-.237.251-.547.251-.93 0-.388-.084-.702-.25-.944a1.402 1.402 0 0 0-.707-.541c-.304-.12-.671-.178-1.102-.178h-1.294Zm-5.41 10.587V30.185h-3.67v13.517h3.67Zm-14.523 0V30.185h9.504v2.957H27.67v2.323h5.253v2.957H27.67v5.28H24Zm42.585 19.812v1.063c0 .853.18 1.64.541 2.362a4.335 4.335 0 0 0 1.614 1.742c.709.44 1.578.659 2.608.659s1.903-.22 2.618-.66a4.314 4.314 0 0 0 1.623-1.741c.374-.722.561-1.509.561-2.362v-1.063c0-.866-.184-1.66-.55-2.381a4.25 4.25 0 0 0-1.625-1.732c-.708-.433-1.584-.65-2.627-.65-1.017 0-1.88.22-2.588.66a4.407 4.407 0 0 0-1.624 1.742 5.13 5.13 0 0 0-.55 2.361Zm3.425 1.063v-1.063c0-.393.092-.774.275-1.141.19-.367.545-.551 1.063-.551.564 0 .928.183 1.092.55.164.368.246.749.246 1.142v1.063c0 .394-.088.768-.265 1.122-.17.354-.529.531-1.073.531-.518 0-.873-.18-1.063-.54a2.464 2.464 0 0 1-.275-1.113ZM56.036 51.981v1.063c0 .853.18 1.637.541 2.352.368.715.906 1.29 1.614 1.722.709.433 1.578.65 2.608.65s1.903-.214 2.618-.64a4.2 4.2 0 0 0 1.623-1.712c.374-.715.561-1.506.561-2.372v-1.063c0-.866-.183-1.66-.55-2.381a4.25 4.25 0 0 0-1.625-1.732c-.708-.433-1.584-.65-2.627-.65-1.004 0-1.86.217-2.568.65a4.409 4.409 0 0 0-1.634 1.732 5.098 5.098 0 0 0-.56 2.381Zm3.464 1.063v-1.063c0-.373.085-.748.256-1.121.177-.38.525-.571 1.043-.571.564 0 .928.183 1.092.55.164.368.246.749.246 1.142v1.063c0 .394-.088.768-.265 1.122-.17.354-.528.531-1.073.531-.498 0-.84-.177-1.023-.531a2.404 2.404 0 0 1-.276-1.122Zm12.064-4.841L57.71 68.356h2.795l13.855-20.153h-2.794ZM45.251 68.907c-1.83-.006-3.411-.43-4.743-1.27-1.332-.839-2.359-2.05-3.08-3.63-.722-1.582-1.08-3.477-1.073-5.688.007-2.218.367-4.1 1.083-5.649.721-1.548 1.745-2.725 3.07-3.532 1.331-.807 2.912-1.21 4.743-1.21 1.83 0 3.411.406 4.743 1.22 1.332.806 2.358 1.984 3.08 3.532s1.08 3.428 1.073 5.639c0 2.224-.361 4.126-1.083 5.707-.721 1.581-1.748 2.792-3.08 3.631-1.325.834-2.903 1.25-4.733 1.25Zm0-4.448c.945 0 1.719-.492 2.322-1.476.61-.99.912-2.545.905-4.664 0-1.384-.137-2.516-.413-3.395-.275-.88-.656-1.529-1.141-1.949a2.46 2.46 0 0 0-1.673-.64c-.945 0-1.716.48-2.313 1.438-.597.957-.902 2.473-.915 4.546-.006 1.41.128 2.571.404 3.483.275.906.656 1.575 1.141 2.008.492.433 1.053.65 1.683.65Zm-11.253 3.897V48.203H28.96L24 51.233v4.646l4.409-2.638h.118v15.115h5.47Z" 12 + /> 13 + </Svg> 14 + ) 15 + }
+15
src/components/dialogs/nuxs/TenMillion/icons/TwentyFivePercent.tsx
··· 1 + import React from 'react' 2 + import Svg, {Path} from 'react-native-svg' 3 + 4 + export function TwentyFivePercent({fill}: {fill?: string}) { 5 + return ( 6 + <Svg fill="none" viewBox="0 0 101 101"> 7 + <Path 8 + fill={fill} 9 + fillRule="evenodd" 10 + clipRule="evenodd" 11 + d="m63.145 6.112-3.002-.49c.02-.252 0-.487-.06-.704a1.548 1.548 0 0 0-.287-.583 1.576 1.576 0 0 0-.514-.433 2.24 2.24 0 0 0-.74-.247c-.498-.081-.938-.03-1.321.156-.38.185-.696.489-.947.91-.247.423-.422.95-.526 1.581-.109.667-.111 1.24-.008 1.72.108.477.314.856.617 1.139.305.28.696.458 1.175.536a2.5 2.5 0 0 0 .751.019c.228-.036.433-.106.614-.211.18-.105.336-.242.466-.41.133-.172.237-.371.31-.6l2.999.512c-.111.455-.317.904-.62 1.347-.3.439-.69.827-1.167 1.164a4.665 4.665 0 0 1-1.675.72c-.644.147-1.364.155-2.163.024-1-.163-1.863-.524-2.587-1.084-.721-.558-1.244-1.292-1.57-2.201-.32-.909-.383-1.966-.186-3.172.199-1.214.6-2.197 1.204-2.95.604-.758 1.339-1.285 2.203-1.58.865-.3 1.787-.37 2.766-.21.688.113 1.306.31 1.854.593a4.63 4.63 0 0 1 1.387 1.073c.378.43.657.93.837 1.498.18.568.244 1.196.19 1.883Zm1.052 7.644 4.921-9.887 7.126 3.546-1.077 2.163-4.441-2.21-.846 1.699 4.075 2.028-1.077 2.162-4.074-2.027-.846 1.699 4.422 2.2-1.076 2.163-7.107-3.536Zm16.824-3.2-7.456 8.146 2.211 2.024 2.462-2.689.765.7-1.03 3.999 2.402 2.199 1.125-4.552a3.216 3.216 0 0 0 1.786.045c.626-.162 1.207-.535 1.74-1.119.53-.578.858-1.189.984-1.833a3.35 3.35 0 0 0-.188-1.92c-.252-.634-.68-1.229-1.285-1.782l-3.516-3.219Zm-1.21 5.763.779.713c.26.238.51.41.752.513.246.103.484.129.713.075.232-.05.453-.192.664-.422.214-.234.337-.47.37-.707a1.145 1.145 0 0 0-.127-.716 2.473 2.473 0 0 0-.566-.716l-.78-.713-1.806 1.973Zm9.085 5.498 2.07-1.246 4.949 8.224-2.07 1.246-1.713-2.846-7.392 4.448-1.524-2.532 7.393-4.448-1.713-2.846Zm-1.004 17.267L98.34 35.51l-.97-2.837-10.45 3.575.97 2.837Zm.809 2.203 10.951-1.421 1 7.7-2.396.311-.614-4.727-1.882.244.552 4.257-2.395.31-.553-4.256-4.278.555-.385-2.973Zm.672 13.22 11.016.776.211-2.991-11.016-.776-.211 2.99Zm-.103 2.35 10.636 2.973-2.142 7.665-2.326-.65 1.335-4.778-1.828-.51-1.225 4.382-2.327-.65 1.225-4.383-1.828-.511-1.33 4.757-2.326-.65 2.136-7.645ZM86.221 67.06l-2.293 3.577c-.605.945-.945 1.882-1.02 2.811a4.626 4.626 0 0 0 .568 2.632c.454.824 1.165 1.547 2.133 2.168.969.62 1.922.962 2.86 1.025a4.568 4.568 0 0 0 2.633-.592c.819-.457 1.534-1.165 2.147-2.12l2.27-3.542-9.298-5.96Zm-.092 4.86.617-.963 5.012 3.213-.57.89c-.31.484-.646.845-1.008 1.083-.364.24-.782.331-1.256.27-.476-.056-1.038-.293-1.685-.708-.648-.415-1.098-.825-1.35-1.23-.255-.403-.352-.815-.29-1.237.058-.418.235-.858.53-1.318Zm-10.963 9.085 5.842 9.372-4.064 2.533c-.714.445-1.373.722-1.978.833-.608.112-1.145.07-1.61-.127-.47-.195-.852-.53-1.149-1.007a2.308 2.308 0 0 1-.359-1.085 2.381 2.381 0 0 1 .187-1.108 2.96 2.96 0 0 1 .707-.986l-.058-.092a2.77 2.77 0 0 1-1.289.378 2.48 2.48 0 0 1-1.27-.283c-.398-.205-.735-.528-1.01-.97a2.824 2.824 0 0 1-.45-1.62c.015-.565.198-1.115.546-1.65.349-.535.864-1.014 1.544-1.438l4.411-2.75Zm-1.278 3.618-1.19.741c-.427.266-.697.545-.812.837-.113.295-.071.6.124.914.137.22.304.374.5.464.195.09.41.116.646.08.233-.035.479-.133.738-.295l1.227-.764-1.233-1.977Zm2.214 3.55-1.044.651a1.819 1.819 0 0 0-.524.473c-.128.177-.197.36-.21.55a.954.954 0 0 0 .159.582c.18.29.422.446.724.47.305.025.616-.06.933-.258l1.08-.673-1.118-1.794Zm-7.713 9.13-3.068-10.61-7.17 2.073.672 2.32 4.29-1.24 2.395 8.289 2.88-.833Zm-19.526 3.041-2.998-.036.087-7.075c.01-.84.22-1.566.63-2.176.407-.606.97-1.072 1.69-1.398.72-.322 1.552-.477 2.497-.465.953.012 1.785.187 2.496.527.711.343 1.263.822 1.654 1.439.388.62.577 1.35.566 2.19l-.087 7.075-2.998-.037.084-6.816a1.843 1.843 0 0 0-.215-.919 1.634 1.634 0 0 0-.618-.633 1.843 1.843 0 0 0-.914-.238 1.824 1.824 0 0 0-.92.215 1.634 1.634 0 0 0-.632.618 1.844 1.844 0 0 0-.238.914l-.084 6.815Zm-9.547-1.102 3.408-10.505-7.55-2.45-.746 2.299 4.699 1.524-.586 1.806-4.329-1.405-.746 2.298 4.33 1.404-.586 1.806-4.72-1.531-.745 2.298 7.571 2.456ZM23.556 88.19c-.176.314-.222.622-.135.924.084.3.327.585.73.857.256.173.487.283.693.331.201.05.376.048.523-.004a.732.732 0 0 0 .363-.276.708.708 0 0 0 .144-.339.874.874 0 0 0-.064-.388 2.113 2.113 0 0 0-.262-.45 5.045 5.045 0 0 0-.46-.532l-.642-.668a6.812 6.812 0 0 1-1.014-1.303 3.736 3.736 0 0 1-.465-1.218c-.071-.39-.06-.77.032-1.137.089-.37.25-.73.482-1.08.41-.6.904-1.007 1.483-1.223.58-.216 1.22-.246 1.921-.089.698.155 1.434.494 2.209 1.017.796.537 1.41 1.123 1.844 1.76.431.633.645 1.305.643 2.014-.007.711-.268 1.45-.782 2.218l-2.36-1.593c.175-.29.264-.573.267-.848a1.41 1.41 0 0 0-.234-.79 2.495 2.495 0 0 0-.718-.7 2.35 2.35 0 0 0-.733-.35 1.085 1.085 0 0 0-.59-.003.777.777 0 0 0-.412.302.682.682 0 0 0-.109.46c.014.165.093.357.236.575.141.221.357.484.646.788l.779.812c.691.723 1.132 1.448 1.322 2.175.185.728.035 1.448-.45 2.162-.39.582-.888.986-1.495 1.21-.611.224-1.278.27-2 .139-.725-.134-1.45-.446-2.174-.935-.738-.499-1.294-1.054-1.666-1.665-.373-.612-.553-1.24-.54-1.888.006-.646.21-1.27.611-1.87l2.378 1.605Zm-8.537-2.512 8.56-6.978-1.895-2.324-2.206 1.8-1.63.048 1.642-4.54-2.262-2.775-2.336 6.83-6.17.216 2.208 2.708 5.56-.247.095.117-3.46 2.822 1.894 2.323Zm-8.685-11.74L5.09 70.836l3.36-3.673-.032-.08-4.967-.33-1.245-3.103 8.536.943 3.223-1.294 1.109 2.763-3.223 1.293-5.516 6.584ZM.652 52.448l11.032.49.353-7.93-2.414-.107-.219 4.934-1.896-.084.202-4.546-2.414-.108-.202 4.547-1.896-.084.22-4.956-2.413-.108-.353 7.952ZM12.458 42.42 1.936 39.065l.911-2.856 8.22 2.62 1.357-4.254 2.301.734-2.267 7.11Zm3.2-9.565 2.393-3.511c.632-.927.998-1.854 1.1-2.782a4.625 4.625 0 0 0-.494-2.646c-.43-.837-1.121-1.58-2.072-2.227-.95-.648-1.893-1.017-2.829-1.106a4.568 4.568 0 0 0-2.65.517c-.83.435-1.566 1.121-2.205 2.06l-2.37 3.476 9.127 6.219Zm.229-4.856-.644.945-4.92-3.353.596-.873c.324-.475.67-.827 1.038-1.054.37-.23.791-.31 1.263-.236.474.07 1.029.323 1.665.756.636.433 1.074.856 1.315 1.268.243.41.328.824.255 1.244-.071.417-.26.852-.568 1.303Zm7.155-5.173-6.926-8.602 6.2-4.991 1.515 1.881-3.865 3.112 1.19 1.478 3.546-2.854 1.515 1.882-3.545 2.854 1.19 1.478 3.848-3.097 1.514 1.882-6.182 4.977Zm4.141-16.635 4.275 10.183 2.765-1.161-1.411-3.361.956-.402 3.2 2.61 3.002-1.26L36.31 9.87c.421-.475.684-1.009.788-1.602.115-.637.02-1.32-.287-2.05-.303-.722-.721-1.276-1.253-1.66a3.351 3.351 0 0 0-1.822-.634c-.682-.037-1.4.103-2.157.42l-4.395 1.846Zm4.727 3.513-1.036-2.466.975-.41c.325-.136.62-.207.887-.214.268-.01.502.05.703.185.202.13.365.34.487.631.121.289.156.549.106.78-.048.231-.17.437-.367.617a2.755 2.755 0 0 1-.78.468l-.975.409Zm35.849 55.521v-1.027c0-.824.177-1.584.532-2.281a4.257 4.257 0 0 1 1.569-1.683c.684-.425 1.518-.637 2.5-.637 1.008 0 1.854.209 2.539.627.69.419 1.214.976 1.569 1.674.355.697.532 1.464.532 2.3v1.027c0 .824-.18 1.585-.542 2.282a4.17 4.17 0 0 1-1.569 1.683c-.69.424-1.533.637-2.529.637-.995 0-1.835-.213-2.52-.637a4.188 4.188 0 0 1-1.558-1.683 5.03 5.03 0 0 1-.523-2.282Zm3.308-1.027v1.027c0 .361.09.72.267 1.074.183.349.526.523 1.026.523.526 0 .872-.17 1.037-.513.17-.342.256-.704.256-1.084v-1.027c0-.38-.079-.748-.237-1.103-.159-.355-.51-.532-1.056-.532-.5 0-.843.177-1.026.532a2.437 2.437 0 0 0-.267 1.103Zm-13.5-10.116v-1.026c0-.837.18-1.604.542-2.301a4.259 4.259 0 0 1 1.578-1.674c.684-.418 1.512-.627 2.481-.627 1.008 0 1.854.21 2.539.627.69.419 1.214.976 1.569 1.674.355.697.532 1.464.532 2.3v1.027c0 .837-.18 1.6-.542 2.292a4.058 4.058 0 0 1-1.569 1.654c-.69.412-1.534.618-2.529.618-.995 0-1.835-.21-2.52-.628a4.14 4.14 0 0 1-1.558-1.663 4.972 4.972 0 0 1-.523-2.273Zm3.346-1.026v1.026c0 .38.09.742.267 1.084.177.342.507.514.988.514.526 0 .872-.172 1.037-.514.17-.342.256-.703.256-1.084v-1.026c0-.38-.079-.748-.237-1.103-.159-.355-.51-.533-1.056-.533-.5 0-.836.184-1.007.552a2.592 2.592 0 0 0-.248 1.084Zm-1.73 15.82L72.57 49.405h2.7L61.883 68.876h-2.7Zm-15.058-.523c1.16.526 2.488.789 3.984.789 1.584 0 2.963-.295 4.136-.884 1.172-.596 2.082-1.417 2.728-2.463.653-1.052.976-2.256.97-3.613.006-1.235-.257-2.326-.79-3.27a5.806 5.806 0 0 0-2.157-2.234c-.907-.54-1.94-.808-3.1-.808-.989 0-1.857.196-2.605.589-.748.387-1.274.875-1.578 1.464h-.114l.38-4.297h8.747v-4.221H41.644l-.76 10.724 4.639.913a2.443 2.443 0 0 1 1.036-1.113 3.062 3.062 0 0 1 1.55-.409c.538 0 1.014.118 1.426.352.412.228.735.555.97.98.234.418.348.912.342 1.483.006.564-.108 1.058-.342 1.483a2.509 2.509 0 0 1-.97.989c-.412.228-.887.342-1.426.342-.698 0-1.3-.2-1.807-.6-.5-.398-.76-.934-.78-1.606H40.39c.012 1.21.348 2.282 1.008 3.214.665.931 1.575 1.663 2.728 2.196Zm-19.514.523v-3.803l7.263-6.009c.482-.399.894-.773 1.236-1.122.349-.355.615-.719.799-1.093.19-.374.285-.789.285-1.245 0-.501-.108-.929-.323-1.284-.21-.355-.5-.627-.875-.818-.374-.196-.805-.294-1.293-.294-.488 0-.919.098-1.293.294a2.05 2.05 0 0 0-.855.866c-.203.38-.305.843-.305 1.388h-5.02c0-1.37.308-2.548.923-3.537.614-.989 1.483-1.75 2.605-2.282 1.122-.532 2.437-.798 3.945-.798 1.56 0 2.91.25 4.05.75 1.148.495 2.032 1.192 2.653 2.092.627.9.941 1.956.941 3.166 0 .748-.155 1.493-.466 2.235-.31.735-.868 1.55-1.673 2.443-.805.894-1.949 1.958-3.432 3.194l-1.826 1.522v.114h7.606v4.221H24.611ZM65.1 31.107v2.97h4.084v10.609h3.633V34.078h4.084v-2.97H65.101Zm-4.744 4.243c-.035-.442-.201-.786-.497-1.034-.292-.247-.736-.371-1.333-.371-.38 0-.692.046-.935.14-.238.088-.415.21-.53.364a.901.901 0 0 0-.18.53.87.87 0 0 0 .087.444c.07.129.181.246.332.352.15.102.342.194.576.278.235.084.513.16.836.226l1.114.238c.751.16 1.394.37 1.929.63.535.261.972.568 1.313.922.34.349.59.742.749 1.18.163.438.247.915.252 1.432-.005.893-.228 1.649-.67 2.267-.442.62-1.074 1.09-1.896 1.413-.818.322-1.801.484-2.95.484-1.18 0-2.21-.175-3.09-.524-.875-.35-1.556-.886-2.042-1.611-.482-.73-.725-1.662-.73-2.798h3.501c.023.415.126.765.312 1.047.186.283.446.498.782.644.34.145.745.218 1.214.218.393 0 .722-.048.988-.145.265-.098.466-.233.603-.405a.955.955 0 0 0 .212-.59.838.838 0 0 0-.206-.544c-.128-.159-.34-.3-.636-.424-.296-.128-.696-.248-1.2-.358l-1.353-.292c-1.202-.26-2.15-.696-2.844-1.306-.69-.614-1.032-1.452-1.027-2.513-.005-.861.225-1.615.689-2.26.469-.65 1.116-1.156 1.943-1.519.83-.362 1.783-.543 2.857-.543 1.096 0 2.044.183 2.844.55.8.367 1.417.884 1.85 1.551.438.663.659 1.44.663 2.327h-3.527Zm-19.79-4.242v13.578h3.686v-4.482h1.276l2.383 4.482h4.005l-2.758-5.063a3.953 3.953 0 0 0 1.657-1.441c.434-.668.65-1.488.65-2.46 0-.964-.21-1.79-.63-2.48a4.12 4.12 0 0 0-1.763-1.584c-.756-.367-1.638-.55-2.646-.55h-5.86Zm3.686 6.232V34.05h1.3c.432 0 .802.06 1.107.18.309.114.545.295.709.543.168.243.252.559.252.948 0 .384-.084.696-.252.935a1.4 1.4 0 0 1-.71.524c-.304.106-.674.159-1.107.159h-1.3Zm-5.433-6.233v13.579h-3.687V31.108h3.687Zm-14.59 0v13.579h3.686v-5.304h5.278v-2.97h-5.278v-2.334h5.861v-2.97H24.23Z" 12 + /> 13 + </Svg> 14 + ) 15 + }
+650
src/components/dialogs/nuxs/TenMillion/index.tsx
··· 1 + import React from 'react' 2 + import {View} from 'react-native' 3 + import Animated, {FadeIn} from 'react-native-reanimated' 4 + import ViewShot from 'react-native-view-shot' 5 + import {Image} from 'expo-image' 6 + import {requestMediaLibraryPermissionsAsync} from 'expo-image-picker' 7 + import * as MediaLibrary from 'expo-media-library' 8 + import {moderateProfile} from '@atproto/api' 9 + import {msg, Trans} from '@lingui/macro' 10 + import {useLingui} from '@lingui/react' 11 + 12 + import {networkRetry} from '#/lib/async/retry' 13 + import {getCanvas} from '#/lib/canvas' 14 + import {shareUrl} from '#/lib/sharing' 15 + import {sanitizeDisplayName} from '#/lib/strings/display-names' 16 + import {sanitizeHandle} from '#/lib/strings/handles' 17 + import {isIOS, isNative} from '#/platform/detection' 18 + import {useModerationOpts} from '#/state/preferences/moderation-opts' 19 + import {useProfileQuery} from '#/state/queries/profile' 20 + import {useAgent, useSession} from '#/state/session' 21 + import {useComposerControls} from 'state/shell' 22 + import {formatCount} from '#/view/com/util/numeric/format' 23 + import {Logomark} from '#/view/icons/Logomark' 24 + import * as Toast from 'view/com/util/Toast' 25 + import { 26 + atoms as a, 27 + ThemeProvider, 28 + tokens, 29 + useBreakpoints, 30 + useTheme, 31 + } from '#/alf' 32 + import {Button, ButtonIcon, ButtonText} from '#/components/Button' 33 + import * as Dialog from '#/components/Dialog' 34 + import {useNuxDialogContext} from '#/components/dialogs/nuxs' 35 + import {OnePercent} from '#/components/dialogs/nuxs/TenMillion/icons/OnePercent' 36 + import {PointOnePercent} from '#/components/dialogs/nuxs/TenMillion/icons/PointOnePercent' 37 + import {TenPercent} from '#/components/dialogs/nuxs/TenMillion/icons/TenPercent' 38 + import {Divider} from '#/components/Divider' 39 + import {GradientFill} from '#/components/GradientFill' 40 + import {ArrowOutOfBox_Stroke2_Corner0_Rounded as Share} from '#/components/icons/ArrowOutOfBox' 41 + import {Download_Stroke2_Corner0_Rounded as Download} from '#/components/icons/Download' 42 + import {Image_Stroke2_Corner0_Rounded as ImageIcon} from '#/components/icons/Image' 43 + import {Loader} from '#/components/Loader' 44 + import {Text} from '#/components/Typography' 45 + 46 + const DEBUG = false 47 + const RATIO = 8 / 10 48 + const WIDTH = 2000 49 + const HEIGHT = WIDTH * RATIO 50 + 51 + function getFontSize(count: number) { 52 + const length = count.toString().length 53 + if (length < 7) { 54 + return 80 55 + } else if (length < 5) { 56 + return 100 57 + } else { 58 + return 70 59 + } 60 + } 61 + 62 + function getPercentBadge(percent: number) { 63 + if (percent <= 0.001) { 64 + return PointOnePercent 65 + } else if (percent <= 0.01) { 66 + return OnePercent 67 + } else if (percent <= 0.1) { 68 + return TenPercent 69 + } 70 + return null 71 + } 72 + 73 + function Frame({children}: {children: React.ReactNode}) { 74 + return ( 75 + <View 76 + style={[ 77 + a.relative, 78 + a.w_full, 79 + a.overflow_hidden, 80 + { 81 + paddingTop: '80%', 82 + }, 83 + ]}> 84 + {children} 85 + </View> 86 + ) 87 + } 88 + 89 + export function TenMillion() { 90 + const agent = useAgent() 91 + const nuxDialogs = useNuxDialogContext() 92 + const [userNumber, setUserNumber] = React.useState<number>(0) 93 + const fetching = React.useRef(false) 94 + 95 + React.useEffect(() => { 96 + async function fetchUserNumber() { 97 + const isBlueskyHosted = agent.sessionManager.pdsUrl 98 + ?.toString() 99 + .includes('bsky.network') 100 + 101 + if (isBlueskyHosted && agent.session?.accessJwt) { 102 + const res = await fetch( 103 + `https://bsky.social/xrpc/com.atproto.temp.getSignupNumber`, 104 + { 105 + headers: { 106 + Authorization: `Bearer ${agent.session.accessJwt}`, 107 + }, 108 + }, 109 + ) 110 + 111 + if (!res.ok) { 112 + throw new Error('Network request failed') 113 + } 114 + 115 + const data = await res.json() 116 + 117 + if (data.number) { 118 + setUserNumber(data.number) 119 + } else { 120 + // should be rare 121 + nuxDialogs.dismissActiveNux() 122 + } 123 + } 124 + } 125 + 126 + if (!fetching.current) { 127 + fetching.current = true 128 + networkRetry(3, fetchUserNumber).catch(() => { 129 + nuxDialogs.dismissActiveNux() 130 + }) 131 + } 132 + }, [ 133 + agent.sessionManager.pdsUrl, 134 + agent.session?.accessJwt, 135 + setUserNumber, 136 + nuxDialogs.dismissActiveNux, 137 + nuxDialogs, 138 + ]) 139 + 140 + return userNumber ? <TenMillionInner userNumber={userNumber} /> : null 141 + } 142 + 143 + export function TenMillionInner({userNumber}: {userNumber: number}) { 144 + const t = useTheme() 145 + const lightTheme = useTheme('light') 146 + const {_, i18n} = useLingui() 147 + const control = Dialog.useDialogControl() 148 + const {gtMobile} = useBreakpoints() 149 + const {openComposer} = useComposerControls() 150 + const {currentAccount} = useSession() 151 + const { 152 + isLoading: isProfileLoading, 153 + data: profile, 154 + error: profileError, 155 + } = useProfileQuery({ 156 + did: currentAccount!.did, 157 + }) 158 + const moderationOpts = useModerationOpts() 159 + const nuxDialogs = useNuxDialogContext() 160 + const moderation = React.useMemo(() => { 161 + return profile && moderationOpts 162 + ? moderateProfile(profile, moderationOpts) 163 + : undefined 164 + }, [profile, moderationOpts]) 165 + const [uri, setUri] = React.useState<string | null>(null) 166 + const percent = userNumber / 10_000_000 167 + const Badge = getPercentBadge(percent) 168 + const isLoadingData = isProfileLoading || !moderation || !profile 169 + const isLoadingImage = !uri 170 + 171 + const error: string = React.useMemo(() => { 172 + if (profileError) { 173 + return _( 174 + msg`Oh no! We weren't able to generate an image for you to share. Rest assured, we're glad you're here 🦋`, 175 + ) 176 + } 177 + return '' 178 + }, [_, profileError]) 179 + 180 + /* 181 + * Opening and closing 182 + */ 183 + React.useEffect(() => { 184 + const timeout = setTimeout(() => { 185 + control.open() 186 + }, 3e3) 187 + return () => { 188 + clearTimeout(timeout) 189 + } 190 + }, [control]) 191 + const onClose = React.useCallback(() => { 192 + nuxDialogs.dismissActiveNux() 193 + }, [nuxDialogs]) 194 + 195 + /* 196 + * Actions 197 + */ 198 + const sharePost = React.useCallback(() => { 199 + if (uri) { 200 + control.close(() => { 201 + setTimeout(() => { 202 + openComposer({ 203 + text: _( 204 + msg`Bluesky now has over 10 million users, and I was #${i18n.number( 205 + userNumber, 206 + )}!`, 207 + ), // TODO 208 + imageUris: [ 209 + { 210 + uri, 211 + width: WIDTH, 212 + height: HEIGHT, 213 + }, 214 + ], 215 + }) 216 + }, 1e3) 217 + }) 218 + } 219 + }, [_, i18n, control, openComposer, uri, userNumber]) 220 + const onNativeShare = React.useCallback(() => { 221 + if (uri) { 222 + control.close(() => { 223 + shareUrl(uri) 224 + }) 225 + } 226 + }, [uri, control]) 227 + const onNativeDownload = React.useCallback(async () => { 228 + if (uri) { 229 + const res = await requestMediaLibraryPermissionsAsync() 230 + 231 + if (!res) { 232 + Toast.show( 233 + _( 234 + msg`You must grant access to your photo library to save the image.`, 235 + ), 236 + 'xmark', 237 + ) 238 + return 239 + } 240 + 241 + try { 242 + await MediaLibrary.createAssetAsync(uri) 243 + Toast.show(_(msg`Image saved to your camera roll!`)) 244 + } catch (e: unknown) { 245 + console.log(e) 246 + Toast.show(_(msg`An error occurred while saving the image!`), 'xmark') 247 + return 248 + } 249 + } 250 + }, [_, uri]) 251 + const onWebDownload = React.useCallback(async () => { 252 + if (uri) { 253 + const canvas = await getCanvas(uri) 254 + const imgHref = canvas 255 + .toDataURL('image/png') 256 + .replace('image/png', 'image/octet-stream') 257 + const link = document.createElement('a') 258 + link.setAttribute('download', `Bluesky 10M Users.png`) 259 + link.setAttribute('href', imgHref) 260 + link.click() 261 + } 262 + }, [uri]) 263 + 264 + /* 265 + * Canvas stuff 266 + */ 267 + const imageRef = React.useRef<ViewShot>(null) 268 + const captureInProgress = React.useRef(false) 269 + const onCanvasReady = React.useCallback(async () => { 270 + if ( 271 + imageRef.current && 272 + imageRef.current.capture && 273 + !captureInProgress.current 274 + ) { 275 + captureInProgress.current = true 276 + const uri = await imageRef.current.capture() 277 + setUri(uri) 278 + } 279 + }, [setUri]) 280 + const canvas = isLoadingData ? null : ( 281 + <View 282 + style={[ 283 + a.absolute, 284 + a.overflow_hidden, 285 + DEBUG 286 + ? { 287 + width: 600, 288 + height: 600 * RATIO, 289 + } 290 + : { 291 + width: 1, 292 + height: 1, 293 + }, 294 + ]}> 295 + <View style={{width: 600}}> 296 + <ThemeProvider theme="light"> 297 + <Frame> 298 + <ViewShot 299 + ref={imageRef} 300 + options={{width: WIDTH, height: HEIGHT}} 301 + style={[a.absolute, a.inset_0]}> 302 + <View 303 + onLayout={onCanvasReady} 304 + style={[ 305 + a.absolute, 306 + a.inset_0, 307 + a.align_center, 308 + a.justify_center, 309 + { 310 + top: -1, 311 + bottom: -1, 312 + left: -1, 313 + right: -1, 314 + paddingVertical: 48, 315 + paddingHorizontal: 48, 316 + }, 317 + ]}> 318 + <GradientFill gradient={tokens.gradients.bonfire} /> 319 + 320 + <View 321 + style={[ 322 + a.flex_1, 323 + a.w_full, 324 + a.align_center, 325 + a.justify_center, 326 + a.rounded_md, 327 + { 328 + backgroundColor: 'white', 329 + shadowRadius: 32, 330 + shadowOpacity: 0.1, 331 + elevation: 24, 332 + shadowColor: tokens.gradients.bonfire.values[0][1], 333 + }, 334 + ]}> 335 + <View 336 + style={[ 337 + a.absolute, 338 + a.px_xl, 339 + a.py_xl, 340 + { 341 + top: 0, 342 + left: 0, 343 + }, 344 + ]}> 345 + <Logomark fill={t.palette.primary_500} width={36} /> 346 + </View> 347 + 348 + {/* Centered content */} 349 + <View 350 + style={[ 351 + { 352 + paddingBottom: isNative ? 0 : 24, 353 + }, 354 + ]}> 355 + <Text 356 + style={[ 357 + a.text_md, 358 + a.font_bold, 359 + a.text_center, 360 + a.pb_sm, 361 + lightTheme.atoms.text_contrast_medium, 362 + ]}> 363 + <Trans> 364 + Celebrating {formatCount(i18n, 10000000)} users 365 + </Trans>{' '} 366 + 🎉 367 + </Text> 368 + <View style={[a.flex_row, a.align_start]}> 369 + <Text 370 + style={[ 371 + a.absolute, 372 + { 373 + color: t.palette.primary_500, 374 + fontSize: 32, 375 + fontWeight: '900', 376 + width: 32, 377 + top: isNative ? -10 : 0, 378 + left: 0, 379 + transform: [ 380 + { 381 + translateX: -16, 382 + }, 383 + ], 384 + }, 385 + ]}> 386 + # 387 + </Text> 388 + <Text 389 + style={[ 390 + a.relative, 391 + a.text_center, 392 + { 393 + fontStyle: 'italic', 394 + fontSize: getFontSize(userNumber), 395 + lineHeight: getFontSize(userNumber), 396 + fontWeight: '900', 397 + letterSpacing: -2, 398 + }, 399 + ]}> 400 + {i18n.number(userNumber)} 401 + </Text> 402 + </View> 403 + 404 + {Badge && ( 405 + <View 406 + style={[ 407 + a.absolute, 408 + { 409 + width: 64, 410 + height: 64, 411 + top: isNative ? 75 : 85, 412 + right: '5%', 413 + transform: [ 414 + { 415 + rotate: '8deg', 416 + }, 417 + ], 418 + }, 419 + ]}> 420 + <Badge fill={t.palette.primary_500} /> 421 + </View> 422 + )} 423 + </View> 424 + {/* End centered content */} 425 + 426 + <View 427 + style={[ 428 + a.absolute, 429 + a.px_xl, 430 + a.py_xl, 431 + { 432 + bottom: 0, 433 + left: 0, 434 + right: 0, 435 + }, 436 + ]}> 437 + <View style={[a.flex_row, a.align_center, a.gap_sm]}> 438 + {/* 439 + <UserAvatar 440 + size={36} 441 + avatar={profile.avatar} 442 + moderation={moderation.ui('avatar')} 443 + onLoad={onCanvasReady} 444 + /> 445 + */} 446 + <View style={[a.gap_2xs, a.flex_1]}> 447 + <Text 448 + style={[ 449 + a.flex_1, 450 + a.text_sm, 451 + a.font_bold, 452 + a.leading_tight, 453 + {maxWidth: '60%'}, 454 + ]}> 455 + {sanitizeDisplayName( 456 + profile.displayName || 457 + sanitizeHandle(profile.handle), 458 + moderation.ui('displayName'), 459 + )} 460 + </Text> 461 + <View 462 + style={[a.flex_row, a.justify_between, a.gap_4xl]}> 463 + <Text 464 + numberOfLines={1} 465 + style={[ 466 + a.flex_1, 467 + a.text_sm, 468 + a.font_semibold, 469 + a.leading_snug, 470 + lightTheme.atoms.text_contrast_medium, 471 + ]}> 472 + {sanitizeHandle(profile.handle, '@')} 473 + </Text> 474 + 475 + {profile.createdAt && ( 476 + <Text 477 + numberOfLines={1} 478 + ellipsizeMode="head" 479 + style={[ 480 + a.flex_1, 481 + a.text_sm, 482 + a.font_semibold, 483 + a.leading_snug, 484 + a.text_right, 485 + lightTheme.atoms.text_contrast_low, 486 + ]}> 487 + <Trans> 488 + Joined{' '} 489 + {i18n.date(profile.createdAt, { 490 + month: 'short', 491 + day: 'numeric', 492 + year: 'numeric', 493 + })} 494 + </Trans> 495 + </Text> 496 + )} 497 + </View> 498 + </View> 499 + </View> 500 + </View> 501 + </View> 502 + </View> 503 + </ViewShot> 504 + </Frame> 505 + </ThemeProvider> 506 + </View> 507 + </View> 508 + ) 509 + 510 + return ( 511 + <Dialog.Outer control={control} onClose={onClose}> 512 + <Dialog.ScrollableInner 513 + label={_(msg`Ten Million`)} 514 + style={[ 515 + { 516 + padding: 0, 517 + paddingTop: 0, 518 + }, 519 + ]}> 520 + <View 521 + style={[ 522 + a.rounded_md, 523 + a.overflow_hidden, 524 + isNative && { 525 + borderTopLeftRadius: 40, 526 + borderTopRightRadius: 40, 527 + }, 528 + ]}> 529 + <Frame> 530 + <View 531 + style={[a.absolute, a.inset_0, a.align_center, a.justify_center]}> 532 + <GradientFill gradient={tokens.gradients.bonfire} /> 533 + {error ? ( 534 + <View> 535 + <Text 536 + style={[ 537 + a.text_md, 538 + a.leading_snug, 539 + a.text_center, 540 + a.pb_md, 541 + { 542 + maxWidth: 300, 543 + }, 544 + ]}> 545 + (╯°□°)╯︵ ┻━┻ 546 + </Text> 547 + <Text 548 + style={[ 549 + a.text_xl, 550 + a.font_bold, 551 + a.leading_snug, 552 + a.text_center, 553 + { 554 + maxWidth: 300, 555 + }, 556 + ]}> 557 + {error} 558 + </Text> 559 + </View> 560 + ) : isLoadingData || isLoadingImage ? ( 561 + <Loader size="xl" fill="white" /> 562 + ) : ( 563 + <Animated.View 564 + entering={FadeIn.duration(150)} 565 + style={[a.w_full, a.h_full]}> 566 + <Image 567 + accessibilityIgnoresInvertColors 568 + source={{uri}} 569 + style={[a.w_full, a.h_full]} 570 + /> 571 + </Animated.View> 572 + )} 573 + </View> 574 + </Frame> 575 + 576 + {canvas} 577 + 578 + <View style={[gtMobile ? a.p_2xl : a.p_xl]}> 579 + <Text 580 + style={[ 581 + a.text_5xl, 582 + a.leading_tight, 583 + a.pb_lg, 584 + { 585 + fontWeight: '900', 586 + }, 587 + ]}> 588 + <Trans>Thanks for being one of our first 10 million users.</Trans> 589 + </Text> 590 + 591 + <Text style={[a.leading_snug, a.text_lg, a.pb_xl]}> 592 + <Trans> 593 + Together, we're rebuilding the social internet. We're glad 594 + you're here. 595 + </Trans> 596 + </Text> 597 + 598 + <Divider /> 599 + 600 + <View 601 + style={[ 602 + a.flex_row, 603 + a.align_center, 604 + a.justify_end, 605 + a.gap_md, 606 + a.pt_xl, 607 + ]}> 608 + <Text style={[a.text_md, a.italic, t.atoms.text_contrast_medium]}> 609 + <Trans>Brag a little!</Trans> 610 + </Text> 611 + 612 + <Button 613 + disabled={isLoadingImage} 614 + label={ 615 + isNative && isIOS 616 + ? _(msg`Share image externally`) 617 + : _(msg`Download image`) 618 + } 619 + size="large" 620 + variant="solid" 621 + color="secondary" 622 + shape="square" 623 + onPress={ 624 + isNative 625 + ? isIOS 626 + ? onNativeShare 627 + : onNativeDownload 628 + : onWebDownload 629 + }> 630 + <ButtonIcon icon={isNative && isIOS ? Share : Download} /> 631 + </Button> 632 + <Button 633 + disabled={isLoadingImage} 634 + label={_(msg`Share image in post`)} 635 + size="large" 636 + variant="solid" 637 + color="primary" 638 + onPress={sharePost}> 639 + <ButtonText>{_(msg`Share`)}</ButtonText> 640 + <ButtonIcon position="right" icon={ImageIcon} /> 641 + </Button> 642 + </View> 643 + </View> 644 + </View> 645 + 646 + <Dialog.Close /> 647 + </Dialog.ScrollableInner> 648 + </Dialog.Outer> 649 + ) 650 + }
+151
src/components/dialogs/nuxs/index.tsx
··· 1 + import React from 'react' 2 + 3 + import {useGate} from '#/lib/statsig/statsig' 4 + import {logger} from '#/logger' 5 + import { 6 + Nux, 7 + useNuxs, 8 + useRemoveNuxsMutation, 9 + useUpsertNuxMutation, 10 + } from '#/state/queries/nuxs' 11 + import {useSession} from '#/state/session' 12 + import {isSnoozed, snooze, unsnooze} from '#/components/dialogs/nuxs/snoozing' 13 + import {TenMillion} from '#/components/dialogs/nuxs/TenMillion' 14 + import {IS_DEV} from '#/env' 15 + 16 + type Context = { 17 + activeNux: Nux | undefined 18 + dismissActiveNux: () => void 19 + } 20 + 21 + /** 22 + * If we fail to complete a NUX here, it may show again on next reload, 23 + * or if prefs state updates. If `true`, this fallback ensures that the last 24 + * shown NUX won't show again, at least for this session. 25 + * 26 + * This is temporary, and only needed for the 10Milly dialog rn, since we 27 + * aren't snoozing that one in device storage. 28 + */ 29 + let __isSnoozedFallback = false 30 + 31 + const queuedNuxs: { 32 + id: Nux 33 + enabled(props: {gate: ReturnType<typeof useGate>}): boolean 34 + /** 35 + * TEMP only intended for use with the 10Milly dialog rn, since there are no 36 + * other NUX dialogs configured 37 + */ 38 + unsafe_disableSnooze: boolean 39 + }[] = [ 40 + { 41 + id: Nux.TenMillionDialog, 42 + enabled({gate}) { 43 + return gate('ten_million_dialog') 44 + }, 45 + unsafe_disableSnooze: true, 46 + }, 47 + ] 48 + 49 + const Context = React.createContext<Context>({ 50 + activeNux: undefined, 51 + dismissActiveNux: () => {}, 52 + }) 53 + 54 + export function useNuxDialogContext() { 55 + return React.useContext(Context) 56 + } 57 + 58 + export function NuxDialogs() { 59 + const {hasSession} = useSession() 60 + return hasSession ? <Inner /> : null 61 + } 62 + 63 + function Inner() { 64 + const gate = useGate() 65 + const {nuxs} = useNuxs() 66 + const [snoozed, setSnoozed] = React.useState(() => { 67 + return isSnoozed() 68 + }) 69 + const [activeNux, setActiveNux] = React.useState<Nux | undefined>() 70 + const {mutateAsync: upsertNux} = useUpsertNuxMutation() 71 + const {mutate: removeNuxs} = useRemoveNuxsMutation() 72 + 73 + const snoozeNuxDialog = React.useCallback(() => { 74 + snooze() 75 + setSnoozed(true) 76 + }, [setSnoozed]) 77 + 78 + const dismissActiveNux = React.useCallback(() => { 79 + if (!activeNux) return 80 + setActiveNux(undefined) 81 + }, [activeNux, setActiveNux]) 82 + 83 + if (IS_DEV && typeof window !== 'undefined') { 84 + // @ts-ignore 85 + window.clearNuxDialog = (id: Nux) => { 86 + if (!IS_DEV || !id) return 87 + removeNuxs([id]) 88 + unsnooze() 89 + } 90 + } 91 + 92 + React.useEffect(() => { 93 + if (__isSnoozedFallback) return 94 + if (snoozed) return 95 + if (!nuxs) return 96 + 97 + for (const {id, enabled, unsafe_disableSnooze} of queuedNuxs) { 98 + const nux = nuxs.find(nux => nux.id === id) 99 + 100 + // check if completed first 101 + if (nux && nux.completed) continue 102 + 103 + // then check gate (track exposure) 104 + if (!enabled({gate})) continue 105 + 106 + // we have a winner 107 + setActiveNux(id) 108 + 109 + /** 110 + * TEMP only intended for use with the 10Milly dialog rn, since there are no 111 + * other NUX dialogs configured 112 + */ 113 + if (!unsafe_disableSnooze) { 114 + // immediately snooze for a day 115 + snoozeNuxDialog() 116 + } 117 + 118 + // immediately update remote data (affects next reload) 119 + upsertNux({ 120 + id, 121 + completed: true, 122 + data: undefined, 123 + }).catch(e => { 124 + logger.error(`NUX dialogs: failed to upsert '${id}' NUX`, { 125 + safeMessage: e.message, 126 + }) 127 + /* 128 + * TEMP only intended for use with the 10Milly dialog rn 129 + */ 130 + if (unsafe_disableSnooze) { 131 + __isSnoozedFallback = true 132 + } 133 + }) 134 + 135 + break 136 + } 137 + }, [nuxs, snoozed, snoozeNuxDialog, upsertNux, gate]) 138 + 139 + const ctx = React.useMemo(() => { 140 + return { 141 + activeNux, 142 + dismissActiveNux, 143 + } 144 + }, [activeNux, dismissActiveNux]) 145 + 146 + return ( 147 + <Context.Provider value={ctx}> 148 + {activeNux === Nux.TenMillionDialog && <TenMillion />} 149 + </Context.Provider> 150 + ) 151 + }
+22
src/components/dialogs/nuxs/snoozing.ts
··· 1 + import {simpleAreDatesEqual} from '#/lib/strings/time' 2 + import {device} from '#/storage' 3 + 4 + export function snooze() { 5 + device.set(['lastNuxDialog'], new Date().toISOString()) 6 + } 7 + 8 + export function unsnooze() { 9 + device.set(['lastNuxDialog'], undefined) 10 + } 11 + 12 + export function isSnoozed() { 13 + const lastNuxDialog = device.get(['lastNuxDialog']) 14 + if (!lastNuxDialog) return false 15 + const last = new Date(lastNuxDialog) 16 + const now = new Date() 17 + // already snoozed today 18 + if (simpleAreDatesEqual(last, now)) { 19 + return true 20 + } 21 + return false 22 + }
+5
src/components/icons/Download.tsx
··· 1 + import {createSinglePathSVG} from './TEMPLATE' 2 + 3 + export const Download_Stroke2_Corner0_Rounded = createSinglePathSVG({ 4 + path: 'M12 3a1 1 0 0 1 1 1v8.086l1.793-1.793a1 1 0 1 1 1.414 1.414l-3.5 3.5a1 1 0 0 1-1.414 0l-3.5-3.5a1 1 0 1 1 1.414-1.414L11 12.086V4a1 1 0 0 1 1-1ZM4 14a1 1 0 0 1 1 1v4h14v-4a1 1 0 1 1 2 0v5a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1v-5a1 1 0 0 1 1-1Z', 5 + })
+15
src/lib/canvas.ts
··· 1 + export const getCanvas = (base64: string): Promise<HTMLCanvasElement> => { 2 + return new Promise(resolve => { 3 + const image = new Image() 4 + image.onload = () => { 5 + const canvas = document.createElement('canvas') 6 + canvas.width = image.width 7 + canvas.height = image.height 8 + 9 + const ctx = canvas.getContext('2d') 10 + ctx?.drawImage(image, 0, 0) 11 + resolve(canvas) 12 + } 13 + image.src = base64 14 + }) 15 + }
+5 -1
src/lib/hooks/useIntentHandler.ts
··· 71 71 }, [incomingUrl, composeIntent, verifyEmailIntent]) 72 72 } 73 73 74 - function useComposeIntent() { 74 + export function useComposeIntent() { 75 75 const closeAllActiveElements = useCloseAllActiveElements() 76 76 const {openComposer} = useComposerControls() 77 77 const {hasSession} = useSession() ··· 97 97 if (part.includes('https://') || part.includes('http://')) { 98 98 return false 99 99 } 100 + console.log({ 101 + part, 102 + text: VALID_IMAGE_REGEX.test(part), 103 + }) 100 104 // We also should just filter out cases that don't have all the info we need 101 105 return VALID_IMAGE_REGEX.test(part) 102 106 })
+3 -1
src/lib/statsig/gates.ts
··· 1 1 export type Gate = 2 2 // Keep this alphabetic please. 3 - 'debug_show_feedcontext' | 'suggested_feeds_interstitial' 3 + | 'debug_show_feedcontext' 4 + | 'suggested_feeds_interstitial' 5 + | 'ten_million_dialog'
+143 -81
src/locale/locales/ja/messages.po
··· 115 115 msgid "{0} joined this week" 116 116 msgstr "今週、{0}人が参加しました" 117 117 118 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:593 118 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:637 119 119 msgid "{0} of {1}" 120 120 msgstr "{0} / {1}" 121 121 ··· 123 123 msgid "{0} people have used this starter pack!" 124 124 msgstr "{0}人がこのスターターパックを使用しました!" 125 125 126 - #: src/view/com/util/UserAvatar.tsx:419 126 + #: src/view/com/util/UserAvatar.tsx:423 127 127 msgid "{0}'s avatar" 128 128 msgstr "{0}のアバター" 129 129 ··· 372 372 msgid "Add alt text" 373 373 msgstr "ALTテキストを追加" 374 374 375 - #: src/view/com/composer/videos/SubtitleDialog.tsx:107 375 + #: src/view/com/composer/videos/SubtitleDialog.tsx:109 376 376 msgid "Add alt text (optional)" 377 377 msgstr "ALTテキストを追加(オプション)" 378 378 ··· 493 493 msgstr "ALT" 494 494 495 495 #: src/view/com/composer/GifAltText.tsx:144 496 - #: src/view/com/composer/videos/SubtitleDialog.tsx:54 497 - #: src/view/com/composer/videos/SubtitleDialog.tsx:102 498 - #: src/view/com/composer/videos/SubtitleDialog.tsx:106 496 + #: src/view/com/composer/videos/SubtitleDialog.tsx:56 497 + #: src/view/com/composer/videos/SubtitleDialog.tsx:104 498 + #: src/view/com/composer/videos/SubtitleDialog.tsx:108 499 499 #: src/view/com/modals/EditImage.tsx:316 500 500 #: src/view/screens/AccessibilitySettings.tsx:87 501 501 msgid "Alt text" ··· 522 522 msgid "An error has occurred" 523 523 msgstr "エラーが発生しました" 524 524 525 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:369 525 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:413 526 526 msgid "An error occurred" 527 527 msgstr "エラーが発生しました" 528 528 529 - #: src/state/queries/video/video.ts:227 529 + #: src/state/queries/video/video.ts:232 530 530 msgid "An error occurred while compressing the video." 531 531 msgstr "ビデオの圧縮中にエラーが発生しました。" 532 532 ··· 534 534 msgid "An error occurred while generating your starter pack. Want to try again?" 535 535 msgstr "スターターパックの生成中にエラーが発生しました。再度試しますか?" 536 536 537 - #: src/view/com/util/post-embeds/VideoEmbed.tsx:213 537 + #: src/view/com/util/post-embeds/VideoEmbed.tsx:215 538 538 msgid "An error occurred while loading the video. Please try again later." 539 539 msgstr "ビデオの読み込み時にエラーが発生しました。時間をおいてもう一度お試しください。" 540 540 541 - #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:170 541 + #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:174 542 542 msgid "An error occurred while loading the video. Please try again." 543 543 msgstr "ビデオの読み込み時にエラーが発生しました。もう一度お試しください。" 544 544 ··· 547 547 msgid "An error occurred while saving the QR code!" 548 548 msgstr "QRコードの保存中にエラーが発生しました!" 549 549 550 - #: src/view/com/composer/videos/SelectVideoBtn.tsx:61 550 + #: src/view/com/composer/videos/SelectVideoBtn.tsx:68 551 551 msgid "An error occurred while selecting the video" 552 552 msgstr "ビデオの選択中にエラーが発生しました" 553 553 ··· 556 556 msgid "An error occurred while trying to follow all" 557 557 msgstr "すべてフォローしようとしたらエラーが発生しました" 558 558 559 - #: src/state/queries/video/video.ts:194 559 + #: src/state/queries/video/video.ts:199 560 560 msgid "An error occurred while uploading the video." 561 561 msgstr "ビデオのアップロード中にエラーが発生しました。" 562 562 ··· 702 702 msgid "Are you sure you want to remove this from your feeds?" 703 703 msgstr "本当にこのフィードをあなたのフィードから削除したいですか?" 704 704 705 - #: src/view/com/composer/Composer.tsx:837 705 + #: src/view/com/composer/Composer.tsx:841 706 706 msgid "Are you sure you'd like to discard this draft?" 707 707 msgstr "本当にこの下書きを破棄しますか?" 708 708 ··· 844 844 msgid "Bluesky is better with friends!" 845 845 msgstr "Blueskyは友達と一緒のほうが楽しい!" 846 846 847 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:201 848 + msgid "Bluesky now has over 10 million users, and I was #{0}!" 849 + msgstr "Bluesky のユーザー数は現在 1,000 万人を超えており、私は #{0} でした。" 850 + 847 851 #: src/components/StarterPack/ProfileStarterPacks.tsx:282 848 852 msgid "Bluesky will choose a set of recommended accounts from people in your network." 849 853 msgstr "Blueskyはあなたのつながっているユーザーからおすすめのアカウントを選びます。" ··· 864 868 #: src/screens/Onboarding/state.ts:81 865 869 msgid "Books" 866 870 msgstr "書籍" 871 + 872 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:583 873 + msgid "Brag a little!" 874 + msgstr "ちょっと自慢してみよう!" 867 875 868 876 #: src/components/FeedInterstitials.tsx:346 869 877 msgid "Browse more accounts on the Explore page" ··· 927 935 #: src/components/Prompt.tsx:124 928 936 #: src/components/TagMenu/index.tsx:282 929 937 #: src/screens/Deactivated.tsx:161 930 - #: src/view/com/composer/Composer.tsx:590 931 - #: src/view/com/composer/Composer.tsx:605 938 + #: src/view/com/composer/Composer.tsx:595 939 + #: src/view/com/composer/Composer.tsx:610 932 940 #: src/view/com/modals/ChangeEmail.tsx:213 933 941 #: src/view/com/modals/ChangeEmail.tsx:215 934 942 #: src/view/com/modals/ChangeHandle.tsx:148 ··· 996 1004 msgid "Cannot interact with a blocked user" 997 1005 msgstr "ブロックしたユーザーとはやりとりできません" 998 1006 999 - #: src/view/com/composer/videos/SubtitleDialog.tsx:133 1007 + #: src/view/com/composer/videos/SubtitleDialog.tsx:135 1000 1008 msgid "Captions (.vtt)" 1001 1009 msgstr "キャプション(.vtt)" 1002 1010 1003 - #: src/view/com/composer/videos/SubtitleDialog.tsx:54 1011 + #: src/view/com/composer/videos/SubtitleDialog.tsx:56 1004 1012 msgid "Captions & alt text" 1005 1013 msgstr "キャプション&ALTテキスト" 1006 1014 1015 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:336 1016 + msgid "Celebrating {0} users" 1017 + msgstr "{0} 人のユーザーを祝福" 1018 + 1007 1019 #: src/view/com/modals/VerifyEmail.tsx:160 1008 1020 msgid "Change" 1009 1021 msgstr "変更" ··· 1238 1250 msgid "Closes password update alert" 1239 1251 msgstr "パスワード更新アラートを閉じる" 1240 1252 1241 - #: src/view/com/composer/Composer.tsx:602 1253 + #: src/view/com/composer/Composer.tsx:607 1242 1254 msgid "Closes post composer and discards post draft" 1243 1255 msgstr "投稿の編集画面を閉じて下書きを削除する" 1244 1256 ··· 1277 1289 msgid "Complete the challenge" 1278 1290 msgstr "テストをクリアしてください" 1279 1291 1280 - #: src/view/com/composer/Composer.tsx:710 1292 + #: src/view/com/composer/Composer.tsx:715 1281 1293 msgid "Compose posts up to {MAX_GRAPHEME_LENGTH} characters in length" 1282 1294 msgstr "{MAX_GRAPHEME_LENGTH}文字までの投稿を作成" 1283 1295 ··· 1495 1507 msgid "Could not mute chat" 1496 1508 msgstr "チャットのミュートに失敗しました" 1497 1509 1498 - #: src/view/com/composer/videos/VideoPreview.web.tsx:45 1510 + #: src/view/com/composer/videos/VideoPreview.web.tsx:56 1499 1511 msgid "Could not process your video" 1500 1512 msgstr "ビデオを処理できませんでした" 1501 1513 ··· 1604 1616 msgid "Dark theme" 1605 1617 msgstr "ダークテーマ" 1606 1618 1607 - #: src/screens/Signup/StepInfo/index.tsx:191 1619 + #: src/screens/Signup/StepInfo/index.tsx:192 1608 1620 msgid "Date of birth" 1609 1621 msgstr "生年月日" 1610 1622 ··· 1738 1750 msgid "Dialog: adjust who can interact with this post" 1739 1751 msgstr "ダイアログ:この投稿に誰が反応できるか調整" 1740 1752 1741 - #: src/view/com/composer/Composer.tsx:351 1753 + #: src/view/com/composer/Composer.tsx:356 1742 1754 msgid "Did you want to say anything?" 1743 1755 msgstr "なにか言いたいことはあった?" 1744 1756 ··· 1763 1775 msgid "Disable haptic feedback" 1764 1776 msgstr "触覚フィードバックを無効化" 1765 1777 1766 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:335 1778 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:379 1767 1779 msgid "Disable subtitles" 1768 1780 msgstr "サブタイトル(字幕)を無効にする" 1769 1781 ··· 1776 1788 msgid "Disabled" 1777 1789 msgstr "無効" 1778 1790 1779 - #: src/view/com/composer/Composer.tsx:839 1791 + #: src/view/com/composer/Composer.tsx:843 1780 1792 msgid "Discard" 1781 1793 msgstr "破棄" 1782 1794 1783 - #: src/view/com/composer/Composer.tsx:836 1795 + #: src/view/com/composer/Composer.tsx:840 1784 1796 msgid "Discard draft?" 1785 1797 msgstr "下書きを削除しますか?" 1786 1798 ··· 1806 1818 #~ msgid "Dismiss" 1807 1819 #~ msgstr "消す" 1808 1820 1809 - #: src/view/com/composer/Composer.tsx:1106 1821 + #: src/view/com/composer/Composer.tsx:1110 1810 1822 msgid "Dismiss error" 1811 1823 msgstr "エラーを消す" 1812 1824 ··· 1858 1870 #: src/screens/Onboarding/StepProfile/index.tsx:325 1859 1871 #: src/view/com/auth/server-input/index.tsx:169 1860 1872 #: src/view/com/auth/server-input/index.tsx:170 1861 - #: src/view/com/composer/videos/SubtitleDialog.tsx:167 1862 - #: src/view/com/composer/videos/SubtitleDialog.tsx:177 1873 + #: src/view/com/composer/videos/SubtitleDialog.tsx:171 1874 + #: src/view/com/composer/videos/SubtitleDialog.tsx:181 1863 1875 #: src/view/com/modals/AddAppPasswords.tsx:243 1864 1876 #: src/view/com/modals/AltImage.tsx:141 1865 1877 #: src/view/com/modals/crop-image/CropImage.web.tsx:177 ··· 1891 1903 msgid "Download CAR file" 1892 1904 msgstr "CARファイルをダウンロード" 1893 1905 1906 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:591 1907 + msgid "Download image" 1908 + msgstr "画像をダウンロード" 1909 + 1894 1910 #: src/view/com/composer/text-input/TextInput.web.tsx:269 1895 1911 msgid "Drop to add images" 1896 1912 msgstr "ドロップして画像を追加する" ··· 1952 1968 msgid "Edit" 1953 1969 msgstr "編集" 1954 1970 1955 - #: src/view/com/util/UserAvatar.tsx:328 1971 + #: src/view/com/util/UserAvatar.tsx:332 1956 1972 #: src/view/com/util/UserBanner.tsx:92 1957 1973 msgid "Edit avatar" 1958 1974 msgstr "アバターを編集" ··· 2112 2128 msgid "Enable priority notifications" 2113 2129 msgstr "優先通知を有効にする" 2114 2130 2115 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:336 2131 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:380 2116 2132 msgid "Enable subtitles" 2117 2133 msgstr "サブタイトル(字幕)を有効にする" 2118 2134 ··· 2130 2146 msgid "End of feed" 2131 2147 msgstr "フィードの終わり" 2132 2148 2133 - #: src/view/com/composer/videos/SubtitleDialog.tsx:157 2149 + #: src/view/com/composer/videos/SubtitleDialog.tsx:161 2134 2150 msgid "Ensure you have selected a language for each subtitle file." 2135 2151 msgstr "各字幕ファイルに言語が選択されてることを確認してください。" 2136 2152 ··· 2232 2248 msgid "Excludes users you follow" 2233 2249 msgstr "フォローしているユーザーは除外" 2234 2250 2235 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:353 2251 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:397 2236 2252 msgid "Exit fullscreen" 2237 2253 msgstr "全画面表示を終了" 2238 2254 ··· 2667 2683 msgid "From <0/>" 2668 2684 msgstr "<0/>から" 2669 2685 2670 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:354 2686 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:398 2671 2687 msgid "Fullscreen" 2672 2688 msgstr "全画面表示" 2673 2689 ··· 2696 2712 msgid "Getting started" 2697 2713 msgstr "入門" 2698 2714 2699 - #: src/components/MediaPreview.tsx:119 2715 + #: src/components/MediaPreview.tsx:120 2700 2716 msgid "GIF" 2701 2717 msgstr "GIF" 2702 2718 ··· 3098 3114 msgid "It's just you right now! Add more people to your starter pack by searching above." 3099 3115 msgstr "今はあなただけ!上で検索してスターターパックにより多くのユーザーを追加してください。" 3100 3116 3101 - #: src/view/com/composer/Composer.tsx:1125 3117 + #: src/view/com/composer/Composer.tsx:1129 3102 3118 msgid "Job ID: {0}" 3103 3119 msgstr "ジョブID:{0}" 3104 3120 ··· 3116 3132 #: src/components/StarterPack/QrCode.tsx:56 3117 3133 msgid "Join the conversation" 3118 3134 msgstr "会話に参加" 3135 + 3136 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:461 3137 + msgid "Joined {0}" 3138 + msgstr "{0} 参加" 3119 3139 3120 3140 #: src/screens/Onboarding/index.tsx:21 3121 3141 #: src/screens/Onboarding/state.ts:89 ··· 3580 3600 msgid "Music" 3581 3601 msgstr "音楽" 3582 3602 3603 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:389 3604 + msgctxt "video" 3605 + msgid "Mute" 3606 + msgstr "" 3607 + 3583 3608 #: src/components/TagMenu/index.tsx:263 3584 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:345 3585 3609 msgid "Mute" 3586 3610 msgstr "ミュート" 3587 3611 ··· 4042 4066 msgid "Oh no! Something went wrong." 4043 4067 msgstr "ちょっと!何らかの問題が発生したようです。" 4044 4068 4069 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:171 4070 + msgid "Oh no! We weren't able to generate an image for you to share. Rest assured, we're glad you're here 🦋" 4071 + msgstr "ああ、残念!共有するための画像を生成できませんでした。ご安心ください、ここに来てくれて嬉しいです🦋" 4072 + 4045 4073 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:339 4046 4074 msgid "OK" 4047 4075 msgstr "OK" ··· 4062 4090 msgid "Onboarding reset" 4063 4091 msgstr "オンボーディングのリセット" 4064 4092 4065 - #: src/view/com/composer/Composer.tsx:667 4093 + #: src/view/com/composer/Composer.tsx:672 4066 4094 msgid "One or more images is missing alt text." 4067 4095 msgstr "1つもしくは複数の画像にALTテキストがありません。" 4068 4096 ··· 4113 4141 msgstr "会話のオプションを開く" 4114 4142 4115 4143 #: src/screens/Messages/Conversation/MessageInput.web.tsx:165 4116 - #: src/view/com/composer/Composer.tsx:819 4117 - #: src/view/com/composer/Composer.tsx:820 4144 + #: src/view/com/composer/Composer.tsx:823 4145 + #: src/view/com/composer/Composer.tsx:824 4118 4146 msgid "Open emoji picker" 4119 4147 msgstr "絵文字を入力" 4120 4148 ··· 4283 4311 msgstr "スレッドの設定を開く" 4284 4312 4285 4313 #: src/view/com/notifications/FeedItem.tsx:551 4286 - #: src/view/com/util/UserAvatar.tsx:420 4314 + #: src/view/com/util/UserAvatar.tsx:424 4287 4315 msgid "Opens this profile" 4288 4316 msgstr "プロフィールを開く" 4289 4317 4290 - #: src/view/com/composer/videos/SelectVideoBtn.tsx:81 4318 + #: src/view/com/composer/videos/SelectVideoBtn.tsx:88 4291 4319 msgid "Opens video picker" 4292 4320 msgstr "ビデオの選択画面を開く" 4293 4321 ··· 4365 4393 msgstr "パスワードが更新されました!" 4366 4394 4367 4395 #: src/view/com/util/post-embeds/GifEmbed.tsx:44 4368 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:322 4396 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:366 4369 4397 msgid "Pause" 4370 4398 msgstr "一時停止" 4371 4399 4372 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:275 4400 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:319 4373 4401 msgid "Pause video" 4374 4402 msgstr "ビデオを一時停止" 4375 4403 ··· 4429 4457 msgstr "フィードにピン留めしました" 4430 4458 4431 4459 #: src/view/com/util/post-embeds/GifEmbed.tsx:44 4432 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:323 4460 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:367 4433 4461 msgid "Play" 4434 4462 msgstr "再生" 4435 4463 ··· 4441 4469 msgid "Play or pause the GIF" 4442 4470 msgstr "GIFの再生や一時停止" 4443 4471 4444 - #: src/view/com/util/post-embeds/VideoEmbed.tsx:187 4445 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:276 4472 + #: src/view/com/util/post-embeds/VideoEmbed.tsx:189 4473 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:320 4446 4474 msgid "Play video" 4447 4475 msgstr "ビデオを再生" 4448 4476 ··· 4514 4542 msgid "Please Verify Your Email" 4515 4543 msgstr "メールアドレスを確認してください" 4516 4544 4517 - #: src/view/com/composer/Composer.tsx:355 4545 + #: src/view/com/composer/Composer.tsx:360 4518 4546 msgid "Please wait for your link card to finish loading" 4519 4547 msgstr "リンクカードが読み込まれるまでお待ちください" 4520 4548 ··· 4527 4555 msgid "Porn" 4528 4556 msgstr "ポルノ" 4529 4557 4530 - #: src/view/com/composer/Composer.tsx:642 4531 - #: src/view/com/composer/Composer.tsx:649 4558 + #: src/view/com/composer/Composer.tsx:647 4559 + #: src/view/com/composer/Composer.tsx:654 4532 4560 msgctxt "action" 4533 4561 msgid "Post" 4534 4562 msgstr "投稿" ··· 4698 4726 msgid "Public, shareable lists which can drive feeds." 4699 4727 msgstr "フィードとして利用できる、公開された共有可能なリスト。" 4700 4728 4701 - #: src/view/com/composer/Composer.tsx:627 4729 + #: src/view/com/composer/Composer.tsx:632 4702 4730 msgid "Publish post" 4703 4731 msgstr "投稿を公開" 4704 4732 4705 - #: src/view/com/composer/Composer.tsx:627 4733 + #: src/view/com/composer/Composer.tsx:632 4706 4734 msgid "Publish reply" 4707 4735 msgstr "返信を公開" 4708 4736 ··· 4832 4860 msgid "Remove attachment" 4833 4861 msgstr "添付を削除" 4834 4862 4835 - #: src/view/com/util/UserAvatar.tsx:387 4863 + #: src/view/com/util/UserAvatar.tsx:391 4836 4864 msgid "Remove Avatar" 4837 4865 msgstr "アバターを削除" 4838 4866 ··· 4900 4928 msgid "Remove repost" 4901 4929 msgstr "リポストを削除" 4902 4930 4903 - #: src/view/com/composer/videos/SubtitleDialog.tsx:260 4931 + #: src/view/com/composer/videos/SubtitleDialog.tsx:264 4904 4932 msgid "Remove subtitle file" 4905 4933 msgstr "字幕ファイルを削除" 4906 4934 ··· 4961 4989 msgid "Replies to this post are disabled." 4962 4990 msgstr "この投稿への返信は無効化されています。" 4963 4991 4964 - #: src/view/com/composer/Composer.tsx:640 4992 + #: src/view/com/composer/Composer.tsx:645 4965 4993 msgctxt "action" 4966 4994 msgid "Reply" 4967 4995 msgstr "返信" ··· 5415 5443 msgid "See this guide" 5416 5444 msgstr "ガイドを見る" 5417 5445 5418 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:587 5446 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:631 5419 5447 msgid "Seek slider" 5420 5448 msgstr "シークバー" 5421 5449 ··· 5455 5483 msgid "Select how long to mute this word for." 5456 5484 msgstr "このワードをどのくらいの間ミュートするのかを選択。" 5457 5485 5458 - #: src/view/com/composer/videos/SubtitleDialog.tsx:245 5486 + #: src/view/com/composer/videos/SubtitleDialog.tsx:249 5459 5487 msgid "Select language..." 5460 5488 msgstr "言語を選択…" 5461 5489 ··· 5487 5515 msgid "Select the service that hosts your data." 5488 5516 msgstr "データをホストするサービスを選択します。" 5489 5517 5490 - #: src/view/com/composer/videos/SelectVideoBtn.tsx:80 5518 + #: src/view/com/composer/videos/SelectVideoBtn.tsx:87 5491 5519 msgid "Select video" 5492 5520 msgstr "ビデオを選択" 5493 5521 ··· 5503 5531 msgid "Select your app language for the default text to display in the app." 5504 5532 msgstr "アプリに表示されるデフォルトのテキストの言語を選択" 5505 5533 5506 - #: src/screens/Signup/StepInfo/index.tsx:192 5534 + #: src/screens/Signup/StepInfo/index.tsx:193 5507 5535 msgid "Select your date of birth" 5508 5536 msgstr "生年月日を選択" 5509 5537 ··· 5643 5671 msgid "Sexually Suggestive" 5644 5672 msgstr "性的にきわどい" 5645 5673 5674 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:607 5646 5675 #: src/components/StarterPack/QrCodeDialog.tsx:177 5647 5676 #: src/screens/StarterPack/StarterPackScreen.tsx:411 5648 5677 #: src/screens/StarterPack/StarterPackScreen.tsx:582 ··· 5678 5707 #: src/view/screens/ProfileFeed.tsx:362 5679 5708 msgid "Share feed" 5680 5709 msgstr "フィードを共有" 5710 + 5711 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:590 5712 + msgid "Share image externally" 5713 + msgstr "画像を外部に共有する" 5714 + 5715 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:602 5716 + msgid "Share image in post" 5717 + msgstr "投稿で画像を共有" 5681 5718 5682 5719 #: src/components/StarterPack/ShareDialog.tsx:124 5683 5720 #: src/components/StarterPack/ShareDialog.tsx:131 ··· 5950 5987 msgid "Something went wrong!" 5951 5988 msgstr "何らかの問題が発生したようです!" 5952 5989 5953 - #: src/App.native.tsx:102 5954 - #: src/App.web.tsx:83 5990 + #: src/App.native.tsx:103 5991 + #: src/App.web.tsx:84 5955 5992 msgid "Sorry! Your session expired. Please log in again." 5956 5993 msgstr "大変申し訳ありません!セッションの有効期限が切れました。もう一度ログインしてください。" 5957 5994 ··· 6153 6190 msgid "Tell us a little more" 6154 6191 msgstr "もう少し教えて" 6155 6192 6193 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:487 6194 + msgid "Ten Million" 6195 + msgstr "1000万" 6196 + 6156 6197 #: src/view/shell/desktop/RightNav.tsx:90 6157 6198 msgid "Terms" 6158 6199 msgstr "条件" ··· 6185 6226 #: src/components/ReportDialog/SubmitView.tsx:81 6186 6227 msgid "Thank you. Your report has been sent." 6187 6228 msgstr "ありがとうございます。あなたの報告は送信されました。" 6229 + 6230 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:562 6231 + msgid "Thanks for being one of our first 10 million users." 6232 + msgstr "最初の 1,000 万人のユーザーの 1 人になっていただきありがとうございます。" 6188 6233 6189 6234 #: src/components/intents/VerifyEmailIntentDialog.tsx:74 6190 6235 msgid "Thanks, you have successfully verified your email address." ··· 6271 6316 msgid "The Privacy Policy has been moved to <0/>" 6272 6317 msgstr "プライバシーポリシーは<0/>に移動しました" 6273 6318 6274 - #: src/state/queries/video/video.ts:222 6319 + #: src/state/queries/video/video.ts:227 6275 6320 msgid "The selected video is larger than 50MB." 6276 6321 msgstr "選択したビデオのサイズが50MBを超えています。" 6277 6322 ··· 6608 6653 msgid "To report a conversation, please report one of its messages via the conversation screen. This lets our moderators understand the context of your issue." 6609 6654 msgstr "会話を報告するには、会話の画面からメッセージのうちの一つを報告してください。それによって問題の文脈をモデレーターが理解できるようになります。" 6610 6655 6611 - #: src/view/com/composer/videos/SelectVideoBtn.tsx:106 6656 + #: src/view/com/composer/videos/SelectVideoBtn.tsx:113 6612 6657 msgid "To upload videos to Bluesky, you must first verify your email." 6613 6658 msgstr "Blueskyにビデオをアップロードするには、まずメールアドレスを確認しなくてはなりません。" 6614 6659 6615 6660 #: src/components/ReportDialog/SelectLabelerView.tsx:33 6616 6661 msgid "To whom would you like to send this report?" 6617 6662 msgstr "この報告を誰に送りたいですか?" 6663 + 6664 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:566 6665 + msgid "Together, we're rebuilding the social internet. We're glad you're here." 6666 + msgstr "私たちは一緒にソーシャル インターネットを再構築しています。ご参加いただきありがとうございます。" 6618 6667 6619 6668 #: src/view/com/util/forms/DropdownButton.tsx:255 6620 6669 msgid "Toggle dropdown" ··· 6739 6788 msgid "Unlike this feed" 6740 6789 msgstr "このフィードからいいねを外す" 6741 6790 6791 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:388 6792 + msgctxt "video" 6793 + msgid "Unmute" 6794 + msgstr "" 6795 + 6742 6796 #: src/components/TagMenu/index.tsx:263 6743 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:344 6744 6797 #: src/view/screens/ProfileList.tsx:689 6745 6798 msgid "Unmute" 6746 6799 msgstr "ミュートを解除" ··· 6767 6820 msgid "Unmute thread" 6768 6821 msgstr "スレッドのミュートを解除" 6769 6822 6770 - #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:273 6823 + #: src/view/com/util/post-embeds/VideoEmbedInner/VideoWebControls.tsx:317 6771 6824 msgid "Unmute video" 6772 6825 msgstr "ビデオのミュートを解除" 6773 6826 ··· 6809 6862 msgid "Unsubscribed from list" 6810 6863 msgstr "リストの登録を解除しました" 6811 6864 6812 - #: src/state/queries/video/video.ts:240 6865 + #: src/state/queries/video/video.ts:245 6813 6866 msgid "Unsupported video type: {mimeType}" 6814 6867 msgstr "サポートしていないビデオ形式:{mimeType}" 6815 6868 ··· 6846 6899 msgid "Upload a text file to:" 6847 6900 msgstr "テキストファイルのアップロード先:" 6848 6901 6849 - #: src/view/com/util/UserAvatar.tsx:355 6850 - #: src/view/com/util/UserAvatar.tsx:358 6902 + #: src/view/com/util/UserAvatar.tsx:359 6903 + #: src/view/com/util/UserAvatar.tsx:362 6851 6904 #: src/view/com/util/UserBanner.tsx:123 6852 6905 #: src/view/com/util/UserBanner.tsx:126 6853 6906 msgid "Upload from Camera" 6854 6907 msgstr "カメラからアップロード" 6855 6908 6856 - #: src/view/com/util/UserAvatar.tsx:372 6909 + #: src/view/com/util/UserAvatar.tsx:376 6857 6910 #: src/view/com/util/UserBanner.tsx:140 6858 6911 msgid "Upload from Files" 6859 6912 msgstr "ファイルからアップロード" 6860 6913 6861 - #: src/view/com/util/UserAvatar.tsx:366 6862 6914 #: src/view/com/util/UserAvatar.tsx:370 6915 + #: src/view/com/util/UserAvatar.tsx:374 6863 6916 #: src/view/com/util/UserBanner.tsx:134 6864 6917 #: src/view/com/util/UserBanner.tsx:138 6865 6918 msgid "Upload from Library" ··· 6988 7041 msgid "Value:" 6989 7042 msgstr "値:" 6990 7043 6991 - #: src/view/com/composer/videos/SelectVideoBtn.tsx:104 7044 + #: src/view/com/composer/videos/SelectVideoBtn.tsx:111 6992 7045 msgid "Verified email required" 6993 7046 msgstr "メールアドレスの確認が必要" 6994 7047 ··· 7017 7070 msgid "Verify New Email" 7018 7071 msgstr "新しいメールアドレスを確認" 7019 7072 7020 - #: src/view/com/composer/videos/SelectVideoBtn.tsx:108 7073 + #: src/view/com/composer/videos/SelectVideoBtn.tsx:115 7021 7074 msgid "Verify now" 7022 7075 msgstr "確認する" 7023 7076 ··· 7047 7100 msgid "Video Games" 7048 7101 msgstr "ビデオゲーム" 7049 7102 7050 - #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:163 7103 + #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:167 7051 7104 msgid "Video not found." 7052 7105 msgstr "ビデオが見つかりません。" 7053 7106 7054 - #: src/view/com/composer/videos/SubtitleDialog.tsx:99 7107 + #: src/view/com/composer/videos/SubtitleDialog.tsx:101 7055 7108 msgid "Video settings" 7056 7109 msgstr "ビデオの設定" 7057 7110 7058 7111 #: src/view/com/util/post-embeds/VideoEmbedInner/VideoEmbedInnerNative.tsx:77 7059 7112 msgid "Video: {0}" 7060 7113 msgstr "ビデオ:{0}" 7114 + 7115 + #: src/view/com/composer/videos/SelectVideoBtn.tsx:58 7116 + #: src/view/com/composer/videos/VideoPreview.web.tsx:44 7117 + msgid "Videos must be less than 60 seconds long" 7118 + msgstr "" 7061 7119 7062 7120 #: src/screens/Profile/Header/Shell.tsx:113 7063 7121 msgid "View {0}'s avatar" ··· 7224 7282 msgid "We're sorry, but your search could not be completed. Please try again in a few minutes." 7225 7283 msgstr "大変申し訳ありませんが、検索を完了できませんでした。数分後に再試行してください。" 7226 7284 7227 - #: src/view/com/composer/Composer.tsx:417 7285 + #: src/view/com/composer/Composer.tsx:422 7228 7286 msgid "We're sorry! The post you are replying to has been deleted." 7229 7287 msgstr "大変申し訳ありません!返信しようとしている投稿は削除されました。" 7230 7288 ··· 7255 7313 7256 7314 #: src/view/com/auth/SplashScreen.tsx:40 7257 7315 #: src/view/com/auth/SplashScreen.web.tsx:86 7258 - #: src/view/com/composer/Composer.tsx:512 7316 + #: src/view/com/composer/Composer.tsx:517 7259 7317 msgid "What's up?" 7260 7318 msgstr "最近どう?" 7261 7319 ··· 7322 7380 msgid "Write a message" 7323 7381 msgstr "メッセージを書く" 7324 7382 7325 - #: src/view/com/composer/Composer.tsx:708 7383 + #: src/view/com/composer/Composer.tsx:713 7326 7384 msgid "Write post" 7327 7385 msgstr "投稿を書く" 7328 7386 7329 - #: src/view/com/composer/Composer.tsx:511 7387 + #: src/view/com/composer/Composer.tsx:516 7330 7388 #: src/view/com/post-thread/PostThreadComposePrompt.tsx:42 7331 7389 msgid "Write your reply" 7332 7390 msgstr "返信を書く" ··· 7646 7704 msgid "Your account has been deleted" 7647 7705 msgstr "あなたのアカウントは削除されました" 7648 7706 7707 + #: src/state/queries/video/video.ts:185 7708 + msgid "Your account is not yet old enough to upload videos. Please try again later." 7709 + msgstr "" 7710 + 7649 7711 #: src/view/screens/Settings/ExportCarDialog.tsx:65 7650 7712 msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately." 7651 7713 msgstr "あなたのアカウントの公開データの全記録を含むリポジトリは、「CAR」ファイルとしてダウンロードできます。このファイルには、画像などのメディア埋め込み、また非公開のデータは含まれていないため、それらは個別に取得する必要があります。" 7652 7714 7653 - #: src/screens/Signup/StepInfo/index.tsx:180 7715 + #: src/screens/Signup/StepInfo/index.tsx:181 7654 7716 msgid "Your birth date" 7655 7717 msgstr "生年月日" 7656 7718 7657 - #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:167 7719 + #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:171 7658 7720 msgid "Your browser does not support the video format. Please try a different browser." 7659 7721 msgstr "利用中のブラウザがこのビデオ形式をサポートしていません。他のブラウザをお試しください。" 7660 7722 ··· 7705 7767 msgid "Your password has been changed successfully!" 7706 7768 msgstr "パスワードの変更が完了しました!" 7707 7769 7708 - #: src/view/com/composer/Composer.tsx:463 7770 + #: src/view/com/composer/Composer.tsx:468 7709 7771 msgid "Your post has been published" 7710 7772 msgstr "投稿を公開しました" 7711 7773 ··· 7721 7783 msgid "Your profile, posts, feeds, and lists will no longer be visible to other Bluesky users. You can reactivate your account at any time by logging in." 7722 7784 msgstr "あなたのプロフィール、投稿、フィード、そしてリストは他のBlueskyユーザーに見えなくなります。ログインすることでいつでもアカウントを再有効化できます。" 7723 7785 7724 - #: src/view/com/composer/Composer.tsx:462 7786 + #: src/view/com/composer/Composer.tsx:467 7725 7787 msgid "Your reply has been published" 7726 7788 msgstr "返信を公開しました" 7727 7789
+61 -16
src/locale/locales/pt-BR/messages.po
··· 139 139 #~ msgid "{0} your feeds" 140 140 #~ msgstr "{0} seus feeds" 141 141 142 - #: src/view/com/util/UserAvatar.tsx:419 142 + #: src/view/com/util/UserAvatar.tsx:423 143 143 msgid "{0}'s avatar" 144 144 msgstr "Avatar de {0}" 145 145 ··· 656 656 msgid "An error occurred while loading the video. Please try again later." 657 657 msgstr "Ocorreu um erro ao carregar o vídeo. Tente novamente mais tarde." 658 658 659 - #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:171 659 + #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:174 660 660 msgid "An error occurred while loading the video. Please try again." 661 661 msgstr "Ocorreu um erro ao carregar o vídeo. Tente novamente." 662 662 ··· 1005 1005 #~ msgid "Bluesky is public." 1006 1006 #~ msgstr "Bluesky é público." 1007 1007 1008 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:201 1009 + msgid "Bluesky now has over 10 million users, and I was #{0}!" 1010 + msgstr "O Bluesky agora tem mais de 10 milhões de usuários, e eu tinha #{0}!" 1011 + 1008 1012 #: src/components/StarterPack/ProfileStarterPacks.tsx:282 1009 1013 msgid "Bluesky will choose a set of recommended accounts from people in your network." 1010 1014 msgstr "O Bluesky escolherá um conjunto de contas recomendadas dentre as pessoas em sua rede." ··· 1026 1030 msgid "Books" 1027 1031 msgstr "Livros" 1028 1032 1033 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:583 1034 + msgid "Brag a little!" 1035 + msgstr "Gabe-se um pouco!" 1036 + 1029 1037 #: src/components/FeedInterstitials.tsx:346 1030 1038 msgid "Browse more accounts on the Explore page" 1031 1039 msgstr "Navegue por mais contas na página Explorar" ··· 1172 1180 #: src/view/com/composer/videos/SubtitleDialog.tsx:56 1173 1181 msgid "Captions & alt text" 1174 1182 msgstr "Legendas e texto alt" 1183 + 1184 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:336 1185 + msgid "Celebrating {0} users" 1186 + msgstr "Comemorando {0} usuários" 1175 1187 1176 1188 #: src/view/com/modals/VerifyEmail.tsx:160 1177 1189 msgid "Change" ··· 1867 1879 #~ msgid "Dark Theme" 1868 1880 #~ msgstr "Modo Escuro" 1869 1881 1870 - #: src/screens/Signup/StepInfo/index.tsx:191 1882 + #: src/screens/Signup/StepInfo/index.tsx:192 1871 1883 msgid "Date of birth" 1872 1884 msgstr "Data de nascimento" 1873 1885 ··· 2174 2186 msgid "Download CAR file" 2175 2187 msgstr "Baixar arquivo CAR" 2176 2188 2189 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:591 2190 + msgid "Download image" 2191 + msgstr "Baixar imagem" 2192 + 2177 2193 #: src/view/com/composer/text-input/TextInput.web.tsx:269 2178 2194 msgid "Drop to add images" 2179 2195 msgstr "Solte para adicionar imagens" ··· 2239 2255 msgid "Edit" 2240 2256 msgstr "Editar" 2241 2257 2242 - #: src/view/com/util/UserAvatar.tsx:328 2258 + #: src/view/com/util/UserAvatar.tsx:332 2243 2259 #: src/view/com/util/UserBanner.tsx:92 2244 2260 msgid "Edit avatar" 2245 2261 msgstr "Editar avatar" ··· 3545 3561 msgid "Join the conversation" 3546 3562 msgstr "Participe da conversa" 3547 3563 3564 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:461 3565 + msgid "Joined {0}" 3566 + msgstr "Juntou-se {0}" 3567 + 3548 3568 #: src/screens/Onboarding/index.tsx:21 3549 3569 #: src/screens/Onboarding/state.ts:89 3550 3570 msgid "Journalism" ··· 4551 4571 msgid "Oh no! Something went wrong." 4552 4572 msgstr "Opa! Algo deu errado." 4553 4573 4574 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:171 4575 + msgid "Oh no! We weren't able to generate an image for you to share. Rest assured, we're glad you're here 🦋" 4576 + msgstr "Ah, não! Não conseguimos gerar uma imagem para você compartilhar. Fique tranquilo, estamos felizes que você esteja aqui 🦋" 4577 + 4554 4578 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:339 4555 4579 msgid "OK" 4556 4580 msgstr "OK" ··· 4821 4845 msgstr "Abre as preferências de threads" 4822 4846 4823 4847 #: src/view/com/notifications/FeedItem.tsx:551 4824 - #: src/view/com/util/UserAvatar.tsx:420 4848 + #: src/view/com/util/UserAvatar.tsx:424 4825 4849 msgid "Opens this profile" 4826 4850 msgstr "Abre este perfil" 4827 4851 ··· 5410 5434 msgid "Remove attachment" 5411 5435 msgstr "" 5412 5436 5413 - #: src/view/com/util/UserAvatar.tsx:387 5437 + #: src/view/com/util/UserAvatar.tsx:391 5414 5438 msgid "Remove Avatar" 5415 5439 msgstr "Remover avatar" 5416 5440 ··· 6153 6177 msgid "Select your app language for the default text to display in the app." 6154 6178 msgstr "Selecione o idioma do seu aplicativo" 6155 6179 6156 - #: src/screens/Signup/StepInfo/index.tsx:192 6180 + #: src/screens/Signup/StepInfo/index.tsx:193 6157 6181 msgid "Select your date of birth" 6158 6182 msgstr "Selecione sua data de nascimento" 6159 6183 ··· 6321 6345 msgid "Sexually Suggestive" 6322 6346 msgstr "Sexualmente Sugestivo" 6323 6347 6348 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:607 6324 6349 #: src/components/StarterPack/QrCodeDialog.tsx:177 6325 6350 #: src/screens/StarterPack/StarterPackScreen.tsx:411 6326 6351 #: src/screens/StarterPack/StarterPackScreen.tsx:582 ··· 6357 6382 msgid "Share feed" 6358 6383 msgstr "Compartilhar feed" 6359 6384 6385 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:590 6386 + msgid "Share image externally" 6387 + msgstr "Compartilhar imagem externamente" 6388 + 6389 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:602 6390 + msgid "Share image in post" 6391 + msgstr "Compartilhe a imagem na postagem" 6392 + 6360 6393 #: src/components/StarterPack/ShareDialog.tsx:124 6361 6394 #: src/components/StarterPack/ShareDialog.tsx:131 6362 6395 #: src/screens/StarterPack/StarterPackScreen.tsx:586 ··· 6668 6701 msgid "Something went wrong!" 6669 6702 msgstr "Algo deu errado!" 6670 6703 6671 - #: src/App.native.tsx:102 6672 - #: src/App.web.tsx:83 6704 + #: src/App.native.tsx:103 6705 + #: src/App.web.tsx:84 6673 6706 msgid "Sorry! Your session expired. Please log in again." 6674 6707 msgstr "Opa! Sua sessão expirou. Por favor, entre novamente." 6675 6708 ··· 6912 6945 msgid "Tell us a little more" 6913 6946 msgstr "Conte-nos um pouco mais" 6914 6947 6948 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:487 6949 + msgid "Ten Million" 6950 + msgstr "Dez milhões" 6951 + 6915 6952 #: src/view/shell/desktop/RightNav.tsx:90 6916 6953 msgid "Terms" 6917 6954 msgstr "Termos" ··· 6949 6986 msgid "Thank you. Your report has been sent." 6950 6987 msgstr "Obrigado. Sua denúncia foi enviada." 6951 6988 6989 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:562 6990 + msgid "Thanks for being one of our first 10 million users." 6991 + msgstr "Obrigado por ser um dos nossos primeiros 10 milhões de usuários." 6992 + 6952 6993 #: src/components/intents/VerifyEmailIntentDialog.tsx:74 6953 6994 msgid "Thanks, you have successfully verified your email address." 6954 6995 msgstr "" ··· 7437 7478 msgid "To whom would you like to send this report?" 7438 7479 msgstr "Para quem você gostaria de enviar esta denúncia?" 7439 7480 7481 + #: src/components/dialogs/nuxs/TenMillion/index.tsx:566 7482 + msgid "Together, we're rebuilding the social internet. We're glad you're here." 7483 + msgstr "Juntos, estamos reconstruindo a internet social. Estamos felizes que você esteja aqui." 7484 + 7440 7485 #: src/components/dialogs/MutedWords.tsx:112 7441 7486 #~ msgid "Toggle between muted word options." 7442 7487 #~ msgstr "Alternar entre opções de uma palavra silenciada" ··· 7691 7736 msgid "Upload a text file to:" 7692 7737 msgstr "Carregar um arquivo de texto para:" 7693 7738 7694 - #: src/view/com/util/UserAvatar.tsx:355 7695 - #: src/view/com/util/UserAvatar.tsx:358 7739 + #: src/view/com/util/UserAvatar.tsx:359 7740 + #: src/view/com/util/UserAvatar.tsx:362 7696 7741 #: src/view/com/util/UserBanner.tsx:123 7697 7742 #: src/view/com/util/UserBanner.tsx:126 7698 7743 msgid "Upload from Camera" 7699 7744 msgstr "Tirar uma foto" 7700 7745 7701 - #: src/view/com/util/UserAvatar.tsx:372 7746 + #: src/view/com/util/UserAvatar.tsx:376 7702 7747 #: src/view/com/util/UserBanner.tsx:140 7703 7748 msgid "Upload from Files" 7704 7749 msgstr "Carregar um arquivo" 7705 7750 7706 - #: src/view/com/util/UserAvatar.tsx:366 7707 7751 #: src/view/com/util/UserAvatar.tsx:370 7752 + #: src/view/com/util/UserAvatar.tsx:374 7708 7753 #: src/view/com/util/UserBanner.tsx:134 7709 7754 #: src/view/com/util/UserBanner.tsx:138 7710 7755 msgid "Upload from Library" ··· 7904 7949 msgid "Video Games" 7905 7950 msgstr "Games" 7906 7951 7907 - #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:164 7952 + #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:167 7908 7953 msgid "Video not found." 7909 7954 msgstr "Vídeo não encontrado." 7910 7955 ··· 8572 8617 msgid "Your account repository, containing all public data records, can be downloaded as a \"CAR\" file. This file does not include media embeds, such as images, or your private data, which must be fetched separately." 8573 8618 msgstr "O repositório da sua conta, contendo todos os seus dados públicos, pode ser baixado como um arquivo \"CAR\". Este arquivo não inclui imagens ou dados privados, estes devem ser exportados separadamente." 8574 8619 8575 - #: src/screens/Signup/StepInfo/index.tsx:180 8620 + #: src/screens/Signup/StepInfo/index.tsx:181 8576 8621 msgid "Your birth date" 8577 8622 msgstr "Sua data de nascimento" 8578 8623 8579 - #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:168 8624 + #: src/view/com/util/post-embeds/VideoEmbed.web.tsx:171 8580 8625 msgid "Your browser does not support the video format. Please try a different browser." 8581 8626 msgstr "Seu navegador não suporta o formato de vídeo. Por favor, tente um navegador diferente." 8582 8627
+7 -18
src/state/queries/nuxs/definitions.ts
··· 3 3 import {BaseNux} from '#/state/queries/nuxs/types' 4 4 5 5 export enum Nux { 6 - One = 'one', 7 - Two = 'two', 6 + TenMillionDialog = 'TenMillionDialog', 8 7 } 9 8 10 9 export const nuxNames = new Set(Object.values(Nux)) 11 10 12 - export type AppNux = 13 - | BaseNux<{ 14 - id: Nux.One 15 - data: { 16 - likes: number 17 - } 18 - }> 19 - | BaseNux<{ 20 - id: Nux.Two 21 - data: undefined 22 - }> 11 + export type AppNux = BaseNux<{ 12 + id: Nux.TenMillionDialog 13 + data: undefined 14 + }> 23 15 24 - export const NuxSchemas = { 25 - [Nux.One]: zod.object({ 26 - likes: zod.number(), 27 - }), 28 - [Nux.Two]: undefined, 16 + export const NuxSchemas: Record<Nux, zod.ZodObject<any> | undefined> = { 17 + [Nux.TenMillionDialog]: undefined, 29 18 }
+2
src/state/queries/nuxs/index.ts
··· 57 57 const agent = useAgent() 58 58 59 59 return useMutation({ 60 + retry: 3, 60 61 mutationFn: async (nux: AppNux) => { 61 62 await agent.bskyAppUpsertNux(serializeAppNux(nux)) 62 63 // triggers a refetch ··· 72 73 const agent = useAgent() 73 74 74 75 return useMutation({ 76 + retry: 3, 75 77 mutationFn: async (ids: string[]) => { 76 78 await agent.bskyAppRemoveNuxs(ids) 77 79 // triggers a refetch
+1 -3
src/state/queries/nuxs/types.ts
··· 4 4 5 5 export type BaseNux< 6 6 T extends Pick<AppBskyActorDefs.Nux, 'id' | 'expiresAt'> & {data: Data}, 7 - > = T & { 8 - completed: boolean 9 - } 7 + > = Pick<AppBskyActorDefs.Nux, 'id' | 'completed' | 'expiresAt'> & T
+3 -1
src/storage/schema.ts
··· 1 1 /** 2 2 * Device data that's specific to the device and does not vary based account 3 3 */ 4 - export type Device = {} 4 + export type Device = { 5 + lastNuxDialog: string | undefined 6 + }
+4
src/view/com/util/UserAvatar.tsx
··· 43 43 interface UserAvatarProps extends BaseUserAvatarProps { 44 44 moderation?: ModerationUI 45 45 usePlainRNImage?: boolean 46 + onLoad?: () => void 46 47 } 47 48 48 49 interface EditableUserAvatarProps extends BaseUserAvatarProps { ··· 174 175 avatar, 175 176 moderation, 176 177 usePlainRNImage = false, 178 + onLoad, 177 179 }: UserAvatarProps): React.ReactNode => { 178 180 const pal = usePalette('default') 179 181 const backgroundColor = pal.colors.backgroundLight ··· 224 226 uri: hackModifyThumbnailPath(avatar, size < 90), 225 227 }} 226 228 blurRadius={moderation?.blur ? BLUR_AMOUNT : 0} 229 + onLoad={onLoad} 227 230 /> 228 231 ) : ( 229 232 <HighPriorityImage ··· 234 237 uri: hackModifyThumbnailPath(avatar, size < 90), 235 238 }} 236 239 blurRadius={moderation?.blur ? BLUR_AMOUNT : 0} 240 + onLoad={onLoad} 237 241 /> 238 242 )} 239 243 {alert}
+29
src/view/icons/Logomark.tsx
··· 1 + import React from 'react' 2 + import Svg, {Path, PathProps, SvgProps} from 'react-native-svg' 3 + 4 + import {usePalette} from '#/lib/hooks/usePalette' 5 + 6 + const ratio = 54 / 61 7 + 8 + export function Logomark({ 9 + fill, 10 + ...rest 11 + }: {fill?: PathProps['fill']} & SvgProps) { 12 + const pal = usePalette('default') 13 + // @ts-ignore it's fiiiiine 14 + const size = parseInt(rest.width || 32) 15 + 16 + return ( 17 + <Svg 18 + fill="none" 19 + viewBox="0 0 61 54" 20 + {...rest} 21 + width={size} 22 + height={Number(size) * ratio}> 23 + <Path 24 + fill={fill || pal.text.color} 25 + d="M13.223 3.602C20.215 8.832 27.738 19.439 30.5 25.13c2.762-5.691 10.284-16.297 17.278-21.528C52.824-.172 61-3.093 61 6.2c0 1.856-1.068 15.59-1.694 17.82-2.178 7.752-10.112 9.73-17.17 8.532 12.337 2.092 15.475 9.021 8.697 15.95-12.872 13.159-18.5-3.302-19.943-7.52-.264-.773-.388-1.135-.39-.827-.002-.308-.126.054-.39.827-1.442 4.218-7.071 20.679-19.943 7.52-6.778-6.929-3.64-13.858 8.697-15.95-7.058 1.197-14.992-.78-17.17-8.532C1.068 21.79 0 8.056 0 6.2 0-3.093 8.176-.172 13.223 3.602Z" 26 + /> 27 + </Svg> 28 + ) 29 + }
+1
src/view/shell/Composer.web.tsx
··· 63 63 mention={state.mention} 64 64 openEmojiPicker={onOpenPicker} 65 65 text={state.text} 66 + imageUris={state.imageUris} 66 67 /> 67 68 </View> 68 69 <EmojiPicker state={pickerState} close={onClosePicker} />