Bluesky app fork with some witchin' additions 💫

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

+1157 -2683
+1
package.json
··· 74 74 "@atproto/api": "^0.16.7", 75 75 "@bitdrift/react-native": "^0.6.8", 76 76 "@braintree/sanitize-url": "^6.0.2", 77 + "@bsky.app/alf": "^0.1.2", 77 78 "@discord/bottom-sheet": "bluesky-social/react-native-bottom-sheet", 78 79 "@emoji-mart/react": "^1.1.1", 79 80 "@expo/html-elements": "^0.12.5",
+4 -997
src/alf/atoms.ts
··· 1 - import { 2 - Platform, 3 - type StyleProp, 4 - StyleSheet, 5 - type ViewStyle, 6 - } from 'react-native' 1 + import {type StyleProp, type ViewStyle} from 'react-native' 2 + import {atoms as baseAtoms} from '@bsky.app/alf' 7 3 8 - import * as tokens from '#/alf/tokens' 9 - import {ios, native, platform, web} from '#/alf/util/platform' 4 + import {native, platform, web} from '#/alf/util/platform' 10 5 import * as Layout from '#/components/Layout' 11 6 12 7 export const atoms = { 13 - debug: { 14 - borderColor: 'red', 15 - borderWidth: 1, 16 - }, 17 - 18 - /* 19 - * Positioning 20 - */ 21 - fixed: { 22 - position: Platform.select({web: 'fixed', native: 'absolute'}) as 'absolute', 23 - }, 24 - absolute: { 25 - position: 'absolute', 26 - }, 27 - relative: { 28 - position: 'relative', 29 - }, 30 - static: { 31 - position: 'static', 32 - }, 33 - sticky: web({ 34 - position: 'sticky', 35 - }), 36 - inset_0: { 37 - top: 0, 38 - left: 0, 39 - right: 0, 40 - bottom: 0, 41 - }, 42 - top_0: { 43 - top: 0, 44 - }, 45 - right_0: { 46 - right: 0, 47 - }, 48 - bottom_0: { 49 - bottom: 0, 50 - }, 51 - left_0: { 52 - left: 0, 53 - }, 54 - z_10: { 55 - zIndex: 10, 56 - }, 57 - z_20: { 58 - zIndex: 20, 59 - }, 60 - z_30: { 61 - zIndex: 30, 62 - }, 63 - z_40: { 64 - zIndex: 40, 65 - }, 66 - z_50: { 67 - zIndex: 50, 68 - }, 69 - 70 - overflow_visible: { 71 - overflow: 'visible', 72 - }, 73 - overflow_x_visible: { 74 - overflowX: 'visible', 75 - }, 76 - overflow_y_visible: { 77 - overflowY: 'visible', 78 - }, 79 - overflow_hidden: { 80 - overflow: 'hidden', 81 - }, 82 - overflow_x_hidden: { 83 - overflowX: 'hidden', 84 - }, 85 - overflow_y_hidden: { 86 - overflowY: 'hidden', 87 - }, 88 - /** 89 - * @platform web 90 - */ 91 - overflow_auto: web({ 92 - overflow: 'auto', 93 - }), 8 + ...baseAtoms, 94 9 95 - /* 96 - * Width & Height 97 - */ 98 - w_full: { 99 - width: '100%', 100 - }, 101 - h_full: { 102 - height: '100%', 103 - }, 104 10 h_full_vh: web({ 105 11 height: '100vh', 106 12 }), 107 - max_w_full: { 108 - maxWidth: '100%', 109 - }, 110 - max_h_full: { 111 - maxHeight: '100%', 112 - }, 113 13 114 14 /** 115 15 * Used for the outermost components on screens, to ensure that they can fill ··· 132 32 }, 133 33 134 34 /* 135 - * Border radius 136 - */ 137 - rounded_0: { 138 - borderRadius: 0, 139 - }, 140 - rounded_2xs: { 141 - borderRadius: tokens.borderRadius._2xs, 142 - }, 143 - rounded_xs: { 144 - borderRadius: tokens.borderRadius.xs, 145 - }, 146 - rounded_sm: { 147 - borderRadius: tokens.borderRadius.sm, 148 - }, 149 - rounded_md: { 150 - borderRadius: tokens.borderRadius.md, 151 - }, 152 - rounded_lg: { 153 - borderRadius: tokens.borderRadius.lg, 154 - }, 155 - rounded_full: { 156 - borderRadius: tokens.borderRadius.full, 157 - }, 158 - 159 - /* 160 - * Flex 161 - */ 162 - gap_0: { 163 - gap: 0, 164 - }, 165 - gap_2xs: { 166 - gap: tokens.space._2xs, 167 - }, 168 - gap_xs: { 169 - gap: tokens.space.xs, 170 - }, 171 - gap_sm: { 172 - gap: tokens.space.sm, 173 - }, 174 - gap_md: { 175 - gap: tokens.space.md, 176 - }, 177 - gap_lg: { 178 - gap: tokens.space.lg, 179 - }, 180 - gap_xl: { 181 - gap: tokens.space.xl, 182 - }, 183 - gap_2xl: { 184 - gap: tokens.space._2xl, 185 - }, 186 - gap_3xl: { 187 - gap: tokens.space._3xl, 188 - }, 189 - gap_4xl: { 190 - gap: tokens.space._4xl, 191 - }, 192 - gap_5xl: { 193 - gap: tokens.space._5xl, 194 - }, 195 - flex: { 196 - display: 'flex', 197 - }, 198 - flex_col: { 199 - flexDirection: 'column', 200 - }, 201 - flex_row: { 202 - flexDirection: 'row', 203 - }, 204 - flex_col_reverse: { 205 - flexDirection: 'column-reverse', 206 - }, 207 - flex_row_reverse: { 208 - flexDirection: 'row-reverse', 209 - }, 210 - flex_wrap: { 211 - flexWrap: 'wrap', 212 - }, 213 - flex_nowrap: { 214 - flexWrap: 'nowrap', 215 - }, 216 - flex_0: { 217 - flex: web('0 0 auto') || (native(0) as number), 218 - }, 219 - flex_1: { 220 - flex: 1, 221 - }, 222 - flex_grow: { 223 - flexGrow: 1, 224 - }, 225 - flex_grow_0: { 226 - flexGrow: 0, 227 - }, 228 - flex_shrink: { 229 - flexShrink: 1, 230 - }, 231 - flex_shrink_0: { 232 - flexShrink: 0, 233 - }, 234 - justify_start: { 235 - justifyContent: 'flex-start', 236 - }, 237 - justify_center: { 238 - justifyContent: 'center', 239 - }, 240 - justify_between: { 241 - justifyContent: 'space-between', 242 - }, 243 - justify_end: { 244 - justifyContent: 'flex-end', 245 - }, 246 - align_center: { 247 - alignItems: 'center', 248 - }, 249 - align_start: { 250 - alignItems: 'flex-start', 251 - }, 252 - align_end: { 253 - alignItems: 'flex-end', 254 - }, 255 - align_baseline: { 256 - alignItems: 'baseline', 257 - }, 258 - align_stretch: { 259 - alignItems: 'stretch', 260 - }, 261 - self_auto: { 262 - alignSelf: 'auto', 263 - }, 264 - self_start: { 265 - alignSelf: 'flex-start', 266 - }, 267 - self_end: { 268 - alignSelf: 'flex-end', 269 - }, 270 - self_center: { 271 - alignSelf: 'center', 272 - }, 273 - self_stretch: { 274 - alignSelf: 'stretch', 275 - }, 276 - self_baseline: { 277 - alignSelf: 'baseline', 278 - }, 279 - 280 - /* 281 - * Text 282 - */ 283 - text_left: { 284 - textAlign: 'left', 285 - }, 286 - text_center: { 287 - textAlign: 'center', 288 - }, 289 - text_right: { 290 - textAlign: 'right', 291 - }, 292 - text_2xs: { 293 - fontSize: tokens.fontSize._2xs, 294 - letterSpacing: tokens.TRACKING, 295 - }, 296 - text_xs: { 297 - fontSize: tokens.fontSize.xs, 298 - letterSpacing: tokens.TRACKING, 299 - }, 300 - text_sm: { 301 - fontSize: tokens.fontSize.sm, 302 - letterSpacing: tokens.TRACKING, 303 - }, 304 - text_md: { 305 - fontSize: tokens.fontSize.md, 306 - letterSpacing: tokens.TRACKING, 307 - }, 308 - text_lg: { 309 - fontSize: tokens.fontSize.lg, 310 - letterSpacing: tokens.TRACKING, 311 - }, 312 - text_xl: { 313 - fontSize: tokens.fontSize.xl, 314 - letterSpacing: tokens.TRACKING, 315 - }, 316 - text_2xl: { 317 - fontSize: tokens.fontSize._2xl, 318 - letterSpacing: tokens.TRACKING, 319 - }, 320 - text_3xl: { 321 - fontSize: tokens.fontSize._3xl, 322 - letterSpacing: tokens.TRACKING, 323 - }, 324 - text_4xl: { 325 - fontSize: tokens.fontSize._4xl, 326 - letterSpacing: tokens.TRACKING, 327 - }, 328 - text_5xl: { 329 - fontSize: tokens.fontSize._5xl, 330 - letterSpacing: tokens.TRACKING, 331 - }, 332 - leading_tight: { 333 - lineHeight: 1.15, 334 - }, 335 - leading_snug: { 336 - lineHeight: 1.3, 337 - }, 338 - leading_normal: { 339 - lineHeight: 1.5, 340 - }, 341 - tracking_normal: { 342 - letterSpacing: tokens.TRACKING, 343 - }, 344 - font_normal: { 345 - fontWeight: tokens.fontWeight.normal, 346 - }, 347 - font_medium: { 348 - fontWeight: tokens.fontWeight.medium, 349 - }, 350 - font_bold: { 351 - fontWeight: tokens.fontWeight.bold, 352 - }, 353 - font_heavy: { 354 - fontWeight: tokens.fontWeight.heavy, 355 - }, 356 - italic: { 357 - fontStyle: 'italic', 358 - }, 359 - 360 - /* 361 - * Border 362 - */ 363 - border_0: { 364 - borderWidth: 0, 365 - }, 366 - border_t_0: { 367 - borderTopWidth: 0, 368 - }, 369 - border_b_0: { 370 - borderBottomWidth: 0, 371 - }, 372 - border_l_0: { 373 - borderLeftWidth: 0, 374 - }, 375 - border_r_0: { 376 - borderRightWidth: 0, 377 - }, 378 - border_x_0: { 379 - borderLeftWidth: 0, 380 - borderRightWidth: 0, 381 - }, 382 - border_y_0: { 383 - borderTopWidth: 0, 384 - borderBottomWidth: 0, 385 - }, 386 - border: { 387 - borderWidth: StyleSheet.hairlineWidth, 388 - }, 389 - border_t: { 390 - borderTopWidth: StyleSheet.hairlineWidth, 391 - }, 392 - border_b: { 393 - borderBottomWidth: StyleSheet.hairlineWidth, 394 - }, 395 - border_l: { 396 - borderLeftWidth: StyleSheet.hairlineWidth, 397 - }, 398 - border_r: { 399 - borderRightWidth: StyleSheet.hairlineWidth, 400 - }, 401 - border_x: { 402 - borderLeftWidth: StyleSheet.hairlineWidth, 403 - borderRightWidth: StyleSheet.hairlineWidth, 404 - }, 405 - border_y: { 406 - borderTopWidth: StyleSheet.hairlineWidth, 407 - borderBottomWidth: StyleSheet.hairlineWidth, 408 - }, 409 - border_transparent: { 410 - borderColor: 'transparent', 411 - }, 412 - curve_circular: ios({ 413 - borderCurve: 'circular', 414 - }), 415 - curve_continuous: ios({ 416 - borderCurve: 'continuous', 417 - }), 418 - 419 - /* 420 - * Shadow 421 - */ 422 - shadow_sm: { 423 - shadowRadius: 8, 424 - shadowOpacity: 0.1, 425 - elevation: 8, 426 - }, 427 - shadow_md: { 428 - shadowRadius: 16, 429 - shadowOpacity: 0.1, 430 - elevation: 16, 431 - }, 432 - shadow_lg: { 433 - shadowRadius: 32, 434 - shadowOpacity: 0.1, 435 - elevation: 24, 436 - }, 437 - 438 - /* 439 - * Padding 440 - */ 441 - p_0: { 442 - padding: 0, 443 - }, 444 - p_2xs: { 445 - padding: tokens.space._2xs, 446 - }, 447 - p_xs: { 448 - padding: tokens.space.xs, 449 - }, 450 - p_sm: { 451 - padding: tokens.space.sm, 452 - }, 453 - p_md: { 454 - padding: tokens.space.md, 455 - }, 456 - p_lg: { 457 - padding: tokens.space.lg, 458 - }, 459 - p_xl: { 460 - padding: tokens.space.xl, 461 - }, 462 - p_2xl: { 463 - padding: tokens.space._2xl, 464 - }, 465 - p_3xl: { 466 - padding: tokens.space._3xl, 467 - }, 468 - p_4xl: { 469 - padding: tokens.space._4xl, 470 - }, 471 - p_5xl: { 472 - padding: tokens.space._5xl, 473 - }, 474 - px_0: { 475 - paddingLeft: 0, 476 - paddingRight: 0, 477 - }, 478 - px_2xs: { 479 - paddingLeft: tokens.space._2xs, 480 - paddingRight: tokens.space._2xs, 481 - }, 482 - px_xs: { 483 - paddingLeft: tokens.space.xs, 484 - paddingRight: tokens.space.xs, 485 - }, 486 - px_sm: { 487 - paddingLeft: tokens.space.sm, 488 - paddingRight: tokens.space.sm, 489 - }, 490 - px_md: { 491 - paddingLeft: tokens.space.md, 492 - paddingRight: tokens.space.md, 493 - }, 494 - px_lg: { 495 - paddingLeft: tokens.space.lg, 496 - paddingRight: tokens.space.lg, 497 - }, 498 - px_xl: { 499 - paddingLeft: tokens.space.xl, 500 - paddingRight: tokens.space.xl, 501 - }, 502 - px_2xl: { 503 - paddingLeft: tokens.space._2xl, 504 - paddingRight: tokens.space._2xl, 505 - }, 506 - px_3xl: { 507 - paddingLeft: tokens.space._3xl, 508 - paddingRight: tokens.space._3xl, 509 - }, 510 - px_4xl: { 511 - paddingLeft: tokens.space._4xl, 512 - paddingRight: tokens.space._4xl, 513 - }, 514 - px_5xl: { 515 - paddingLeft: tokens.space._5xl, 516 - paddingRight: tokens.space._5xl, 517 - }, 518 - py_0: { 519 - paddingTop: 0, 520 - paddingBottom: 0, 521 - }, 522 - py_2xs: { 523 - paddingTop: tokens.space._2xs, 524 - paddingBottom: tokens.space._2xs, 525 - }, 526 - py_xs: { 527 - paddingTop: tokens.space.xs, 528 - paddingBottom: tokens.space.xs, 529 - }, 530 - py_sm: { 531 - paddingTop: tokens.space.sm, 532 - paddingBottom: tokens.space.sm, 533 - }, 534 - py_md: { 535 - paddingTop: tokens.space.md, 536 - paddingBottom: tokens.space.md, 537 - }, 538 - py_lg: { 539 - paddingTop: tokens.space.lg, 540 - paddingBottom: tokens.space.lg, 541 - }, 542 - py_xl: { 543 - paddingTop: tokens.space.xl, 544 - paddingBottom: tokens.space.xl, 545 - }, 546 - py_2xl: { 547 - paddingTop: tokens.space._2xl, 548 - paddingBottom: tokens.space._2xl, 549 - }, 550 - py_3xl: { 551 - paddingTop: tokens.space._3xl, 552 - paddingBottom: tokens.space._3xl, 553 - }, 554 - py_4xl: { 555 - paddingTop: tokens.space._4xl, 556 - paddingBottom: tokens.space._4xl, 557 - }, 558 - py_5xl: { 559 - paddingTop: tokens.space._5xl, 560 - paddingBottom: tokens.space._5xl, 561 - }, 562 - pt_0: { 563 - paddingTop: 0, 564 - }, 565 - pt_2xs: { 566 - paddingTop: tokens.space._2xs, 567 - }, 568 - pt_xs: { 569 - paddingTop: tokens.space.xs, 570 - }, 571 - pt_sm: { 572 - paddingTop: tokens.space.sm, 573 - }, 574 - pt_md: { 575 - paddingTop: tokens.space.md, 576 - }, 577 - pt_lg: { 578 - paddingTop: tokens.space.lg, 579 - }, 580 - pt_xl: { 581 - paddingTop: tokens.space.xl, 582 - }, 583 - pt_2xl: { 584 - paddingTop: tokens.space._2xl, 585 - }, 586 - pt_3xl: { 587 - paddingTop: tokens.space._3xl, 588 - }, 589 - pt_4xl: { 590 - paddingTop: tokens.space._4xl, 591 - }, 592 - pt_5xl: { 593 - paddingTop: tokens.space._5xl, 594 - }, 595 - pb_0: { 596 - paddingBottom: 0, 597 - }, 598 - pb_2xs: { 599 - paddingBottom: tokens.space._2xs, 600 - }, 601 - pb_xs: { 602 - paddingBottom: tokens.space.xs, 603 - }, 604 - pb_sm: { 605 - paddingBottom: tokens.space.sm, 606 - }, 607 - pb_md: { 608 - paddingBottom: tokens.space.md, 609 - }, 610 - pb_lg: { 611 - paddingBottom: tokens.space.lg, 612 - }, 613 - pb_xl: { 614 - paddingBottom: tokens.space.xl, 615 - }, 616 - pb_2xl: { 617 - paddingBottom: tokens.space._2xl, 618 - }, 619 - pb_3xl: { 620 - paddingBottom: tokens.space._3xl, 621 - }, 622 - pb_4xl: { 623 - paddingBottom: tokens.space._4xl, 624 - }, 625 - pb_5xl: { 626 - paddingBottom: tokens.space._5xl, 627 - }, 628 - pl_0: { 629 - paddingLeft: 0, 630 - }, 631 - pl_2xs: { 632 - paddingLeft: tokens.space._2xs, 633 - }, 634 - pl_xs: { 635 - paddingLeft: tokens.space.xs, 636 - }, 637 - pl_sm: { 638 - paddingLeft: tokens.space.sm, 639 - }, 640 - pl_md: { 641 - paddingLeft: tokens.space.md, 642 - }, 643 - pl_lg: { 644 - paddingLeft: tokens.space.lg, 645 - }, 646 - pl_xl: { 647 - paddingLeft: tokens.space.xl, 648 - }, 649 - pl_2xl: { 650 - paddingLeft: tokens.space._2xl, 651 - }, 652 - pl_3xl: { 653 - paddingLeft: tokens.space._3xl, 654 - }, 655 - pl_4xl: { 656 - paddingLeft: tokens.space._4xl, 657 - }, 658 - pl_5xl: { 659 - paddingLeft: tokens.space._5xl, 660 - }, 661 - pr_0: { 662 - paddingRight: 0, 663 - }, 664 - pr_2xs: { 665 - paddingRight: tokens.space._2xs, 666 - }, 667 - pr_xs: { 668 - paddingRight: tokens.space.xs, 669 - }, 670 - pr_sm: { 671 - paddingRight: tokens.space.sm, 672 - }, 673 - pr_md: { 674 - paddingRight: tokens.space.md, 675 - }, 676 - pr_lg: { 677 - paddingRight: tokens.space.lg, 678 - }, 679 - pr_xl: { 680 - paddingRight: tokens.space.xl, 681 - }, 682 - pr_2xl: { 683 - paddingRight: tokens.space._2xl, 684 - }, 685 - pr_3xl: { 686 - paddingRight: tokens.space._3xl, 687 - }, 688 - pr_4xl: { 689 - paddingRight: tokens.space._4xl, 690 - }, 691 - pr_5xl: { 692 - paddingRight: tokens.space._5xl, 693 - }, 694 - 695 - /* 696 - * Margin 697 - */ 698 - m_0: { 699 - margin: 0, 700 - }, 701 - m_2xs: { 702 - margin: tokens.space._2xs, 703 - }, 704 - m_xs: { 705 - margin: tokens.space.xs, 706 - }, 707 - m_sm: { 708 - margin: tokens.space.sm, 709 - }, 710 - m_md: { 711 - margin: tokens.space.md, 712 - }, 713 - m_lg: { 714 - margin: tokens.space.lg, 715 - }, 716 - m_xl: { 717 - margin: tokens.space.xl, 718 - }, 719 - m_2xl: { 720 - margin: tokens.space._2xl, 721 - }, 722 - m_3xl: { 723 - margin: tokens.space._3xl, 724 - }, 725 - m_4xl: { 726 - margin: tokens.space._4xl, 727 - }, 728 - m_5xl: { 729 - margin: tokens.space._5xl, 730 - }, 731 - m_auto: { 732 - margin: 'auto', 733 - }, 734 - mx_0: { 735 - marginLeft: 0, 736 - marginRight: 0, 737 - }, 738 - mx_2xs: { 739 - marginLeft: tokens.space._2xs, 740 - marginRight: tokens.space._2xs, 741 - }, 742 - mx_xs: { 743 - marginLeft: tokens.space.xs, 744 - marginRight: tokens.space.xs, 745 - }, 746 - mx_sm: { 747 - marginLeft: tokens.space.sm, 748 - marginRight: tokens.space.sm, 749 - }, 750 - mx_md: { 751 - marginLeft: tokens.space.md, 752 - marginRight: tokens.space.md, 753 - }, 754 - mx_lg: { 755 - marginLeft: tokens.space.lg, 756 - marginRight: tokens.space.lg, 757 - }, 758 - mx_xl: { 759 - marginLeft: tokens.space.xl, 760 - marginRight: tokens.space.xl, 761 - }, 762 - mx_2xl: { 763 - marginLeft: tokens.space._2xl, 764 - marginRight: tokens.space._2xl, 765 - }, 766 - mx_3xl: { 767 - marginLeft: tokens.space._3xl, 768 - marginRight: tokens.space._3xl, 769 - }, 770 - mx_4xl: { 771 - marginLeft: tokens.space._4xl, 772 - marginRight: tokens.space._4xl, 773 - }, 774 - mx_5xl: { 775 - marginLeft: tokens.space._5xl, 776 - marginRight: tokens.space._5xl, 777 - }, 778 - mx_auto: { 779 - marginLeft: 'auto', 780 - marginRight: 'auto', 781 - }, 782 - my_0: { 783 - marginTop: 0, 784 - marginBottom: 0, 785 - }, 786 - my_2xs: { 787 - marginTop: tokens.space._2xs, 788 - marginBottom: tokens.space._2xs, 789 - }, 790 - my_xs: { 791 - marginTop: tokens.space.xs, 792 - marginBottom: tokens.space.xs, 793 - }, 794 - my_sm: { 795 - marginTop: tokens.space.sm, 796 - marginBottom: tokens.space.sm, 797 - }, 798 - my_md: { 799 - marginTop: tokens.space.md, 800 - marginBottom: tokens.space.md, 801 - }, 802 - my_lg: { 803 - marginTop: tokens.space.lg, 804 - marginBottom: tokens.space.lg, 805 - }, 806 - my_xl: { 807 - marginTop: tokens.space.xl, 808 - marginBottom: tokens.space.xl, 809 - }, 810 - my_2xl: { 811 - marginTop: tokens.space._2xl, 812 - marginBottom: tokens.space._2xl, 813 - }, 814 - my_3xl: { 815 - marginTop: tokens.space._3xl, 816 - marginBottom: tokens.space._3xl, 817 - }, 818 - my_4xl: { 819 - marginTop: tokens.space._4xl, 820 - marginBottom: tokens.space._4xl, 821 - }, 822 - my_5xl: { 823 - marginTop: tokens.space._5xl, 824 - marginBottom: tokens.space._5xl, 825 - }, 826 - my_auto: { 827 - marginTop: 'auto', 828 - marginBottom: 'auto', 829 - }, 830 - mt_0: { 831 - marginTop: 0, 832 - }, 833 - mt_2xs: { 834 - marginTop: tokens.space._2xs, 835 - }, 836 - mt_xs: { 837 - marginTop: tokens.space.xs, 838 - }, 839 - mt_sm: { 840 - marginTop: tokens.space.sm, 841 - }, 842 - mt_md: { 843 - marginTop: tokens.space.md, 844 - }, 845 - mt_lg: { 846 - marginTop: tokens.space.lg, 847 - }, 848 - mt_xl: { 849 - marginTop: tokens.space.xl, 850 - }, 851 - mt_2xl: { 852 - marginTop: tokens.space._2xl, 853 - }, 854 - mt_3xl: { 855 - marginTop: tokens.space._3xl, 856 - }, 857 - mt_4xl: { 858 - marginTop: tokens.space._4xl, 859 - }, 860 - mt_5xl: { 861 - marginTop: tokens.space._5xl, 862 - }, 863 - mt_auto: { 864 - marginTop: 'auto', 865 - }, 866 - mb_0: { 867 - marginBottom: 0, 868 - }, 869 - mb_2xs: { 870 - marginBottom: tokens.space._2xs, 871 - }, 872 - mb_xs: { 873 - marginBottom: tokens.space.xs, 874 - }, 875 - mb_sm: { 876 - marginBottom: tokens.space.sm, 877 - }, 878 - mb_md: { 879 - marginBottom: tokens.space.md, 880 - }, 881 - mb_lg: { 882 - marginBottom: tokens.space.lg, 883 - }, 884 - mb_xl: { 885 - marginBottom: tokens.space.xl, 886 - }, 887 - mb_2xl: { 888 - marginBottom: tokens.space._2xl, 889 - }, 890 - mb_3xl: { 891 - marginBottom: tokens.space._3xl, 892 - }, 893 - mb_4xl: { 894 - marginBottom: tokens.space._4xl, 895 - }, 896 - mb_5xl: { 897 - marginBottom: tokens.space._5xl, 898 - }, 899 - mb_auto: { 900 - marginBottom: 'auto', 901 - }, 902 - ml_0: { 903 - marginLeft: 0, 904 - }, 905 - ml_2xs: { 906 - marginLeft: tokens.space._2xs, 907 - }, 908 - ml_xs: { 909 - marginLeft: tokens.space.xs, 910 - }, 911 - ml_sm: { 912 - marginLeft: tokens.space.sm, 913 - }, 914 - ml_md: { 915 - marginLeft: tokens.space.md, 916 - }, 917 - ml_lg: { 918 - marginLeft: tokens.space.lg, 919 - }, 920 - ml_xl: { 921 - marginLeft: tokens.space.xl, 922 - }, 923 - ml_2xl: { 924 - marginLeft: tokens.space._2xl, 925 - }, 926 - ml_3xl: { 927 - marginLeft: tokens.space._3xl, 928 - }, 929 - ml_4xl: { 930 - marginLeft: tokens.space._4xl, 931 - }, 932 - ml_5xl: { 933 - marginLeft: tokens.space._5xl, 934 - }, 935 - ml_auto: { 936 - marginLeft: 'auto', 937 - }, 938 - mr_0: { 939 - marginRight: 0, 940 - }, 941 - mr_2xs: { 942 - marginRight: tokens.space._2xs, 943 - }, 944 - mr_xs: { 945 - marginRight: tokens.space.xs, 946 - }, 947 - mr_sm: { 948 - marginRight: tokens.space.sm, 949 - }, 950 - mr_md: { 951 - marginRight: tokens.space.md, 952 - }, 953 - mr_lg: { 954 - marginRight: tokens.space.lg, 955 - }, 956 - mr_xl: { 957 - marginRight: tokens.space.xl, 958 - }, 959 - mr_2xl: { 960 - marginRight: tokens.space._2xl, 961 - }, 962 - mr_3xl: { 963 - marginRight: tokens.space._3xl, 964 - }, 965 - mr_4xl: { 966 - marginRight: tokens.space._4xl, 967 - }, 968 - mr_5xl: { 969 - marginRight: tokens.space._5xl, 970 - }, 971 - mr_auto: { 972 - marginRight: 'auto', 973 - }, 974 - 975 - /* 976 - * Pointer events & user select 977 - */ 978 - pointer_events_none: { 979 - pointerEvents: 'none', 980 - }, 981 - pointer_events_auto: { 982 - pointerEvents: 'auto', 983 - }, 984 - user_select_none: { 985 - userSelect: 'none', 986 - }, 987 - user_select_text: { 988 - userSelect: 'text', 989 - }, 990 - user_select_all: { 991 - userSelect: 'all', 992 - }, 993 - outline_inset_1: { 994 - outlineOffset: -1, 995 - }, 996 - 997 - /* 998 - * Text decoration 999 - */ 1000 - underline: { 1001 - textDecorationLine: 'underline', 1002 - }, 1003 - strike_through: { 1004 - textDecorationLine: 'line-through', 1005 - }, 1006 - 1007 - /* 1008 - * Display 1009 - */ 1010 - hidden: { 1011 - display: 'none', 1012 - }, 1013 - inline: web({ 1014 - display: 'inline', 1015 - }), 1016 - block: web({ 1017 - display: 'block', 1018 - }), 1019 - contents: web({ 1020 - display: 'contents', 1021 - }), 1022 - 1023 - /* 1024 35 * Transition 1025 36 */ 1026 37 transition_none: web({ ··· 1099 110 transform: [], 1100 111 }, 1101 112 }) as {transform: Exclude<ViewStyle['transform'], string | undefined>}, 1102 - 1103 - pointer: web({ 1104 - cursor: 'pointer', 1105 - }), 1106 113 } as const
+5 -5
src/alf/fonts.ts
··· 7 7 8 8 const factor = 0.0625 // 1 - (15/16) 9 9 const fontScaleMultipliers: Record<Device['fontScale'], number> = { 10 - '-2': 1 - factor * 3, 11 - '-1': 1 - factor * 2, 12 - '0': 1 - factor * 1, // default 13 - '1': 1, 14 - '2': 1 + factor * 1, 10 + '-2': 1 - factor * 1, // unused 11 + '-1': 1 - factor * 1, 12 + '0': 1, // default 13 + '1': 1 + factor * 1, 14 + '2': 1 + factor * 1, // unused 15 15 } 16 16 17 17 export function computeFontScaleMultiplier(scale: Device['fontScale']) {
+13 -30
src/alf/index.tsx
··· 1 1 import React from 'react' 2 + import {type Theme, type ThemeName} from '@bsky.app/alf' 2 3 3 4 import { 4 5 computeFontScaleMultiplier, ··· 7 8 setFontFamily as persistFontFamily, 8 9 setFontScale as persistFontScale, 9 10 } from '#/alf/fonts' 10 - import {createThemes, defaultTheme} from '#/alf/themes' 11 - import {type Theme, type ThemeName} from '#/alf/types' 12 - import {BLUE_HUE, GREEN_HUE, RED_HUE} from '#/alf/util/colorGeneration' 11 + import {themes} from '#/alf/themes' 13 12 import {type Device} from '#/storage' 14 13 14 + export {type TextStyleProp, type Theme, type ViewStyleProp} from '@bsky.app/alf' 15 15 export {atoms} from '#/alf/atoms' 16 16 export * from '#/alf/breakpoints' 17 17 export * from '#/alf/fonts' 18 18 export * as tokens from '#/alf/tokens' 19 - export * from '#/alf/types' 20 19 export * from '#/alf/util/flatten' 21 20 export * from '#/alf/util/platform' 22 21 export * from '#/alf/util/themeSelector' ··· 25 24 export type Alf = { 26 25 themeName: ThemeName 27 26 theme: Theme 28 - themes: ReturnType<typeof createThemes> 27 + themes: typeof themes 29 28 fonts: { 30 29 scale: Exclude<Device['fontScale'], undefined> 31 30 scaleMultiplier: number ··· 44 43 */ 45 44 export const Context = React.createContext<Alf>({ 46 45 themeName: 'light', 47 - theme: defaultTheme, 48 - themes: createThemes({ 49 - hues: { 50 - primary: BLUE_HUE, 51 - negative: RED_HUE, 52 - positive: GREEN_HUE, 53 - }, 54 - }), 46 + theme: themes.light, 47 + themes, 55 48 fonts: { 56 49 scale: getFontScale(), 57 50 scaleMultiplier: computeFontScaleMultiplier(getFontScale()), ··· 76 69 const setFontScaleAndPersist = React.useCallback< 77 70 Alf['fonts']['setFontScale'] 78 71 >( 79 - fontScale => { 80 - setFontScale(fontScale) 81 - persistFontScale(fontScale) 82 - setFontScaleMultiplier(computeFontScaleMultiplier(fontScale)) 72 + fs => { 73 + setFontScale(fs) 74 + persistFontScale(fs) 75 + setFontScaleMultiplier(computeFontScaleMultiplier(fs)) 83 76 }, 84 77 [setFontScale], 85 78 ) ··· 89 82 const setFontFamilyAndPersist = React.useCallback< 90 83 Alf['fonts']['setFontFamily'] 91 84 >( 92 - fontFamily => { 93 - setFontFamily(fontFamily) 94 - persistFontFamily(fontFamily) 85 + ff => { 86 + setFontFamily(ff) 87 + persistFontFamily(ff) 95 88 }, 96 89 [setFontFamily], 97 90 ) 98 - const themes = React.useMemo(() => { 99 - return createThemes({ 100 - hues: { 101 - primary: BLUE_HUE, 102 - negative: RED_HUE, 103 - positive: GREEN_HUE, 104 - }, 105 - }) 106 - }, []) 107 91 108 92 const value = React.useMemo<Alf>( 109 93 () => ({ ··· 121 105 }), 122 106 [ 123 107 themeName, 124 - themes, 125 108 fontScale, 126 109 setFontScaleAndPersist, 127 110 fontFamily,
+278 -560
src/alf/themes.ts
··· 1 - import {atoms} from '#/alf/atoms' 2 - import {type Palette, type Theme} from '#/alf/types' 3 1 import { 4 - BLUE_HUE, 5 - defaultScale, 6 - dimScale, 7 - GREEN_HUE, 8 - RED_HUE, 9 - } from '#/alf/util/colorGeneration' 2 + createThemes, 3 + // I REJECT NODE MODULE SOCIETY 4 + // DEFAULT_PALETTE, 5 + // DEFAULT_SUBDUED_PALETTE, 6 + } from '@bsky.app/alf' 10 7 11 - const themes = createThemes({ 12 - hues: { 13 - primary: BLUE_HUE, 14 - negative: RED_HUE, 15 - positive: GREEN_HUE, 16 - }, 17 - }) 8 + export type Palette = { 9 + white: string 10 + black: string 11 + like: string 18 12 19 - /** 20 - * @deprecated use ALF and access palette from `useTheme()` 21 - */ 22 - export const lightPalette = themes.lightPalette 23 - /** 24 - * @deprecated use ALF and access palette from `useTheme()` 25 - */ 26 - export const darkPalette = themes.darkPalette 27 - /** 28 - * @deprecated use ALF and access palette from `useTheme()` 29 - */ 30 - export const dimPalette = themes.dimPalette 31 - /** 32 - * @deprecated use ALF and access theme from `useTheme()` 33 - */ 34 - export const light = themes.light 35 - /** 36 - * @deprecated use ALF and access theme from `useTheme()` 37 - */ 38 - export const dark = themes.dark 39 - /** 40 - * @deprecated use ALF and access theme from `useTheme()` 41 - */ 42 - export const dim = themes.dim 13 + contrast_0: string 14 + contrast_25: string 15 + contrast_50: string 16 + contrast_100: string 17 + contrast_200: string 18 + contrast_300: string 19 + contrast_400: string 20 + contrast_500: string 21 + contrast_600: string 22 + contrast_700: string 23 + contrast_800: string 24 + contrast_900: string 25 + contrast_950: string 26 + contrast_975: string 27 + contrast_1000: string 43 28 44 - export const defaultTheme = themes.light 29 + primary_25: string 30 + primary_50: string 31 + primary_100: string 32 + primary_200: string 33 + primary_300: string 34 + primary_400: string 35 + primary_500: string 36 + primary_600: string 37 + primary_700: string 38 + primary_800: string 39 + primary_900: string 40 + primary_950: string 41 + primary_975: string 45 42 46 - export function createThemes({ 47 - hues, 48 - }: { 49 - hues: { 50 - primary: number 51 - negative: number 52 - positive: number 53 - } 54 - }): { 55 - lightPalette: Palette 56 - darkPalette: Palette 57 - dimPalette: Palette 58 - light: Theme 59 - dark: Theme 60 - dim: Theme 61 - } { 62 - const color = { 63 - like: '#ec4899', 64 - trueBlack: '#000000', 43 + positive_25: string 44 + positive_50: string 45 + positive_100: string 46 + positive_200: string 47 + positive_300: string 48 + positive_400: string 49 + positive_500: string 50 + positive_600: string 51 + positive_700: string 52 + positive_800: string 53 + positive_900: string 54 + positive_950: string 55 + positive_975: string 65 56 66 - gray_0: `hsl(${hues.primary}, 20%, ${defaultScale[14]}%)`, 67 - gray_25: `hsl(${hues.primary}, 20%, ${defaultScale[13]}%)`, 68 - gray_50: `hsl(${hues.primary}, 20%, ${defaultScale[12]}%)`, 69 - gray_100: `hsl(${hues.primary}, 20%, ${defaultScale[11]}%)`, 70 - gray_200: `hsl(${hues.primary}, 20%, ${defaultScale[10]}%)`, 71 - gray_300: `hsl(${hues.primary}, 20%, ${defaultScale[9]}%)`, 72 - gray_400: `hsl(${hues.primary}, 20%, ${defaultScale[8]}%)`, 73 - gray_500: `hsl(${hues.primary}, 20%, ${defaultScale[7]}%)`, 74 - gray_600: `hsl(${hues.primary}, 24%, ${defaultScale[6]}%)`, 75 - gray_700: `hsl(${hues.primary}, 24%, ${defaultScale[5]}%)`, 76 - gray_800: `hsl(${hues.primary}, 28%, ${defaultScale[4]}%)`, 77 - gray_900: `hsl(${hues.primary}, 28%, ${defaultScale[3]}%)`, 78 - gray_950: `hsl(${hues.primary}, 28%, ${defaultScale[2]}%)`, 79 - gray_975: `hsl(${hues.primary}, 28%, ${defaultScale[1]}%)`, 80 - gray_1000: `hsl(${hues.primary}, 28%, ${defaultScale[0]}%)`, 57 + negative_25: string 58 + negative_50: string 59 + negative_100: string 60 + negative_200: string 61 + negative_300: string 62 + negative_400: string 63 + negative_500: string 64 + negative_600: string 65 + negative_700: string 66 + negative_800: string 67 + negative_900: string 68 + negative_950: string 69 + negative_975: string 70 + } 81 71 82 - primary_25: `hsl(290, 30%, 97%)`, 83 - primary_50: `hsl(290, 30%, 95%)`, 84 - primary_100: `hsl(290, 30%, 90%)`, 85 - primary_200: `hsl(290, 32%, 80%)`, 86 - primary_300: `hsl(290, 34%, 70%)`, 87 - primary_400: `hsl(290, 35%, 58%)`, 88 - primary_500: `hsl(290, 35%, 45%)`, 89 - primary_600: `hsl(290, 38%, 38%)`, 90 - primary_700: `hsl(290, 40%, 32%)`, 91 - primary_800: `hsl(290, 42%, 25%)`, 92 - primary_900: `hsl(290, 45%, 18%)`, 93 - primary_950: `hsl(290, 48%, 10%)`, 94 - primary_975: `hsl(290, 50%, 7%)`, 72 + export const DEFAULT_PALETTE: Palette = { 73 + white: '#FFFFFF', 74 + black: '#000000', 75 + like: '#EC4899', 95 76 96 - green_25: `hsl(${hues.positive}, 82%, 97%)`, 97 - green_50: `hsl(${hues.positive}, 82%, 95%)`, 98 - green_100: `hsl(${hues.positive}, 82%, 90%)`, 99 - green_200: `hsl(${hues.positive}, 82%, 80%)`, 100 - green_300: `hsl(${hues.positive}, 82%, 70%)`, 101 - green_400: `hsl(${hues.positive}, 82%, 60%)`, 102 - green_500: `hsl(${hues.positive}, 82%, 50%)`, 103 - green_600: `hsl(${hues.positive}, 82%, 42%)`, 104 - green_700: `hsl(${hues.positive}, 82%, 34%)`, 105 - green_800: `hsl(${hues.positive}, 82%, 26%)`, 106 - green_900: `hsl(${hues.positive}, 82%, 18%)`, 107 - green_950: `hsl(${hues.positive}, 82%, 10%)`, 108 - green_975: `hsl(${hues.positive}, 82%, 7%)`, 77 + contrast_0: '#FFFFFF', 78 + contrast_25: '#F9FAFB', 79 + contrast_50: '#EFF2F6', 80 + contrast_100: '#DCE2EA', 81 + contrast_200: '#C0CAD8', 82 + contrast_300: '#A5B2C5', 83 + contrast_400: '#8798B0', 84 + contrast_500: '#667B99', 85 + contrast_600: '#526580', 86 + contrast_700: '#405168', 87 + contrast_800: '#313F54', 88 + contrast_900: '#232E3E', 89 + contrast_950: '#19222E', 90 + contrast_975: '#111822', 91 + contrast_1000: '#000000', 109 92 110 - red_25: `hsl(${hues.negative}, 91%, 97%)`, 111 - red_50: `hsl(${hues.negative}, 91%, 95%)`, 112 - red_100: `hsl(${hues.negative}, 91%, 90%)`, 113 - red_200: `hsl(${hues.negative}, 91%, 80%)`, 114 - red_300: `hsl(${hues.negative}, 91%, 70%)`, 115 - red_400: `hsl(${hues.negative}, 91%, 60%)`, 116 - red_500: `hsl(${hues.negative}, 91%, 50%)`, 117 - red_600: `hsl(${hues.negative}, 91%, 42%)`, 118 - red_700: `hsl(${hues.negative}, 91%, 34%)`, 119 - red_800: `hsl(${hues.negative}, 91%, 26%)`, 120 - red_900: `hsl(${hues.negative}, 91%, 18%)`, 121 - red_950: `hsl(${hues.negative}, 91%, 10%)`, 122 - red_975: `hsl(${hues.negative}, 91%, 7%)`, 123 - } as const 93 + primary_25: `hsl(290, 30%, 97%)`, 94 + primary_50: `hsl(290, 30%, 95%)`, 95 + primary_100: `hsl(290, 30%, 90%)`, 96 + primary_200: `hsl(290, 32%, 80%)`, 97 + primary_300: `hsl(290, 34%, 70%)`, 98 + primary_400: `hsl(290, 35%, 58%)`, 99 + primary_500: `hsl(290, 35%, 45%)`, 100 + primary_600: `hsl(290, 38%, 38%)`, 101 + primary_700: `hsl(290, 40%, 32%)`, 102 + primary_800: `hsl(290, 42%, 25%)`, 103 + primary_900: `hsl(290, 45%, 18%)`, 104 + primary_950: `hsl(290, 48%, 10%)`, 105 + primary_975: `hsl(290, 50%, 7%)`, 124 106 125 - const lightPalette = { 126 - white: color.gray_0, 127 - black: color.gray_1000, 128 - like: color.like, 107 + positive_25: '#ECFEF5', 108 + positive_50: '#D3FDE8', 109 + positive_100: '#A3FACF', 110 + positive_200: '#6AF6B0', 111 + positive_300: '#2CF28F', 112 + positive_400: '#0DD370', 113 + positive_500: '#09B35E', 114 + positive_600: '#04904A', 115 + positive_700: '#036D38', 116 + positive_800: '#04522B', 117 + positive_900: '#033F21', 118 + positive_950: '#032A17', 119 + positive_975: '#021D0F', 129 120 130 - contrast_25: color.gray_25, 131 - contrast_50: color.gray_50, 132 - contrast_100: color.gray_100, 133 - contrast_200: color.gray_200, 134 - contrast_300: color.gray_300, 135 - contrast_400: color.gray_400, 136 - contrast_500: color.gray_500, 137 - contrast_600: color.gray_600, 138 - contrast_700: color.gray_700, 139 - contrast_800: color.gray_800, 140 - contrast_900: color.gray_900, 141 - contrast_950: color.gray_950, 142 - contrast_975: color.gray_975, 121 + negative_25: '#FFF5F7', 122 + negative_50: '#FEE7EC', 123 + negative_100: '#FDD3DD', 124 + negative_200: '#FBBBCA', 125 + negative_300: '#F891A9', 126 + negative_400: '#F65A7F', 127 + negative_500: '#E91646', 128 + negative_600: '#CA123D', 129 + negative_700: '#A71134', 130 + negative_800: '#7F0B26', 131 + negative_900: '#5F071C', 132 + negative_950: '#430413', 133 + negative_975: '#30030D', 134 + } 143 135 144 - primary_25: color.primary_25, 145 - primary_50: color.primary_50, 146 - primary_100: color.primary_100, 147 - primary_200: color.primary_200, 148 - primary_300: color.primary_300, 149 - primary_400: color.primary_400, 150 - primary_500: color.primary_500, 151 - primary_600: color.primary_600, 152 - primary_700: color.primary_700, 153 - primary_800: color.primary_800, 154 - primary_900: color.primary_900, 155 - primary_950: color.primary_950, 156 - primary_975: color.primary_975, 136 + export const DEFAULT_SUBDUED_PALETTE: Palette = { 137 + white: '#FFFFFF', 138 + black: '#000000', 139 + like: '#EC4899', 157 140 158 - positive_25: color.green_25, 159 - positive_50: color.green_50, 160 - positive_100: color.green_100, 161 - positive_200: color.green_200, 162 - positive_300: color.green_300, 163 - positive_400: color.green_400, 164 - positive_500: color.green_500, 165 - positive_600: color.green_600, 166 - positive_700: color.green_700, 167 - positive_800: color.green_800, 168 - positive_900: color.green_900, 169 - positive_950: color.green_950, 170 - positive_975: color.green_975, 141 + contrast_0: '#FFFFFF', 142 + contrast_25: '#F9FAFB', 143 + contrast_50: '#F2F4F8', 144 + contrast_100: '#E2E7EE', 145 + contrast_200: '#C3CDDA', 146 + contrast_300: '#ABB8C9', 147 + contrast_400: '#8D9DB4', 148 + contrast_500: '#6F839F', 149 + contrast_600: '#586C89', 150 + contrast_700: '#485B75', 151 + contrast_800: '#394960', 152 + contrast_900: '#2C3A4E', 153 + contrast_950: '#222E3F', 154 + contrast_975: '#1C2736', 155 + contrast_1000: '#151D28', 171 156 172 - negative_25: color.red_25, 173 - negative_50: color.red_50, 174 - negative_100: color.red_100, 175 - negative_200: color.red_200, 176 - negative_300: color.red_300, 177 - negative_400: color.red_400, 178 - negative_500: color.red_500, 179 - negative_600: color.red_600, 180 - negative_700: color.red_700, 181 - negative_800: color.red_800, 182 - negative_900: color.red_900, 183 - negative_950: color.red_950, 184 - negative_975: color.red_975, 185 - } as const 157 + primary_25: `hsl(290, 30%, 97%)`, 158 + primary_50: `hsl(290, 30%, 96%)`, 159 + primary_100: `hsl(290, 30%, 92%)`, 160 + primary_200: `hsl(290, 32%, 81%)`, 161 + primary_300: `hsl(290, 34%, 72%)`, 162 + primary_400: `hsl(290, 35%, 60%)`, 163 + primary_500: `hsl(290, 35%, 48%)`, 164 + primary_600: `hsl(290, 38%, 41%)`, 165 + primary_700: `hsl(290, 40%, 36%)`, 166 + primary_800: `hsl(290, 42%, 29%)`, 167 + primary_900: `hsl(290, 45%, 22%)`, 168 + primary_950: `hsl(290, 48%, 10%)`, 169 + primary_975: `hsl(290, 50%, 8%)`, 186 170 187 - const darkPalette: Palette = { 188 - white: color.gray_0, // this used to be gray_25, set it to 0 for contrast reasons 189 - black: color.trueBlack, 190 - like: color.like, 191 - 192 - contrast_25: color.gray_975, 193 - contrast_50: color.gray_950, 194 - contrast_100: color.gray_900, 195 - contrast_200: color.gray_800, 196 - contrast_300: color.gray_700, 197 - contrast_400: color.gray_600, 198 - contrast_500: color.gray_500, 199 - contrast_600: color.gray_400, 200 - contrast_700: color.gray_300, 201 - contrast_800: color.gray_200, 202 - contrast_900: color.gray_100, 203 - contrast_950: color.gray_50, 204 - contrast_975: color.gray_25, 205 - 206 - primary_25: color.primary_975, 207 - primary_50: color.primary_950, 208 - primary_100: color.primary_900, 209 - primary_200: color.primary_800, 210 - primary_300: color.primary_700, 211 - primary_400: color.primary_600, 212 - primary_500: color.primary_500, 213 - primary_600: color.primary_400, 214 - primary_700: color.primary_300, 215 - primary_800: color.primary_200, 216 - primary_900: color.primary_100, 217 - primary_950: color.primary_50, 218 - primary_975: color.primary_25, 219 - 220 - positive_25: color.green_975, 221 - positive_50: color.green_950, 222 - positive_100: color.green_900, 223 - positive_200: color.green_800, 224 - positive_300: color.green_700, 225 - positive_400: color.green_600, 226 - positive_500: color.green_500, 227 - positive_600: color.green_400, 228 - positive_700: color.green_300, 229 - positive_800: color.green_200, 230 - positive_900: color.green_100, 231 - positive_950: color.green_50, 232 - positive_975: color.green_25, 233 - 234 - negative_25: color.red_975, 235 - negative_50: color.red_950, 236 - negative_100: color.red_900, 237 - negative_200: color.red_800, 238 - negative_300: color.red_700, 239 - negative_400: color.red_600, 240 - negative_500: color.red_500, 241 - negative_600: color.red_400, 242 - negative_700: color.red_300, 243 - negative_800: color.red_200, 244 - negative_900: color.red_100, 245 - negative_950: color.red_50, 246 - negative_975: color.red_25, 247 - } as const 248 - 249 - const dimPalette: Palette = { 250 - ...darkPalette, 251 - black: `hsl(${hues.primary}, 28%, ${dimScale[0]}%)`, 252 - like: color.like, 171 + positive_25: '#ECFEF5', 172 + positive_50: '#D8FDEB', 173 + positive_100: '#A8FAD1', 174 + positive_200: '#6FF6B3', 175 + positive_300: '#31F291', 176 + positive_400: '#0EDD75', 177 + positive_500: '#0AC266', 178 + positive_600: '#049F52', 179 + positive_700: '#038142', 180 + positive_800: '#056636', 181 + positive_900: '#04522B', 182 + positive_950: '#053D21', 183 + positive_975: '#052917', 253 184 254 - contrast_25: `hsl(${hues.primary}, 28%, ${dimScale[1]}%)`, 255 - contrast_50: `hsl(${hues.primary}, 28%, ${dimScale[2]}%)`, 256 - contrast_100: `hsl(${hues.primary}, 28%, ${dimScale[3]}%)`, 257 - contrast_200: `hsl(${hues.primary}, 28%, ${dimScale[4]}%)`, 258 - contrast_300: `hsl(${hues.primary}, 24%, ${dimScale[5]}%)`, 259 - contrast_400: `hsl(${hues.primary}, 24%, ${dimScale[6]}%)`, 260 - contrast_500: `hsl(${hues.primary}, 20%, ${dimScale[7]}%)`, 261 - contrast_600: `hsl(${hues.primary}, 20%, ${dimScale[8]}%)`, 262 - contrast_700: `hsl(${hues.primary}, 20%, ${dimScale[9]}%)`, 263 - contrast_800: `hsl(${hues.primary}, 20%, ${dimScale[10]}%)`, 264 - contrast_900: `hsl(${hues.primary}, 20%, ${dimScale[11]}%)`, 265 - contrast_950: `hsl(${hues.primary}, 20%, ${dimScale[12]}%)`, 266 - contrast_975: `hsl(${hues.primary}, 20%, ${dimScale[13]}%)`, 185 + negative_25: '#FFF5F7', 186 + negative_50: '#FEEBEF', 187 + negative_100: '#FDD8E1', 188 + negative_200: '#FCC0CE', 189 + negative_300: '#F99AB0', 190 + negative_400: '#F76486', 191 + negative_500: '#EB2452', 192 + negative_600: '#D81341', 193 + negative_700: '#BA1239', 194 + negative_800: '#910D2C', 195 + negative_900: '#6F0B22', 196 + negative_950: '#500B1C', 197 + negative_975: '#3E0915', 198 + } 267 199 268 - primary_25: `hsl(290, 15%, ${dimScale[1]}%)`, 269 - primary_50: `hsl(290, 18%, ${dimScale[2]}%)`, 270 - primary_100: `hsl(290, 22%, ${dimScale[3]}%)`, 271 - primary_200: `hsl(290, 25%, ${dimScale[4]}%)`, 272 - primary_300: `hsl(290, 28%, ${dimScale[5]}%)`, 273 - primary_400: `hsl(290, 32%, ${dimScale[6]}%)`, 274 - primary_500: `hsl(290, 35%, ${dimScale[7]}%)`, 275 - primary_600: `hsl(290, 38%, ${dimScale[8]}%)`, 276 - primary_700: `hsl(290, 42%, ${dimScale[9]}%)`, 277 - primary_800: `hsl(290, 45%, ${dimScale[10]}%)`, 278 - primary_900: `hsl(290, 48%, ${dimScale[11]}%)`, 279 - primary_950: `hsl(290, 50%, ${dimScale[12]}%)`, 280 - primary_975: `hsl(290, 55%, ${dimScale[13]}%)`, 200 + export function invertPalette(palette: Palette) { 201 + return { 202 + white: palette.white, 203 + black: palette.black, 204 + like: palette.like, 281 205 282 - positive_25: `hsl(${hues.positive}, 50%, ${dimScale[1]}%)`, 283 - positive_50: `hsl(${hues.positive}, 60%, ${dimScale[2]}%)`, 284 - positive_100: `hsl(${hues.positive}, 70%, ${dimScale[3]}%)`, 285 - positive_200: `hsl(${hues.positive}, 82%, ${dimScale[4]}%)`, 286 - positive_300: `hsl(${hues.positive}, 82%, ${dimScale[5]}%)`, 287 - positive_400: `hsl(${hues.positive}, 82%, ${dimScale[6]}%)`, 288 - positive_500: `hsl(${hues.positive}, 82%, ${dimScale[7]}%)`, 289 - positive_600: `hsl(${hues.positive}, 82%, ${dimScale[8]}%)`, 290 - positive_700: `hsl(${hues.positive}, 82%, ${dimScale[9]}%)`, 291 - positive_800: `hsl(${hues.positive}, 82%, ${dimScale[10]}%)`, 292 - positive_900: `hsl(${hues.positive}, 82%, ${dimScale[11]}%)`, 293 - positive_950: `hsl(${hues.positive}, 82%, ${dimScale[12]}%)`, 294 - positive_975: `hsl(${hues.positive}, 82%, ${dimScale[13]}%)`, 206 + contrast_0: palette.contrast_1000, 207 + contrast_25: palette.contrast_975, 208 + contrast_50: palette.contrast_950, 209 + contrast_100: palette.contrast_900, 210 + contrast_200: palette.contrast_800, 211 + contrast_300: palette.contrast_700, 212 + contrast_400: palette.contrast_600, 213 + contrast_500: palette.contrast_500, 214 + contrast_600: palette.contrast_400, 215 + contrast_700: palette.contrast_300, 216 + contrast_800: palette.contrast_200, 217 + contrast_900: palette.contrast_100, 218 + contrast_950: palette.contrast_50, 219 + contrast_975: palette.contrast_25, 220 + contrast_1000: palette.contrast_0, 295 221 296 - negative_25: `hsl(${hues.negative}, 70%, ${dimScale[1]}%)`, 297 - negative_50: `hsl(${hues.negative}, 80%, ${dimScale[2]}%)`, 298 - negative_100: `hsl(${hues.negative}, 84%, ${dimScale[3]}%)`, 299 - negative_200: `hsl(${hues.negative}, 88%, ${dimScale[4]}%)`, 300 - negative_300: `hsl(${hues.negative}, 91%, ${dimScale[5]}%)`, 301 - negative_400: `hsl(${hues.negative}, 91%, ${dimScale[6]}%)`, 302 - negative_500: `hsl(${hues.negative}, 91%, ${dimScale[7]}%)`, 303 - negative_600: `hsl(${hues.negative}, 91%, ${dimScale[8]}%)`, 304 - negative_700: `hsl(${hues.negative}, 91%, ${dimScale[9]}%)`, 305 - negative_800: `hsl(${hues.negative}, 91%, ${dimScale[10]}%)`, 306 - negative_900: `hsl(${hues.negative}, 91%, ${dimScale[11]}%)`, 307 - negative_950: `hsl(${hues.negative}, 91%, ${dimScale[12]}%)`, 308 - negative_975: `hsl(${hues.negative}, 91%, ${dimScale[13]}%)`, 309 - } as const 222 + primary_25: palette.primary_975, 223 + primary_50: palette.primary_950, 224 + primary_100: palette.primary_900, 225 + primary_200: palette.primary_800, 226 + primary_300: palette.primary_700, 227 + primary_400: palette.primary_600, 228 + primary_500: palette.primary_500, 229 + primary_600: palette.primary_400, 230 + primary_700: palette.primary_300, 231 + primary_800: palette.primary_200, 232 + primary_900: palette.primary_100, 233 + primary_950: palette.primary_50, 234 + primary_975: palette.primary_25, 310 235 311 - const light: Theme = { 312 - scheme: 'light', 313 - name: 'light', 314 - palette: lightPalette, 315 - atoms: { 316 - text: { 317 - color: lightPalette.black, 318 - }, 319 - text_contrast_low: { 320 - color: lightPalette.contrast_400, 321 - }, 322 - text_contrast_medium: { 323 - color: lightPalette.contrast_700, 324 - }, 325 - text_contrast_high: { 326 - color: lightPalette.contrast_900, 327 - }, 328 - text_inverted: { 329 - color: lightPalette.white, 330 - }, 331 - bg: { 332 - backgroundColor: lightPalette.white, 333 - }, 334 - bg_contrast_25: { 335 - backgroundColor: lightPalette.contrast_25, 336 - }, 337 - bg_contrast_50: { 338 - backgroundColor: lightPalette.contrast_50, 339 - }, 340 - bg_contrast_100: { 341 - backgroundColor: lightPalette.contrast_100, 342 - }, 343 - bg_contrast_200: { 344 - backgroundColor: lightPalette.contrast_200, 345 - }, 346 - bg_contrast_300: { 347 - backgroundColor: lightPalette.contrast_300, 348 - }, 349 - bg_contrast_400: { 350 - backgroundColor: lightPalette.contrast_400, 351 - }, 352 - bg_contrast_500: { 353 - backgroundColor: lightPalette.contrast_500, 354 - }, 355 - bg_contrast_600: { 356 - backgroundColor: lightPalette.contrast_600, 357 - }, 358 - bg_contrast_700: { 359 - backgroundColor: lightPalette.contrast_700, 360 - }, 361 - bg_contrast_800: { 362 - backgroundColor: lightPalette.contrast_800, 363 - }, 364 - bg_contrast_900: { 365 - backgroundColor: lightPalette.contrast_900, 366 - }, 367 - bg_contrast_950: { 368 - backgroundColor: lightPalette.contrast_950, 369 - }, 370 - bg_contrast_975: { 371 - backgroundColor: lightPalette.contrast_975, 372 - }, 373 - border_contrast_low: { 374 - borderColor: lightPalette.contrast_100, 375 - }, 376 - border_contrast_medium: { 377 - borderColor: lightPalette.contrast_200, 378 - }, 379 - border_contrast_high: { 380 - borderColor: lightPalette.contrast_300, 381 - }, 382 - shadow_sm: { 383 - ...atoms.shadow_sm, 384 - shadowColor: lightPalette.black, 385 - }, 386 - shadow_md: { 387 - ...atoms.shadow_md, 388 - shadowColor: lightPalette.black, 389 - }, 390 - shadow_lg: { 391 - ...atoms.shadow_lg, 392 - shadowColor: lightPalette.black, 393 - }, 394 - }, 395 - } 236 + positive_25: palette.positive_975, 237 + positive_50: palette.positive_950, 238 + positive_100: palette.positive_900, 239 + positive_200: palette.positive_800, 240 + positive_300: palette.positive_700, 241 + positive_400: palette.positive_600, 242 + positive_500: palette.positive_500, 243 + positive_600: palette.positive_400, 244 + positive_700: palette.positive_300, 245 + positive_800: palette.positive_200, 246 + positive_900: palette.positive_100, 247 + positive_950: palette.positive_50, 248 + positive_975: palette.positive_25, 396 249 397 - const dark: Theme = { 398 - scheme: 'dark', 399 - name: 'dark', 400 - palette: darkPalette, 401 - atoms: { 402 - text: { 403 - color: darkPalette.white, 404 - }, 405 - text_contrast_low: { 406 - color: darkPalette.contrast_400, 407 - }, 408 - text_contrast_medium: { 409 - color: darkPalette.contrast_600, 410 - }, 411 - text_contrast_high: { 412 - color: darkPalette.contrast_900, 413 - }, 414 - text_inverted: { 415 - color: darkPalette.black, 416 - }, 417 - bg: { 418 - backgroundColor: darkPalette.black, 419 - }, 420 - bg_contrast_25: { 421 - backgroundColor: darkPalette.contrast_25, 422 - }, 423 - bg_contrast_50: { 424 - backgroundColor: darkPalette.contrast_50, 425 - }, 426 - bg_contrast_100: { 427 - backgroundColor: darkPalette.contrast_100, 428 - }, 429 - bg_contrast_200: { 430 - backgroundColor: darkPalette.contrast_200, 431 - }, 432 - bg_contrast_300: { 433 - backgroundColor: darkPalette.contrast_300, 434 - }, 435 - bg_contrast_400: { 436 - backgroundColor: darkPalette.contrast_400, 437 - }, 438 - bg_contrast_500: { 439 - backgroundColor: darkPalette.contrast_500, 440 - }, 441 - bg_contrast_600: { 442 - backgroundColor: darkPalette.contrast_600, 443 - }, 444 - bg_contrast_700: { 445 - backgroundColor: darkPalette.contrast_700, 446 - }, 447 - bg_contrast_800: { 448 - backgroundColor: darkPalette.contrast_800, 449 - }, 450 - bg_contrast_900: { 451 - backgroundColor: darkPalette.contrast_900, 452 - }, 453 - bg_contrast_950: { 454 - backgroundColor: darkPalette.contrast_950, 455 - }, 456 - bg_contrast_975: { 457 - backgroundColor: darkPalette.contrast_975, 458 - }, 459 - border_contrast_low: { 460 - borderColor: darkPalette.contrast_100, 461 - }, 462 - border_contrast_medium: { 463 - borderColor: darkPalette.contrast_200, 464 - }, 465 - border_contrast_high: { 466 - borderColor: darkPalette.contrast_300, 467 - }, 468 - shadow_sm: { 469 - ...atoms.shadow_sm, 470 - shadowOpacity: 0.7, 471 - shadowColor: color.trueBlack, 472 - }, 473 - shadow_md: { 474 - ...atoms.shadow_md, 475 - shadowOpacity: 0.7, 476 - shadowColor: color.trueBlack, 477 - }, 478 - shadow_lg: { 479 - ...atoms.shadow_lg, 480 - shadowOpacity: 0.7, 481 - shadowColor: color.trueBlack, 482 - }, 483 - }, 250 + negative_25: palette.negative_975, 251 + negative_50: palette.negative_950, 252 + negative_100: palette.negative_900, 253 + negative_200: palette.negative_800, 254 + negative_300: palette.negative_700, 255 + negative_400: palette.negative_600, 256 + negative_500: palette.negative_500, 257 + negative_600: palette.negative_400, 258 + negative_700: palette.negative_300, 259 + negative_800: palette.negative_200, 260 + negative_900: palette.negative_100, 261 + negative_950: palette.negative_50, 262 + negative_975: palette.negative_25, 484 263 } 264 + } 485 265 486 - const dim: Theme = { 487 - ...dark, 488 - scheme: 'dark', 489 - name: 'dim', 490 - palette: dimPalette, 491 - atoms: { 492 - ...dark.atoms, 493 - text: { 494 - color: dimPalette.white, 495 - }, 496 - text_contrast_low: { 497 - color: dimPalette.contrast_400, 498 - }, 499 - text_contrast_medium: { 500 - color: dimPalette.contrast_600, 501 - }, 502 - text_contrast_high: { 503 - color: dimPalette.contrast_900, 504 - }, 505 - text_inverted: { 506 - color: dimPalette.black, 507 - }, 508 - bg: { 509 - backgroundColor: dimPalette.black, 510 - }, 511 - bg_contrast_25: { 512 - backgroundColor: dimPalette.contrast_25, 513 - }, 514 - bg_contrast_50: { 515 - backgroundColor: dimPalette.contrast_50, 516 - }, 517 - bg_contrast_100: { 518 - backgroundColor: dimPalette.contrast_100, 519 - }, 520 - bg_contrast_200: { 521 - backgroundColor: dimPalette.contrast_200, 522 - }, 523 - bg_contrast_300: { 524 - backgroundColor: dimPalette.contrast_300, 525 - }, 526 - bg_contrast_400: { 527 - backgroundColor: dimPalette.contrast_400, 528 - }, 529 - bg_contrast_500: { 530 - backgroundColor: dimPalette.contrast_500, 531 - }, 532 - bg_contrast_600: { 533 - backgroundColor: dimPalette.contrast_600, 534 - }, 535 - bg_contrast_700: { 536 - backgroundColor: dimPalette.contrast_700, 537 - }, 538 - bg_contrast_800: { 539 - backgroundColor: dimPalette.contrast_800, 540 - }, 541 - bg_contrast_900: { 542 - backgroundColor: dimPalette.contrast_900, 543 - }, 544 - bg_contrast_950: { 545 - backgroundColor: dimPalette.contrast_950, 546 - }, 547 - bg_contrast_975: { 548 - backgroundColor: dimPalette.contrast_975, 549 - }, 550 - border_contrast_low: { 551 - borderColor: dimPalette.contrast_100, 552 - }, 553 - border_contrast_medium: { 554 - borderColor: dimPalette.contrast_200, 555 - }, 556 - border_contrast_high: { 557 - borderColor: dimPalette.contrast_300, 558 - }, 559 - shadow_sm: { 560 - ...atoms.shadow_sm, 561 - shadowOpacity: 0.7, 562 - shadowColor: `hsl(${hues.primary}, 28%, 6%)`, 563 - }, 564 - shadow_md: { 565 - ...atoms.shadow_md, 566 - shadowOpacity: 0.7, 567 - shadowColor: `hsl(${hues.primary}, 28%, 6%)`, 568 - }, 569 - shadow_lg: { 570 - ...atoms.shadow_lg, 571 - shadowOpacity: 0.7, 572 - shadowColor: `hsl(${hues.primary}, 28%, 6%)`, 573 - }, 574 - }, 575 - } 266 + const DEFAULT_THEMES = createThemes({ 267 + defaultPalette: DEFAULT_PALETTE, 268 + subduedPalette: DEFAULT_SUBDUED_PALETTE, 269 + }) 576 270 577 - return { 578 - lightPalette, 579 - darkPalette, 580 - dimPalette, 581 - light, 582 - dark, 583 - dim, 584 - } 271 + export const themes = { 272 + lightPalette: DEFAULT_THEMES.light.palette, 273 + darkPalette: DEFAULT_THEMES.dark.palette, 274 + dimPalette: DEFAULT_THEMES.dim.palette, 275 + light: DEFAULT_THEMES.light, 276 + dark: DEFAULT_THEMES.dark, 277 + dim: DEFAULT_THEMES.dim, 585 278 } 279 + 280 + /** 281 + * @deprecated use ALF and access palette from `useTheme()` 282 + */ 283 + export const lightPalette = DEFAULT_THEMES.light.palette 284 + /** 285 + * @deprecated use ALF and access palette from `useTheme()` 286 + */ 287 + export const darkPalette = DEFAULT_THEMES.dark.palette 288 + /** 289 + * @deprecated use ALF and access palette from `useTheme()` 290 + */ 291 + export const dimPalette = DEFAULT_THEMES.dim.palette 292 + /** 293 + * @deprecated use ALF and access theme from `useTheme()` 294 + */ 295 + export const light = DEFAULT_THEMES.light 296 + /** 297 + * @deprecated use ALF and access theme from `useTheme()` 298 + */ 299 + export const dark = DEFAULT_THEMES.dark 300 + /** 301 + * @deprecated use ALF and access theme from `useTheme()` 302 + */ 303 + export const dim = DEFAULT_THEMES.dim
+4 -55
src/alf/tokens.ts
··· 1 - import {isAndroid} from '#/platform/detection' 1 + import {tokens} from '@bsky.app/alf' 2 2 3 - export const TRACKING = isAndroid ? 0.1 : 0 3 + export * from '@bsky.app/alf/dist/tokens' 4 4 5 5 export const color = { 6 - temp_purple: 'rgb(105 0 255)', 7 - temp_purple_dark: 'rgb(83 0 202)', 8 - } as const 9 - 10 - export const space = { 11 - _2xs: 2, 12 - xs: 4, 13 - sm: 8, 14 - md: 12, 15 - lg: 16, 16 - xl: 20, 17 - _2xl: 24, 18 - _3xl: 28, 19 - _4xl: 32, 20 - _5xl: 40, 21 - } as const 22 - 23 - export const fontSize = { 24 - _2xs: 10, 25 - xs: 12, 26 - sm: 14, 27 - md: 16, 28 - lg: 18, 29 - xl: 20, 30 - _2xl: 22, 31 - _3xl: 26, 32 - _4xl: 32, 33 - _5xl: 40, 34 - } as const 35 - 36 - export const lineHeight = { 37 - none: 1, 38 - normal: 1.5, 39 - relaxed: 1.625, 40 - } as const 41 - 42 - export const borderRadius = { 43 - _2xs: 2, 44 - xs: 4, 45 - sm: 8, 46 - md: 12, 47 - lg: 16, 48 - full: 999, 49 - } as const 50 - 51 - /** 52 - * These correspond to Inter font files we actually load. 53 - */ 54 - export const fontWeight = { 55 - normal: '400', 56 - medium: '500', 57 - bold: '600', 58 - heavy: '800', 6 + temp_purple: tokens.labelerColor.purple, 7 + temp_purple_dark: tokens.labelerColor.purple_dark, 59 8 } as const 60 9 61 10 export const gradients = {
-164
src/alf/types.ts
··· 1 - import {type StyleProp, type TextStyle, type ViewStyle} from 'react-native' 2 - 3 - export type TextStyleProp = { 4 - style?: StyleProp<TextStyle> 5 - } 6 - 7 - export type ViewStyleProp = { 8 - style?: StyleProp<ViewStyle> 9 - } 10 - 11 - export type ThemeName = 'light' | 'dim' | 'dark' 12 - export type Palette = { 13 - white: string 14 - black: string 15 - like: string 16 - 17 - contrast_25: string 18 - contrast_50: string 19 - contrast_100: string 20 - contrast_200: string 21 - contrast_300: string 22 - contrast_400: string 23 - contrast_500: string 24 - contrast_600: string 25 - contrast_700: string 26 - contrast_800: string 27 - contrast_900: string 28 - contrast_950: string 29 - contrast_975: string 30 - 31 - primary_25: string 32 - primary_50: string 33 - primary_100: string 34 - primary_200: string 35 - primary_300: string 36 - primary_400: string 37 - primary_500: string 38 - primary_600: string 39 - primary_700: string 40 - primary_800: string 41 - primary_900: string 42 - primary_950: string 43 - primary_975: string 44 - 45 - positive_25: string 46 - positive_50: string 47 - positive_100: string 48 - positive_200: string 49 - positive_300: string 50 - positive_400: string 51 - positive_500: string 52 - positive_600: string 53 - positive_700: string 54 - positive_800: string 55 - positive_900: string 56 - positive_950: string 57 - positive_975: string 58 - 59 - negative_25: string 60 - negative_50: string 61 - negative_100: string 62 - negative_200: string 63 - negative_300: string 64 - negative_400: string 65 - negative_500: string 66 - negative_600: string 67 - negative_700: string 68 - negative_800: string 69 - negative_900: string 70 - negative_950: string 71 - negative_975: string 72 - } 73 - export type ThemedAtoms = { 74 - text: { 75 - color: string 76 - } 77 - text_contrast_low: { 78 - color: string 79 - } 80 - text_contrast_medium: { 81 - color: string 82 - } 83 - text_contrast_high: { 84 - color: string 85 - } 86 - text_inverted: { 87 - color: string 88 - } 89 - bg: { 90 - backgroundColor: string 91 - } 92 - bg_contrast_25: { 93 - backgroundColor: string 94 - } 95 - bg_contrast_50: { 96 - backgroundColor: string 97 - } 98 - bg_contrast_100: { 99 - backgroundColor: string 100 - } 101 - bg_contrast_200: { 102 - backgroundColor: string 103 - } 104 - bg_contrast_300: { 105 - backgroundColor: string 106 - } 107 - bg_contrast_400: { 108 - backgroundColor: string 109 - } 110 - bg_contrast_500: { 111 - backgroundColor: string 112 - } 113 - bg_contrast_600: { 114 - backgroundColor: string 115 - } 116 - bg_contrast_700: { 117 - backgroundColor: string 118 - } 119 - bg_contrast_800: { 120 - backgroundColor: string 121 - } 122 - bg_contrast_900: { 123 - backgroundColor: string 124 - } 125 - bg_contrast_950: { 126 - backgroundColor: string 127 - } 128 - bg_contrast_975: { 129 - backgroundColor: string 130 - } 131 - border_contrast_low: { 132 - borderColor: string 133 - } 134 - border_contrast_medium: { 135 - borderColor: string 136 - } 137 - border_contrast_high: { 138 - borderColor: string 139 - } 140 - shadow_sm: { 141 - shadowRadius: number 142 - shadowOpacity: number 143 - elevation: number 144 - shadowColor: string 145 - } 146 - shadow_md: { 147 - shadowRadius: number 148 - shadowOpacity: number 149 - elevation: number 150 - shadowColor: string 151 - } 152 - shadow_lg: { 153 - shadowRadius: number 154 - shadowOpacity: number 155 - elevation: number 156 - shadowColor: string 157 - } 158 - } 159 - export type Theme = { 160 - scheme: 'light' | 'dark' // for library support 161 - name: ThemeName 162 - palette: Palette 163 - atoms: ThemedAtoms 164 - }
-15
src/alf/typography.tsx
··· 9 9 import {type Alf, applyFonts, atoms, flatten} from '#/alf' 10 10 11 11 /** 12 - * Util to calculate lineHeight from a text size atom and a leading atom 13 - * 14 - * Example: 15 - * `leading(atoms.text_md, atoms.leading_normal)` // => 24 16 - */ 17 - export function leading< 18 - Size extends {fontSize?: number}, 19 - Leading extends {lineHeight?: number}, 20 - >(textSize: Size, leading: Leading) { 21 - const size = textSize?.fontSize || atoms.text_md.fontSize 22 - const lineHeight = leading?.lineHeight || atoms.leading_normal.lineHeight 23 - return Math.round(size * lineHeight) 24 - } 25 - 26 - /** 27 12 * Ensures that `lineHeight` defaults to a relative value of `1`, or applies 28 13 * other relative leading atoms. 29 14 *
-8
src/alf/util/__tests__/colors.test.ts
··· 1 1 import {jest} from '@jest/globals' 2 2 3 - import {logger} from '#/logger' 4 3 import {transparentifyColor} from '../colorGeneration' 5 - 6 - jest.mock('#/logger', () => ({ 7 - logger: {warn: jest.fn()}, 8 - })) 9 4 10 5 describe('transparentifyColor', () => { 11 6 beforeEach(() => { ··· 41 36 const unsupported = 'blue' 42 37 const result = transparentifyColor(unsupported, 0.5) 43 38 expect(result).toBe(unsupported) 44 - expect(logger.warn).toHaveBeenCalledWith( 45 - `Could not make '${unsupported}' transparent`, 46 - ) 47 39 }) 48 40 })
+3 -44
src/alf/util/colorGeneration.ts
··· 1 - import {logger} from '#/logger' 1 + import {utils} from '@bsky.app/alf' 2 2 3 3 export const BLUE_HUE = 211 4 - export const RED_HUE = 346 5 - export const GREEN_HUE = 152 6 4 7 5 /** 8 - * Smooth progression of lightness "stops" for generating HSL colors. 6 + * @deprecated use `utils.alpha` from `@bsky.app/alf` instead 9 7 */ 10 - export const COLOR_STOPS = [ 11 - 0, 0.05, 0.1, 0.15, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.85, 0.9, 0.95, 1, 12 - ] 13 - 14 - export function generateScale(start: number, end: number) { 15 - const range = end - start 16 - return COLOR_STOPS.map(stop => { 17 - return start + range * stop 18 - }) 19 - } 20 - 21 - export const defaultScale = generateScale(6, 100) 22 - // dim shifted 6% lighter 23 - export const dimScale = generateScale(12, 100) 24 - 25 - export function transparentifyColor(color: string, alpha: number) { 26 - if (color.startsWith('hsl(')) { 27 - return 'hsla(' + color.slice('hsl('.length, -1) + `, ${alpha})` 28 - } else if (color.startsWith('rgb(')) { 29 - return 'rgba(' + color.slice('rgb('.length, -1) + `, ${alpha})` 30 - } else if (color.startsWith('#')) { 31 - if (color.length === 7) { 32 - const alphaHex = Math.round(alpha * 255).toString(16) 33 - // Per MDN: If there is only one number, it is duplicated: e means ee 34 - // https://developer.mozilla.org/en-US/docs/Web/CSS/hex-color 35 - return color.slice(0, 7) + alphaHex.padStart(2, alphaHex) 36 - } else if (color.length === 4) { 37 - // convert to 6-digit hex before adding alpha 38 - const [r, g, b] = color.slice(1).split('') 39 - const alphaHex = Math.round(alpha * 255).toString(16) 40 - return `#${r.repeat(2)}${g.repeat(2)}${b.repeat(2)}${alphaHex.padStart( 41 - 2, 42 - alphaHex, 43 - )}` 44 - } 45 - } else { 46 - logger.warn(`Could not make '${color}' transparent`) 47 - } 48 - return color 49 - } 8 + export const transparentifyColor = utils.alpha
+1 -62
src/alf/util/platform.ts
··· 1 - import {Platform} from 'react-native' 2 - 3 - import {isAndroid, isIOS, isNative, isWeb} from '#/platform/detection' 4 - 5 - /** 6 - * Identity function on web. Returns nothing on other platforms. 7 - * 8 - * Note: Platform splitting does not tree-shake away the other platforms, 9 - * so don't do stuff like e.g. rely on platform-specific imports. Use 10 - * platform-split files instead. 11 - */ 12 - export function web(value: any) { 13 - if (isWeb) { 14 - return value 15 - } 16 - } 17 - 18 - /** 19 - * Identity function on iOS. Returns nothing on other platforms. 20 - * 21 - * Note: Platform splitting does not tree-shake away the other platforms, 22 - * so don't do stuff like e.g. rely on platform-specific imports. Use 23 - * platform-split files instead. 24 - */ 25 - export function ios(value: any) { 26 - if (isIOS) { 27 - return value 28 - } 29 - } 30 - 31 - /** 32 - * Identity function on Android. Returns nothing on other platforms.. 33 - * 34 - * Note: Platform splitting does not tree-shake away the other platforms, 35 - * so don't do stuff like e.g. rely on platform-specific imports. Use 36 - * platform-split files instead. 37 - */ 38 - export function android(value: any) { 39 - if (isAndroid) { 40 - return value 41 - } 42 - } 43 - 44 - /** 45 - * Identity function on iOS and Android. Returns nothing on web. 46 - * 47 - * Note: Platform splitting does not tree-shake away the other platforms, 48 - * so don't do stuff like e.g. rely on platform-specific imports. Use 49 - * platform-split files instead. 50 - */ 51 - export function native(value: any) { 52 - if (isNative) { 53 - return value 54 - } 55 - } 56 - 57 - /** 58 - * Note: Platform splitting does not tree-shake away the other platforms, 59 - * so don't do stuff like e.g. rely on platform-specific imports. Use 60 - * platform-split files instead. 61 - */ 62 - export const platform = Platform.select 1 + export {android, ios, native, platform, web} from '@bsky.app/alf'
+1 -1
src/alf/util/systemUI.ts
··· 1 1 import * as SystemUI from 'expo-system-ui' 2 + import {type Theme} from '@bsky.app/alf' 2 3 3 4 import {isAndroid} from '#/platform/detection' 4 - import {type Theme} from '../types' 5 5 6 6 export function setSystemUITheme(themeType: 'theme' | 'lightbox', t: Theme) { 7 7 if (isAndroid) {
+2 -13
src/alf/util/themeSelector.ts
··· 1 - import {type ThemeName} from '#/alf/types' 1 + import {utils} from '@bsky.app/alf' 2 2 3 - export function select<T>(name: ThemeName, options: Record<ThemeName, T>) { 4 - switch (name) { 5 - case 'light': 6 - return options.light 7 - case 'dark': 8 - return options.dark || options.dim 9 - case 'dim': 10 - return options.dim || options.dark 11 - default: 12 - throw new Error(`select(theme, options) received unknown theme ${name}`) 13 - } 14 - } 3 + export const select = utils.select
+1 -1
src/alf/util/useColorModeTheme.ts
··· 1 1 import React from 'react' 2 2 import {type ColorSchemeName, useColorScheme} from 'react-native' 3 + import {type ThemeName} from '@bsky.app/alf' 3 4 4 5 import {isWeb} from '#/platform/detection' 5 6 import {useThemePrefs} from '#/state/shell' 6 7 import {dark, dim, light} from '#/alf/themes' 7 - import {type ThemeName} from '#/alf/types' 8 8 9 9 export function useColorModeTheme(): ThemeName { 10 10 const theme = useThemeName()
+2 -2
src/components/AccountList.tsx
··· 77 77 ]}> 78 78 <Text 79 79 style={[ 80 - a.font_bold, 80 + a.font_semi_bold, 81 81 a.flex_1, 82 82 a.flex_row, 83 83 a.py_sm, ··· 151 151 <View style={[a.flex_row, a.align_center, a.gap_xs]}> 152 152 <Text 153 153 emoji 154 - style={[a.font_bold, a.leading_tight]} 154 + style={[a.font_semi_bold, a.leading_tight]} 155 155 numberOfLines={1}> 156 156 {sanitizeDisplayName( 157 157 profile?.displayName || profile?.handle || account.handle,
+2 -3
src/components/BlockedGeoOverlay.tsx
··· 96 96 <Mark fill={t.palette.primary_600} width={14} /> 97 97 <Text 98 98 style={[ 99 - a.font_bold, 99 + a.font_semi_bold, 100 100 { 101 101 color: t.palette.primary_600, 102 102 }, ··· 121 121 </View> 122 122 123 123 <View style={[a.mt_xl, a.align_start]}> 124 - <Text 125 - style={[a.text_lg, a.font_heavy, a.leading_snug, a.pb_xs]}> 124 + <Text style={[a.text_lg, a.font_bold, a.leading_snug, a.pb_xs]}> 126 125 <Trans>Not in Mississippi?</Trans> 127 126 </Text> 128 127 <Text
+5 -13
src/components/Button.tsx
··· 240 240 } 241 241 } else if (color === 'secondary') { 242 242 if (!disabled) { 243 - baseStyles.push(t.atoms.bg_contrast_25) 243 + baseStyles.push(t.atoms.bg_contrast_50) 244 244 hoverStyles.push(t.atoms.bg_contrast_100) 245 245 } else { 246 246 baseStyles.push(t.atoms.bg_contrast_50) ··· 289 289 }) 290 290 } else { 291 291 baseStyles.push({ 292 - backgroundColor: select(t.name, { 293 - light: t.palette.primary_25, 294 - dim: t.palette.primary_50, 295 - dark: t.palette.primary_50, 296 - }), 292 + backgroundColor: t.palette.primary_50, 297 293 }) 298 294 } 299 295 } else if (color === 'negative_subtle') { ··· 314 310 }) 315 311 } else { 316 312 baseStyles.push({ 317 - backgroundColor: select(t.name, { 318 - light: t.palette.negative_25, 319 - dim: t.palette.negative_50, 320 - dark: t.palette.negative_50, 321 - }), 313 + backgroundColor: t.palette.negative_50, 322 314 }) 323 315 } 324 316 } ··· 372 364 if (!disabled) { 373 365 baseStyles.push(t.atoms.bg) 374 366 hoverStyles.push({ 375 - backgroundColor: t.palette.contrast_25, 367 + backgroundColor: t.palette.contrast_50, 376 368 }) 377 369 } 378 370 } ··· 396 388 if (!disabled) { 397 389 baseStyles.push(t.atoms.bg) 398 390 hoverStyles.push({ 399 - backgroundColor: t.palette.contrast_25, 391 + backgroundColor: t.palette.contrast_50, 400 392 }) 401 393 } 402 394 }
+6 -2
src/components/ContextMenu/index.tsx
··· 796 796 style={[ 797 797 a.flex_1, 798 798 a.text_md, 799 - a.font_bold, 799 + a.font_semi_bold, 800 800 t.atoms.text_contrast_high, 801 801 {paddingTop: 3}, 802 802 style, ··· 855 855 const t = useTheme() 856 856 return ( 857 857 <Text 858 - style={[a.font_bold, t.atoms.text_contrast_medium, {marginBottom: -8}]}> 858 + style={[ 859 + a.font_semi_bold, 860 + t.atoms.text_contrast_medium, 861 + {marginBottom: -8}, 862 + ]}> 859 863 {children} 860 864 </Text> 861 865 )
+1 -1
src/components/Dialog/shared.tsx
··· 62 62 style?: StyleProp<TextStyle> 63 63 }) { 64 64 return ( 65 - <Text style={[a.text_lg, a.text_center, a.font_heavy, style]}> 65 + <Text style={[a.text_lg, a.text_center, a.font_bold, style]}> 66 66 {children} 67 67 </Text> 68 68 )
+1 -1
src/components/Error.tsx
··· 40 40 ]} 41 41 sideBorders={sideBorders}> 42 42 <View style={[a.w_full, a.align_center, a.gap_lg]}> 43 - <Text style={[a.font_bold, a.text_3xl]}>{title}</Text> 43 + <Text style={[a.font_semi_bold, a.text_3xl]}>{title}</Text> 44 44 <Text 45 45 style={[ 46 46 a.text_md,
+2 -2
src/components/FeedCard.tsx
··· 128 128 <View style={[a.flex_1]}> 129 129 <Text 130 130 emoji 131 - style={[a.text_md, a.font_bold, a.leading_snug]} 131 + style={[a.text_md, a.font_semi_bold, a.leading_snug]} 132 132 numberOfLines={1}> 133 133 {title} 134 134 </Text> ··· 214 214 export function Likes({count}: {count: number}) { 215 215 const t = useTheme() 216 216 return ( 217 - <Text style={[a.text_sm, t.atoms.text_contrast_medium, a.font_bold]}> 217 + <Text style={[a.text_sm, t.atoms.text_contrast_medium, a.font_semi_bold]}> 218 218 <Trans> 219 219 Liked by <Plural value={count || 0} one="# user" other="# users" /> 220 220 </Trans>
+7 -24
src/components/FeedInterstitials.tsx
··· 376 376 t.atoms.bg_contrast_25, 377 377 ]} 378 378 pointerEvents={isIOS ? 'auto' : 'box-none'}> 379 - <View 380 - style={[ 381 - a.px_lg, 382 - a.pt_md, 383 - a.flex_row, 384 - a.align_center, 385 - a.justify_between, 386 - ]} 387 - pointerEvents={isIOS ? 'auto' : 'box-none'}> 388 - <Text style={[a.text_sm, a.font_bold, t.atoms.text]}> 389 - {isFeedContext ? ( 390 - <Trans>Suggested for you</Trans> 391 - ) : ( 392 - <Trans>Similar accounts</Trans> 393 - )} 394 - </Text> 395 - {!isProfileHeaderContext && ( 396 - <InlineLinkText 397 - label={_(msg`See more suggested profiles on the Explore page`)} 398 - to="/search"> 399 - <Trans>See more</Trans> 400 - </InlineLinkText> 379 + <Text style={[a.text_sm, a.font_semi_bold, t.atoms.text]}> 380 + {isFeedContext ? ( 381 + <Trans>Suggested for you</Trans> 382 + ) : ( 383 + <Trans>Similar accounts</Trans> 401 384 )} 402 - </View> 385 + </Text> 403 386 404 387 {gtMobile ? ( 405 388 <View style={[a.p_lg, a.pt_md]}> ··· 522 505 style={[ 523 506 a.flex_1, 524 507 a.text_lg, 525 - a.font_bold, 508 + a.font_semi_bold, 526 509 t.atoms.text_contrast_medium, 527 510 ]}> 528 511 <Trans>Some other feeds you might like</Trans>
+1 -1
src/components/LabelingServiceCard/index.tsx
··· 45 45 46 46 export function Title({value}: {value: string}) { 47 47 return ( 48 - <Text emoji style={[a.text_md, a.font_bold, a.leading_tight]}> 48 + <Text emoji style={[a.text_md, a.font_semi_bold, a.leading_tight]}> 49 49 {value} 50 50 </Text> 51 51 )
+1 -1
src/components/Layout/Header/index.tsx
··· 181 181 <Text 182 182 style={[ 183 183 a.text_lg, 184 - a.font_heavy, 184 + a.font_bold, 185 185 a.leading_tight, 186 186 isIOS && align === 'platform' && a.text_center, 187 187 gtMobile && a.text_xl,
+2 -2
src/components/ListCard.tsx
··· 127 127 allowOverride={creator && currentAccount?.did === creator.did}> 128 128 <Hider.Mask> 129 129 <Text 130 - style={[a.text_md, a.font_bold, a.leading_snug, a.italic]} 130 + style={[a.text_md, a.font_semi_bold, a.leading_snug, a.italic]} 131 131 numberOfLines={1}> 132 132 <Trans>Hidden list</Trans> 133 133 </Text> ··· 135 135 <Hider.Content> 136 136 <Text 137 137 emoji 138 - style={[a.text_md, a.font_bold, a.leading_snug]} 138 + style={[a.text_md, a.font_semi_bold, a.leading_snug]} 139 139 numberOfLines={1}> 140 140 {title} 141 141 </Text>
+1 -1
src/components/LoggedOutCTA.tsx
··· 50 50 <View style={[a.flex_row, a.align_center, a.flex_1, a.pr_md]}> 51 51 <Logo width={30} style={[a.mr_md]} /> 52 52 <View style={[a.flex_1]}> 53 - <Text style={[a.text_lg, a.font_bold, a.leading_snug]}> 53 + <Text style={[a.text_lg, a.font_semi_bold, a.leading_snug]}> 54 54 <Trans>Join Bluesky</Trans> 55 55 </Text> 56 56 <Text
+2 -2
src/components/Menu/index.tsx
··· 191 191 style={[ 192 192 a.flex_1, 193 193 a.text_md, 194 - a.font_bold, 194 + a.font_semi_bold, 195 195 t.atoms.text_contrast_high, 196 196 {paddingTop: 3}, 197 197 style, ··· 293 293 return ( 294 294 <Text 295 295 style={[ 296 - a.font_bold, 296 + a.font_semi_bold, 297 297 t.atoms.text_contrast_medium, 298 298 {marginBottom: -8}, 299 299 style,
+2 -2
src/components/Menu/index.web.tsx
··· 292 292 <Text 293 293 style={[ 294 294 a.flex_1, 295 - a.font_bold, 295 + a.font_semi_bold, 296 296 t.atoms.text_contrast_high, 297 297 style, 298 298 disabled && t.atoms.text_contrast_low, ··· 372 372 return ( 373 373 <Text 374 374 style={[ 375 - a.font_bold, 375 + a.font_semi_bold, 376 376 a.p_sm, 377 377 t.atoms.text_contrast_low, 378 378 a.leading_snug,
+1 -1
src/components/NewskieDialog.tsx
··· 135 135 style={[a.absolute, a.inset_0]} 136 136 /> 137 137 </View> 138 - <Text style={[a.font_bold, a.text_xl]}> 138 + <Text style={[a.font_semi_bold, a.text_xl]}> 139 139 {isMe ? <Trans>Welcome, friend!</Trans> : <Trans>Say hello!</Trans>} 140 140 </Text> 141 141 </View>
+1 -1
src/components/Pills.tsx
··· 133 133 emoji 134 134 style={[ 135 135 text, 136 - a.font_bold, 136 + a.font_semi_bold, 137 137 a.leading_tight, 138 138 t.atoms.text_contrast_medium, 139 139 {paddingRight: 3},
+1 -1
src/components/PolicyUpdateOverlay/Badge.tsx
··· 25 25 <Logo fill={t.palette.primary_600} width={14} /> 26 26 <Text 27 27 style={[ 28 - a.font_bold, 28 + a.font_semi_bold, 29 29 { 30 30 color: t.palette.primary_600, 31 31 },
+2 -2
src/components/PolicyUpdateOverlay/updates/202508/index.tsx
··· 69 69 70 70 {screenReaderEnabled ? ( 71 71 <View style={[a.gap_sm]}> 72 - <Text emoji style={[a.text_2xl, a.font_bold, a.leading_snug]}> 72 + <Text emoji style={[a.text_2xl, a.font_semi_bold, a.leading_snug]}> 73 73 <Trans>Hey there 👋</Trans> 74 74 </Text> 75 75 <Text style={[a.leading_snug, a.text_md]}> ··· 115 115 </View> 116 116 ) : ( 117 117 <View style={[a.gap_sm]}> 118 - <Text emoji style={[a.text_2xl, a.font_bold, a.leading_snug]}> 118 + <Text emoji style={[a.text_2xl, a.font_semi_bold, a.leading_snug]}> 119 119 <Trans>Hey there 👋</Trans> 120 120 </Text> 121 121 <Text style={[a.leading_snug, a.text_md]}>
+1 -1
src/components/Post/Embed/ExternalEmbed/index.tsx
··· 126 126 <Text 127 127 emoji 128 128 numberOfLines={3} 129 - style={[a.text_md, a.font_bold, a.leading_snug]}> 129 + style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 130 130 {link.title || link.uri} 131 131 </Text> 132 132 )}
+1 -1
src/components/Post/Embed/VideoEmbed/VideoEmbedInner/TimeIndicator.tsx
··· 54 54 <Text 55 55 style={[ 56 56 {color: t.palette.white, fontSize: 12, fontVariant: ['tabular-nums']}, 57 - a.font_bold, 57 + a.font_semi_bold, 58 58 {lineHeight: 1.25}, 59 59 ]}> 60 60 {`${minutes}:${seconds}`}
+6 -1
src/components/PostControls/PostControlButton.tsx
··· 128 128 129 129 return ( 130 130 <Text 131 - style={[color, big ? a.text_md : a.text_sm, active && a.font_bold, style]} 131 + style={[ 132 + color, 133 + big ? a.text_md : a.text_sm, 134 + active && a.font_semi_bold, 135 + style, 136 + ]} 132 137 {...props} 133 138 /> 134 139 )
+2 -2
src/components/PostControls/RepostButton.tsx
··· 157 157 variant="ghost" 158 158 color="primary"> 159 159 <Repost size="lg" fill={t.palette.primary_500} /> 160 - <Text style={[a.font_bold, a.text_xl]}> 160 + <Text style={[a.font_semi_bold, a.text_xl]}> 161 161 {isReposted ? ( 162 162 <Trans>Remove repost</Trans> 163 163 ) : ( ··· 188 188 /> 189 189 <Text 190 190 style={[ 191 - a.font_bold, 191 + a.font_semi_bold, 192 192 a.text_xl, 193 193 embeddingDisabled && t.atoms.text_contrast_low, 194 194 ]}>
+1 -1
src/components/PostControls/ShareMenu/RecentChats.tsx
··· 203 203 a.text_sm, 204 204 t.atoms.text_contrast_high, 205 205 a.text_center, 206 - a.font_bold, 206 + a.font_semi_bold, 207 207 ]}> 208 208 <Trans>Start a conversation, and it will appear here.</Trans> 209 209 </Text>
+2 -2
src/components/ProfileCard.tsx
··· 233 233 <Text 234 234 emoji 235 235 style={[ 236 - a.font_bold, 236 + a.font_semi_bold, 237 237 a.leading_tight, 238 238 a.flex_shrink_0, 239 239 {maxWidth: '70%'}, ··· 287 287 emoji 288 288 style={[ 289 289 a.text_md, 290 - a.font_bold, 290 + a.font_semi_bold, 291 291 a.leading_snug, 292 292 a.self_start, 293 293 a.flex_shrink,
+3 -3
src/components/ProfileHoverCard/index.web.tsx
··· 515 515 <View style={[a.flex_row, a.align_center, a.pt_md, a.pb_xs]}> 516 516 <Text 517 517 numberOfLines={1} 518 - style={[a.text_lg, a.font_bold, a.self_start]}> 518 + style={[a.text_lg, a.font_semi_bold, a.self_start]}> 519 519 {sanitizeDisplayName( 520 520 profile.displayName || sanitizeHandle(profile.handle), 521 521 moderation.ui('displayName'), ··· 562 562 label={`${followers} ${pluralizedFollowers}`} 563 563 style={[t.atoms.text]} 564 564 onPress={hide}> 565 - <Text style={[a.text_md, a.font_bold]}>{followers} </Text> 565 + <Text style={[a.text_md, a.font_semi_bold]}>{followers} </Text> 566 566 <Text style={[t.atoms.text_contrast_medium]}> 567 567 {pluralizedFollowers} 568 568 </Text> ··· 572 572 label={_(msg`${following} following`)} 573 573 style={[t.atoms.text]} 574 574 onPress={hide}> 575 - <Text style={[a.text_md, a.font_bold]}>{following} </Text> 575 + <Text style={[a.text_md, a.font_semi_bold]}>{following} </Text> 576 576 <Text style={[t.atoms.text_contrast_medium]}> 577 577 {pluralizedFollowings} 578 578 </Text>
+1 -1
src/components/ProgressGuide/FollowDialog.tsx
··· 360 360 style={[ 361 361 a.z_10, 362 362 a.text_lg, 363 - a.font_heavy, 363 + a.font_bold, 364 364 a.leading_tight, 365 365 t.atoms.text_contrast_high, 366 366 ]}>
+1 -1
src/components/ProgressGuide/List.tsx
··· 28 28 <Text 29 29 style={[ 30 30 t.atoms.text_contrast_medium, 31 - a.font_bold, 31 + a.font_semi_bold, 32 32 a.text_sm, 33 33 {textTransform: 'uppercase'}, 34 34 ]}>
+1 -1
src/components/ProgressGuide/Task.tsx
··· 39 39 <Text 40 40 style={[ 41 41 a.text_sm, 42 - a.font_bold, 42 + a.font_semi_bold, 43 43 a.leading_tight, 44 44 tabularNumsTitle && {fontVariant: ['tabular-nums']}, 45 45 ]}>
+1 -1
src/components/ProgressGuide/Toast.tsx
··· 160 160 ref={animatedCheckRef} 161 161 /> 162 162 <View> 163 - <Text style={[a.text_md, a.font_bold]}>{title}</Text> 163 + <Text style={[a.text_md, a.font_semi_bold]}>{title}</Text> 164 164 {subtitle && ( 165 165 <Text style={[a.text_sm, t.atoms.text_contrast_medium]}> 166 166 {subtitle}
+1 -1
src/components/Prompt.tsx
··· 77 77 style={[ 78 78 a.flex_1, 79 79 a.text_2xl, 80 - a.font_bold, 80 + a.font_semi_bold, 81 81 a.pb_sm, 82 82 a.leading_snug, 83 83 style,
+3 -2
src/components/ReportDialog/SelectLabelerView.tsx
··· 24 24 return ( 25 25 <View style={[a.gap_lg]}> 26 26 <View style={[a.justify_center, gtMobile ? a.gap_sm : a.gap_xs]}> 27 - <Text style={[a.text_2xl, a.font_bold]}> 27 + <Text style={[a.text_2xl, a.font_semi_bold]}> 28 28 <Trans>Select moderator</Trans> 29 29 </Text> 30 30 <Text style={[a.text_md, t.atoms.text_contrast_medium]}> ··· 75 75 handle: labeler.creator.handle, 76 76 })} 77 77 /> 78 - <Text style={[t.atoms.text_contrast_medium, a.text_sm, a.font_bold]}> 78 + <Text 79 + style={[t.atoms.text_contrast_medium, a.text_sm, a.font_semi_bold]}> 79 80 @{labeler.creator.handle} 80 81 </Text> 81 82 </LabelingServiceCard.Content>
+3 -2
src/components/ReportDialog/SelectReportOptionView.tsx
··· 85 85 ) : null} 86 86 87 87 <View style={[a.justify_center, gtMobile ? a.gap_sm : a.gap_xs]}> 88 - <Text style={[a.text_2xl, a.font_bold]}>{i18n.title}</Text> 88 + <Text style={[a.text_2xl, a.font_semi_bold]}>{i18n.title}</Text> 89 89 <Text style={[a.text_md, t.atoms.text_contrast_medium]}> 90 90 {i18n.description} 91 91 </Text> ··· 173 173 interacted && t.atoms.bg_contrast_50, 174 174 ]}> 175 175 <View style={[a.flex_1, a.gap_xs]}> 176 - <Text style={[a.text_md, a.font_bold, t.atoms.text_contrast_medium]}> 176 + <Text 177 + style={[a.text_md, a.font_semi_bold, t.atoms.text_contrast_medium]}> 177 178 {title} 178 179 </Text> 179 180 <Text style={[a.leading_tight, {maxWidth: 400}]}>{description}</Text>
+1 -1
src/components/ReportDialog/SubmitView.tsx
··· 125 125 t.atoms.border_contrast_low, 126 126 ]}> 127 127 <View style={[a.flex_1, a.gap_xs]}> 128 - <Text style={[a.text_md, a.font_bold]}> 128 + <Text style={[a.text_md, a.font_semi_bold]}> 129 129 {selectedReportOption.title} 130 130 </Text> 131 131 <Text style={[a.leading_tight, {maxWidth: 400}]}>
+7 -1
src/components/SearchError.tsx
··· 34 34 {maxWidth: gtMobile ? 394 : 294}, 35 35 gtMobile ? a.gap_md : a.gap_sm, 36 36 ]}> 37 - <Text style={[a.font_bold, a.text_lg, a.text_center, a.leading_snug]}> 37 + <Text 38 + style={[ 39 + a.font_semi_bold, 40 + a.text_lg, 41 + a.text_center, 42 + a.leading_snug, 43 + ]}> 38 44 {title} 39 45 </Text> 40 46 {children}
+1 -1
src/components/Select/index.tsx
··· 280 280 // eslint-disable-next-line bsky-internal/avoid-unwrapped-text 281 281 return ( 282 282 <View style={[a.flex_1, a.py_md, a.border_b, t.atoms.border_contrast_low]}> 283 - <Text style={[a.text_md, selected && a.font_bold]}>{children}</Text> 283 + <Text style={[a.text_md, selected && a.font_semi_bold]}>{children}</Text> 284 284 </View> 285 285 ) 286 286 }
+1 -1
src/components/Select/index.web.tsx
··· 259 259 a.text_sm, 260 260 {outline: 0}, 261 261 (hovered || focused) && {backgroundColor: t.palette.primary_50}, 262 - selected && [a.font_bold], 262 + selected && [a.font_semi_bold], 263 263 a.transition_color, 264 264 style, 265 265 ])}>
+1 -1
src/components/StarterPack/ProfileStarterPacks.tsx
··· 255 255 {marginTop: a.border.borderWidth}, 256 256 ]}> 257 257 <View style={[a.gap_xs]}> 258 - <Text style={[a.font_bold, a.text_lg, {color: 'white'}]}> 258 + <Text style={[a.font_semi_bold, a.text_lg, {color: 'white'}]}> 259 259 <Trans>You haven't created a starter pack yet!</Trans> 260 260 </Text> 261 261 <Text style={[a.text_md, {color: 'white'}]}>
+8 -3
src/components/StarterPack/QrCode.tsx
··· 54 54 ]}> 55 55 <View style={[a.gap_sm]}> 56 56 <Text 57 - style={[a.font_bold, a.text_3xl, a.text_center, {color: 'white'}]}> 57 + style={[ 58 + a.font_semi_bold, 59 + a.text_3xl, 60 + a.text_center, 61 + {color: 'white'}, 62 + ]}> 58 63 {record.name} 59 64 </Text> 60 65 </View> 61 66 <View style={[a.gap_xl, a.align_center]}> 62 67 <Text 63 68 style={[ 64 - a.font_bold, 69 + a.font_semi_bold, 65 70 a.text_center, 66 71 {color: 'white', fontSize: 18}, 67 72 ]}> ··· 76 81 a.flex, 77 82 a.flex_row, 78 83 a.align_center, 79 - a.font_bold, 84 + a.font_semi_bold, 80 85 {color: 'white', fontSize: 18, gap: 6}, 81 86 ]}> 82 87 <Trans>
+1 -1
src/components/StarterPack/ShareDialog.tsx
··· 77 77 ) : ( 78 78 <View style={[!gtMobile && a.gap_lg]}> 79 79 <View style={[a.gap_sm, gtMobile && a.pb_lg]}> 80 - <Text style={[a.font_bold, a.text_2xl]}> 80 + <Text style={[a.font_semi_bold, a.text_2xl]}> 81 81 <Trans>Invite people to this starter pack!</Trans> 82 82 </Text> 83 83 <Text style={[a.text_md, t.atoms.text_contrast_medium]}>
+2 -2
src/components/StarterPack/StarterPackCard.tsx
··· 77 77 <View style={[a.flex_1]}> 78 78 <Text 79 79 emoji 80 - style={[a.text_md, a.font_bold, a.leading_snug]} 80 + style={[a.text_md, a.font_semi_bold, a.leading_snug]} 81 81 numberOfLines={2}> 82 82 {record.name} 83 83 </Text> ··· 97 97 </Text> 98 98 ) : null} 99 99 {!!joinedAllTimeCount && joinedAllTimeCount >= 50 && ( 100 - <Text style={[a.font_bold, t.atoms.text_contrast_medium]}> 100 + <Text style={[a.font_semi_bold, t.atoms.text_contrast_medium]}> 101 101 <Trans comment="Number of users (always at least 50) who have joined Bluesky using a specific starter pack"> 102 102 <Plural value={joinedAllTimeCount} other="# users have" /> joined! 103 103 </Trans>
+1 -1
src/components/StarterPack/Wizard/WizardEditListDialog.tsx
··· 105 105 : [a.pb_sm, a.align_end], 106 106 ]}> 107 107 <View style={{width: 60}} /> 108 - <Text style={[a.font_bold, a.text_xl]}> 108 + <Text style={[a.font_semi_bold, a.text_xl]}> 109 109 {state.currentStep === 'Profiles' ? ( 110 110 <Trans>Edit People</Trans> 111 111 ) : (
+1 -1
src/components/StarterPack/Wizard/WizardListCard.tsx
··· 83 83 emoji 84 84 style={[ 85 85 a.flex_1, 86 - a.font_bold, 86 + a.font_semi_bold, 87 87 a.text_md, 88 88 a.leading_tight, 89 89 a.self_start,
+1 -1
src/components/SubtleWebHover.web.tsx
··· 11 11 if (isTouchDevice) { 12 12 return null 13 13 } 14 - let opacity: number 14 + let opacity = 0.5 15 15 switch (t.name) { 16 16 case 'dark': 17 17 opacity = 0.4
+1 -1
src/components/TrendingTopics.tsx
··· 90 90 91 91 <Text 92 92 style={[ 93 - a.font_bold, 93 + a.font_semi_bold, 94 94 a.leading_tight, 95 95 isSmall ? [a.text_sm] : [a.text_md, {paddingBottom: 1}], 96 96 ]}
+9 -3
src/components/VideoPostCard.tsx
··· 227 227 {likeCount > 0 && ( 228 228 <View style={[a.flex_row, a.align_center, a.gap_xs]}> 229 229 <Heart size="sm" fill="white" /> 230 - <Text style={[a.text_sm, a.font_bold, {color: 'white'}]}> 230 + <Text 231 + style={[a.text_sm, a.font_semi_bold, {color: 'white'}]}> 231 232 {formatCount(i18n, likeCount)} 232 233 </Text> 233 234 </View> ··· 235 236 {repostCount > 0 && ( 236 237 <View style={[a.flex_row, a.align_center, a.gap_xs]}> 237 238 <Repost size="sm" fill="white" /> 238 - <Text style={[a.text_sm, a.font_bold, {color: 'white'}]}> 239 + <Text 240 + style={[a.text_sm, a.font_semi_bold, {color: 'white'}]}> 239 241 {formatCount(i18n, repostCount)} 240 242 </Text> 241 243 </View> ··· 520 522 <View style={[a.flex_row, a.align_center, a.gap_xs]}> 521 523 <Heart size="sm" fill="white" /> 522 524 <Text 523 - style={[a.text_sm, a.font_bold, {color: 'white'}]}> 525 + style={[ 526 + a.text_sm, 527 + a.font_semi_bold, 528 + {color: 'white'}, 529 + ]}> 524 530 {formatCount(i18n, likeCount)} 525 531 </Text> 526 532 </View>
+2 -2
src/components/WelcomeModal.tsx
··· 108 108 <Text 109 109 style={[ 110 110 a.text_2xl, 111 - a.font_bold, 111 + a.font_semi_bold, 112 112 a.user_select_none, 113 113 {color: '#354358', letterSpacing: -0.5}, 114 114 ]}> ··· 127 127 <Text 128 128 style={[ 129 129 gtMobile ? a.text_4xl : a.text_3xl, 130 - a.font_bold, 130 + a.font_semi_bold, 131 131 a.text_center, 132 132 {color: '#354358'}, 133 133 web({
+1 -1
src/components/WhoCanReply.tsx
··· 188 188 label={_(msg`Dialog: adjust who can interact with this post`)} 189 189 style={web({maxWidth: 400})}> 190 190 <View style={[a.gap_sm]}> 191 - <Text style={[a.font_bold, a.text_xl, a.pb_sm]}> 191 + <Text style={[a.font_semi_bold, a.text_xl, a.pb_sm]}> 192 192 <Trans>Who can interact with this post?</Trans> 193 193 </Text> 194 194 <Rules
+1 -1
src/components/activity-notifications/SubscribeProfileDialog.tsx
··· 219 219 label={_(msg`Get notified of new posts from ${name}`)}> 220 220 <View style={[a.gap_lg]}> 221 221 <View style={[a.gap_xs]}> 222 - <Text style={[a.font_heavy, a.text_2xl]}> 222 + <Text style={[a.font_bold, a.text_2xl]}> 223 223 <Trans>Keep me posted</Trans> 224 224 </Text> 225 225 <Text style={[t.atoms.text_contrast_medium, a.text_md]}>
+2 -2
src/components/ageAssurance/AgeAssuranceAdmonition.tsx
··· 82 82 </View> 83 83 <View style={[a.flex_1, a.gap_xs, a.pr_4xl]}> 84 84 <Text style={[a.text_sm, a.leading_snug]}>{children}</Text> 85 - <Text style={[a.text_sm, a.leading_snug, a.font_bold]}> 85 + <Text style={[a.text_sm, a.leading_snug, a.font_semi_bold]}> 86 86 <Trans> 87 87 Learn more in your{' '} 88 88 <InlineLinkText 89 89 label={_(msg`Go to account settings`)} 90 90 to={'/settings/account'} 91 - style={[a.text_sm, a.leading_snug, a.font_bold]} 91 + style={[a.text_sm, a.leading_snug, a.font_semi_bold]} 92 92 onPress={() => { 93 93 logger.metric('ageAssurance:navigateToSettings', {}) 94 94 }}>
+1 -1
src/components/ageAssurance/AgeAssuranceAppealDialog.tsx
··· 89 89 <AgeAssuranceBadge /> 90 90 </View> 91 91 92 - <Text style={[a.text_2xl, a.font_heavy, a.pt_md, a.leading_tight]}> 92 + <Text style={[a.text_2xl, a.font_bold, a.pt_md, a.leading_tight]}> 93 93 <Trans>Contact us</Trans> 94 94 </Text> 95 95
+1 -1
src/components/ageAssurance/AgeAssuranceBadge.tsx
··· 29 29 <Shield size="sm" /> 30 30 <Text 31 31 style={[ 32 - a.font_bold, 32 + a.font_semi_bold, 33 33 a.leading_snug, 34 34 { 35 35 color: select(t.name, {
+1 -1
src/components/ageAssurance/AgeAssuranceInitDialog.tsx
··· 178 178 <View style={[a.align_start]}> 179 179 <AgeAssuranceBadge /> 180 180 181 - <Text style={[a.text_xl, a.font_heavy, a.pt_xl, a.pb_md]}> 181 + <Text style={[a.text_xl, a.font_bold, a.pt_xl, a.pb_md]}> 182 182 {success ? <Trans>Success!</Trans> : <Trans>Verify your age</Trans>} 183 183 </Text> 184 184
+2 -2
src/components/ageAssurance/AgeAssuranceRedirectDialog.tsx
··· 160 160 a.pb_md, 161 161 ]}> 162 162 <SuccessIcon size="sm" fill={t.palette.positive_600} /> 163 - <Text style={[a.text_xl, a.font_heavy]}> 163 + <Text style={[a.text_xl, a.font_bold]}> 164 164 <Trans>Success</Trans> 165 165 </Text> 166 166 </View> ··· 209 209 ]}> 210 210 {error && <ErrorIcon size="md" fill={t.palette.negative_500} />} 211 211 212 - <Text style={[a.text_xl, a.font_heavy]}> 212 + <Text style={[a.text_xl, a.font_bold]}> 213 213 {error ? <Trans>Connection issue</Trans> : <Trans>Verifying</Trans>} 214 214 </Text> 215 215
+1 -1
src/components/ageAssurance/AgeRestrictedScreen.tsx
··· 62 62 </View> 63 63 64 64 <View style={[a.gap_sm, a.pb_lg]}> 65 - <Text style={[a.text_xl, a.leading_snug, a.font_heavy]}> 65 + <Text style={[a.text_xl, a.leading_snug, a.font_bold]}> 66 66 <Trans> 67 67 You must complete age assurance in order to access this screen. 68 68 </Trans>
+1 -1
src/components/dialogs/BirthDateSettings.tsx
··· 38 38 label={_(msg`My Birthday`)} 39 39 style={web({maxWidth: 400})}> 40 40 <View style={[a.gap_sm]}> 41 - <Text style={[a.text_xl, a.font_bold]}> 41 + <Text style={[a.text_xl, a.font_semi_bold]}> 42 42 <Trans>My Birthday</Trans> 43 43 </Text> 44 44 <Text style={[a.leading_snug, t.atoms.text_contrast_medium]}>
+1 -1
src/components/dialogs/DeviceLocationRequestDialog.tsx
··· 108 108 109 109 return ( 110 110 <View style={[a.gap_md]}> 111 - <Text style={[a.text_xl, a.font_heavy]}> 111 + <Text style={[a.text_xl, a.font_bold]}> 112 112 <Trans>Confirm your location</Trans> 113 113 </Text> 114 114 <View style={[a.gap_sm, a.pb_xs]}>
+3 -3
src/components/dialogs/EmailDialog/screens/Manage2FA/Disable.tsx
··· 153 153 154 154 return ( 155 155 <View style={[a.gap_sm]}> 156 - <Text style={[a.text_xl, a.font_heavy, a.leading_snug]}> 156 + <Text style={[a.text_xl, a.font_bold, a.leading_snug]}> 157 157 <Trans>Disable email 2FA</Trans> 158 158 </Text> 159 159 ··· 163 163 style={[a.text_sm, a.leading_snug, t.atoms.text_contrast_medium]}> 164 164 <Trans> 165 165 To disable your email 2FA method, please verify your access to{' '} 166 - <Span style={[a.font_bold]}>{currentAccount?.email}</Span> 166 + <Span style={[a.font_semi_bold]}>{currentAccount?.email}</Span> 167 167 </Trans> 168 168 </Text> 169 169 ··· 214 214 style={[a.text_sm, a.leading_snug, t.atoms.text_contrast_medium]}> 215 215 <Trans> 216 216 To disable your email 2FA method, please verify your access to{' '} 217 - <Span style={[a.font_bold]}>{currentAccount?.email}</Span> 217 + <Span style={[a.font_semi_bold]}>{currentAccount?.email}</Span> 218 218 </Trans> 219 219 </Text> 220 220
+1 -1
src/components/dialogs/EmailDialog/screens/Manage2FA/Enable.tsx
··· 88 88 return ( 89 89 <View style={[a.gap_lg]}> 90 90 <View style={[a.gap_sm]}> 91 - <Text style={[a.text_xl, a.font_heavy, a.leading_snug]}> 91 + <Text style={[a.text_xl, a.font_bold, a.leading_snug]}> 92 92 <Trans>Enable email 2FA</Trans> 93 93 </Text> 94 94
+3 -3
src/components/dialogs/EmailDialog/screens/Update.tsx
··· 199 199 200 200 return ( 201 201 <View style={[a.gap_lg]}> 202 - <Text style={[a.text_xl, a.font_heavy]}> 202 + <Text style={[a.text_xl, a.font_bold]}> 203 203 <Trans>Update your email</Trans> 204 204 </Text> 205 205 ··· 239 239 <> 240 240 <Divider /> 241 241 <View> 242 - <Text style={[a.text_md, a.pb_sm, a.font_bold]}> 242 + <Text style={[a.text_md, a.pb_sm, a.font_semi_bold]}> 243 243 <Trans>Security step required</Trans> 244 244 </Text> 245 245 <Text ··· 282 282 <View style={[a.gap_sm]}> 283 283 <View style={[a.flex_row, a.gap_sm, a.align_center]}> 284 284 <Check fill={t.palette.positive_600} size="xs" /> 285 - <Text style={[a.text_md, a.font_heavy]}> 285 + <Text style={[a.text_md, a.font_bold]}> 286 286 <Trans>Success!</Trans> 287 287 </Text> 288 288 </View>
+1 -1
src/components/dialogs/EmailDialog/screens/VerificationReminder.tsx
··· 58 58 <View style={[a.mb_xs, {height: 150 - dialogPadding}]} /> 59 59 60 60 <View style={[a.gap_sm]}> 61 - <Text style={[a.text_xl, a.font_heavy]}> 61 + <Text style={[a.text_xl, a.font_bold]}> 62 62 <Trans>Please verify your email</Trans> 63 63 </Text> 64 64 <Text style={[a.text_sm, a.leading_snug, t.atoms.text_contrast_medium]}>
+5 -5
src/components/dialogs/EmailDialog/screens/Verify.tsx
··· 174 174 return ( 175 175 <View style={[a.gap_lg]}> 176 176 <View style={[a.gap_sm]}> 177 - <Text style={[a.text_xl, a.font_heavy]}> 177 + <Text style={[a.text_xl, a.font_bold]}> 178 178 <Span style={{top: 1}}> 179 179 <Check size="sm" fill={t.palette.positive_600} /> 180 180 </Span> ··· 197 197 return ( 198 198 <View style={[a.gap_lg]}> 199 199 <View style={[a.gap_sm]}> 200 - <Text style={[a.text_xl, a.font_heavy]}> 200 + <Text style={[a.text_xl, a.font_bold]}> 201 201 {state.step === 'email' ? ( 202 202 state.mutationStatus === 'success' ? ( 203 203 <> ··· 239 239 state.mutationStatus === 'success' ? ( 240 240 <Trans> 241 241 We sent an email to{' '} 242 - <Span style={[a.font_bold, t.atoms.text]}> 242 + <Span style={[a.font_semi_bold, t.atoms.text]}> 243 243 {currentAccount!.email} 244 244 </Span>{' '} 245 245 containing a link. Please click on it to complete the email ··· 248 248 ) : ( 249 249 <Trans> 250 250 We'll send an email to{' '} 251 - <Span style={[a.font_bold, t.atoms.text]}> 251 + <Span style={[a.font_semi_bold, t.atoms.text]}> 252 252 {currentAccount!.email} 253 253 </Span>{' '} 254 254 containing a link. Please click on it to complete the email ··· 258 258 ) : ( 259 259 <Trans> 260 260 Please enter the code we sent to{' '} 261 - <Span style={[a.font_bold, t.atoms.text]}> 261 + <Span style={[a.font_semi_bold, t.atoms.text]}> 262 262 {currentAccount!.email} 263 263 </Span>{' '} 264 264 below.
+2 -2
src/components/dialogs/Embed.tsx
··· 104 104 <Dialog.Inner label={_(msg`Embed post`)} style={[{maxWidth: 500}]}> 105 105 <View style={[a.gap_lg]}> 106 106 <View style={[a.gap_sm]}> 107 - <Text style={[a.text_2xl, a.font_heavy]}> 107 + <Text style={[a.text_2xl, a.font_bold]}> 108 108 <Trans>Embed post</Trans> 109 109 </Text> 110 110 <Text ··· 147 147 148 148 {showCustomisation && ( 149 149 <View style={[a.gap_sm, a.p_md]}> 150 - <Text style={[t.atoms.text_contrast_medium, a.font_bold]}> 150 + <Text style={[t.atoms.text_contrast_medium, a.font_semi_bold]}> 151 151 <Trans>Color theme</Trans> 152 152 </Text> 153 153 <ToggleButton.Group
+1 -1
src/components/dialogs/EmbedConsent.tsx
··· 54 54 label={_(msg`External Media`)} 55 55 style={[gtMobile ? {width: 'auto', maxWidth: 400} : a.w_full]}> 56 56 <View style={a.gap_sm}> 57 - <Text style={[a.text_2xl, a.font_bold]}> 57 + <Text style={[a.text_2xl, a.font_semi_bold]}> 58 58 <Trans>External Media</Trans> 59 59 </Text> 60 60
+1 -1
src/components/dialogs/InAppBrowserConsent.tsx
··· 62 62 <Dialog.ScrollableInner label={_(msg`How should we open this link?`)}> 63 63 <View style={[a.gap_2xl]}> 64 64 <View style={[a.gap_sm]}> 65 - <Text style={[a.font_heavy, a.text_2xl]}> 65 + <Text style={[a.font_bold, a.text_2xl]}> 66 66 <Trans>How should we open this link?</Trans> 67 67 </Text> 68 68 <Text style={[t.atoms.text_contrast_high, a.leading_snug, a.text_md]}>
+3 -2
src/components/dialogs/LinkWarning.tsx
··· 68 68 }> 69 69 <View style={[a.gap_2xl]}> 70 70 <View style={[a.gap_sm]}> 71 - <Text style={[a.font_heavy, a.text_2xl]}> 71 + <Text style={[a.font_bold, a.text_2xl]}> 72 72 {potentiallyMisleading ? ( 73 73 <Trans>Potentially misleading link</Trans> 74 74 ) : ( ··· 151 151 ]}> 152 152 <Text style={[a.text_md, a.leading_snug, t.atoms.text_contrast_medium]}> 153 153 {scheme} 154 - <Text style={[a.text_md, a.leading_snug, t.atoms.text, a.font_bold]}> 154 + <Text 155 + style={[a.text_md, a.leading_snug, t.atoms.text, a.font_semi_bold]}> 155 156 {hostname} 156 157 </Text> 157 158 {rest}
+15 -8
src/components/dialogs/MutedWords.tsx
··· 108 108 <Dialog.ScrollableInner label={_(msg`Manage your muted words and tags`)}> 109 109 <View> 110 110 <Text 111 - style={[a.text_md, a.font_bold, a.pb_sm, t.atoms.text_contrast_high]}> 111 + style={[ 112 + a.text_md, 113 + a.font_semi_bold, 114 + a.pb_sm, 115 + t.atoms.text_contrast_high, 116 + ]}> 112 117 <Trans>Add muted words and tags</Trans> 113 118 </Text> 114 119 <Text style={[a.pb_lg, a.leading_snug, t.atoms.text_contrast_medium]}> ··· 147 152 style={[ 148 153 a.pb_xs, 149 154 a.text_sm, 150 - a.font_bold, 155 + a.font_semi_bold, 151 156 t.atoms.text_contrast_medium, 152 157 ]}> 153 158 <Trans>Duration:</Trans> ··· 247 252 style={[ 248 253 a.pb_xs, 249 254 a.text_sm, 250 - a.font_bold, 255 + a.font_semi_bold, 251 256 t.atoms.text_contrast_medium, 252 257 ]}> 253 258 <Trans>Mute in:</Trans> ··· 293 298 style={[ 294 299 a.pb_xs, 295 300 a.text_sm, 296 - a.font_bold, 301 + a.font_semi_bold, 297 302 t.atoms.text_contrast_medium, 298 303 ]}> 299 304 <Trans>Options:</Trans> ··· 362 367 <Text 363 368 style={[ 364 369 a.text_md, 365 - a.font_bold, 370 + a.font_semi_bold, 366 371 a.pb_md, 367 372 t.atoms.text_contrast_high, 368 373 ]}> ··· 455 460 style={[ 456 461 a.flex_1, 457 462 a.leading_snug, 458 - a.font_bold, 463 + a.font_semi_bold, 459 464 web({ 460 465 overflowWrap: 'break-word', 461 466 wordBreak: 'break-word', ··· 466 471 {word.value}{' '} 467 472 <Text style={[a.font_normal, t.atoms.text_contrast_medium]}> 468 473 in{' '} 469 - <Text style={[a.font_bold, t.atoms.text_contrast_medium]}> 474 + <Text 475 + style={[a.font_semi_bold, t.atoms.text_contrast_medium]}> 470 476 text & tags 471 477 </Text> 472 478 </Text> ··· 476 482 {word.value}{' '} 477 483 <Text style={[a.font_normal, t.atoms.text_contrast_medium]}> 478 484 in{' '} 479 - <Text style={[a.font_bold, t.atoms.text_contrast_medium]}> 485 + <Text 486 + style={[a.font_semi_bold, t.atoms.text_contrast_medium]}> 480 487 tags 481 488 </Text> 482 489 </Text>
+7 -5
src/components/dialogs/PostInteractionSettingsDialog.tsx
··· 84 84 ]}> 85 85 <Trans> 86 86 You can set default interaction settings in{' '} 87 - <Text style={[a.font_bold, t.atoms.text_contrast_medium]}> 87 + <Text style={[a.font_semi_bold, t.atoms.text_contrast_medium]}> 88 88 Settings &rarr; Moderation &rarr; Interaction settings 89 89 </Text> 90 90 . ··· 100 100 export function Header() { 101 101 return ( 102 102 <View style={[a.gap_md, a.pb_sm]}> 103 - <Text style={[a.text_2xl, a.font_bold]}> 103 + <Text style={[a.text_2xl, a.font_semi_bold]}> 104 104 <Trans>Post interaction settings</Trans> 105 105 </Text> 106 106 <Text style={[a.text_md, a.pb_xs]}> ··· 329 329 <View style={[a.flex_1, a.gap_md]}> 330 330 <View style={[a.gap_lg]}> 331 331 <View style={[a.gap_sm]}> 332 - <Text style={[a.font_bold, a.text_lg]}> 332 + <Text style={[a.font_semi_bold, a.text_lg]}> 333 333 <Trans>Quote settings</Trans> 334 334 </Text> 335 335 ··· 385 385 opacity: replySettingsDisabled ? 0.3 : 1, 386 386 }, 387 387 ]}> 388 - <Text style={[a.font_bold, a.text_lg]}> 388 + <Text style={[a.font_semi_bold, a.text_lg]}> 389 389 <Trans>Reply settings</Trans> 390 390 </Text> 391 391 ··· 535 535 }, 536 536 style, 537 537 ]}> 538 - <Text style={[a.text_sm, isSelected && a.font_bold]}>{label}</Text> 538 + <Text style={[a.text_sm, isSelected && a.font_semi_bold]}> 539 + {label} 540 + </Text> 539 541 {isSelected ? ( 540 542 <Check size="sm" fill={t.palette.primary_500} /> 541 543 ) : (
+1 -1
src/components/dialogs/SearchablePeopleList.tsx
··· 284 284 style={[ 285 285 a.z_10, 286 286 a.text_lg, 287 - a.font_heavy, 287 + a.font_bold, 288 288 a.leading_tight, 289 289 t.atoms.text_contrast_high, 290 290 ]}>
+3 -3
src/components/dialogs/StarterPackDialog.tsx
··· 172 172 isWeb ? a.mb_2xl : a.my_lg, 173 173 a.align_center, 174 174 ]}> 175 - <Text style={[a.text_lg, a.font_bold]}> 175 + <Text style={[a.text_lg, a.font_semi_bold]}> 176 176 <Trans>Add to starter packs</Trans> 177 177 </Text> 178 178 <Button ··· 189 189 <> 190 190 <View 191 191 style={[a.flex_row, a.justify_between, a.align_center, a.py_md]}> 192 - <Text style={[a.text_md, a.font_bold]}> 192 + <Text style={[a.text_md, a.font_semi_bold]}> 193 193 <Trans>New starter pack</Trans> 194 194 </Text> 195 195 <Button ··· 331 331 return ( 332 332 <View style={[a.flex_row, a.justify_between, a.align_center, a.py_md]}> 333 333 <View> 334 - <Text emoji style={[a.text_md, a.font_bold]} numberOfLines={1}> 334 + <Text emoji style={[a.text_md, a.font_semi_bold]} numberOfLines={1}> 335 335 {record.name} 336 336 </Text> 337 337
+1 -1
src/components/dialogs/SwitchAccount.tsx
··· 45 45 <Dialog.Handle /> 46 46 <Dialog.ScrollableInner label={_(msg`Switch Account`)}> 47 47 <View style={[a.gap_lg]}> 48 - <Text style={[a.text_2xl, a.font_bold]}> 48 + <Text style={[a.text_2xl, a.font_semi_bold]}> 49 49 <Trans>Switch Account</Trans> 50 50 </Text> 51 51
+2 -2
src/components/dialogs/nuxs/ActivitySubscriptions.tsx
··· 66 66 <SparkleIcon fill={t.palette.primary_800} size="sm" /> 67 67 <Text 68 68 style={[ 69 - a.font_bold, 69 + a.font_semi_bold, 70 70 { 71 71 color: t.palette.primary_800, 72 72 }, ··· 127 127 style={[ 128 128 a.text_3xl, 129 129 a.leading_tight, 130 - a.font_heavy, 130 + a.font_bold, 131 131 a.text_center, 132 132 { 133 133 fontSize: isWeb ? 28 : 32,
+2 -2
src/components/dialogs/nuxs/BookmarksAnnouncement.tsx
··· 65 65 <SparkleIcon fill={t.palette.primary_800} size="sm" /> 66 66 <Text 67 67 style={[ 68 - a.font_bold, 68 + a.font_semi_bold, 69 69 { 70 70 color: t.palette.primary_800, 71 71 }, ··· 133 133 style={[ 134 134 a.text_3xl, 135 135 a.leading_tight, 136 - a.font_heavy, 136 + a.font_bold, 137 137 a.text_center, 138 138 { 139 139 fontSize: isWeb ? 28 : 32,
+4 -4
src/components/dialogs/nuxs/InitialVerificationAnnouncement.tsx
··· 55 55 <SparkleIcon fill={t.palette.primary_700} size="sm" /> 56 56 <Text 57 57 style={[ 58 - a.font_bold, 58 + a.font_semi_bold, 59 59 { 60 60 color: t.palette.primary_700, 61 61 }, ··· 87 87 </View> 88 88 89 89 <View style={[a.gap_xs]}> 90 - <Text style={[a.text_2xl, a.font_bold, a.leading_snug]}> 90 + <Text style={[a.text_2xl, a.font_semi_bold, a.leading_snug]}> 91 91 <Trans>A new form of verification</Trans> 92 92 </Text> 93 93 <Text style={[a.leading_snug, a.text_md]}> ··· 123 123 <View style={[a.gap_sm]}> 124 124 <View style={[a.flex_row, a.align_center, a.gap_xs]}> 125 125 <VerifierCheck width={14} /> 126 - <Text style={[a.text_lg, a.font_bold, a.leading_snug]}> 126 + <Text style={[a.text_lg, a.font_semi_bold, a.leading_snug]}> 127 127 <Trans>Who can verify?</Trans> 128 128 </Text> 129 129 </View> ··· 138 138 <Trans> 139 139 Trust emerges from relationships, communities, and shared 140 140 context, so we’re also enabling{' '} 141 - <Span style={[a.font_bold]}>trusted verifiers</Span>: 141 + <Span style={[a.font_semi_bold]}>trusted verifiers</Span>: 142 142 organizations that can directly issue verification. 143 143 </Trans> 144 144 </Text>
+3 -1
src/components/dms/ChatEmptyPill.tsx
··· 89 89 onPress={onPress} 90 90 onPressIn={onPressIn} 91 91 onPressOut={onPressOut}> 92 - <Text style={[a.font_bold, a.pointer_events_none]} selectable={false}> 92 + <Text 93 + style={[a.font_semi_bold, a.pointer_events_none]} 94 + selectable={false}> 93 95 {prompts[promptIndex]} 94 96 </Text> 95 97 </AnimatedPressable>
+2 -1
src/components/dms/DateDivider.tsx
··· 67 67 a.px_md, 68 68 ]}> 69 69 <Trans> 70 - <Text style={[a.text_xs, t.atoms.text_contrast_medium, a.font_bold]}> 70 + <Text 71 + style={[a.text_xs, t.atoms.text_contrast_medium, a.font_semi_bold]}> 71 72 {date} 72 73 </Text>{' '} 73 74 at {time}
+1 -1
src/components/dms/EmojiPopup.android.tsx
··· 51 51 a.border_b, 52 52 t.atoms.border_contrast_low, 53 53 ]}> 54 - <Text style={[a.font_bold, a.text_md]}> 54 + <Text style={[a.font_semi_bold, a.text_md]}> 55 55 <Trans>Add Reaction</Trans> 56 56 </Text> 57 57 <Button
+1 -1
src/components/dms/MessagesListBlockedFooter.tsx
··· 61 61 return ( 62 62 <View style={[hasMessages && a.pt_md, a.pb_xl, a.gap_lg]}> 63 63 <Divider /> 64 - <Text style={[a.text_md, a.font_bold, a.text_center]}> 64 + <Text style={[a.text_md, a.font_semi_bold, a.text_center]}> 65 65 {isBlocking ? ( 66 66 <Trans>You have blocked this user</Trans> 67 67 ) : (
+1 -1
src/components/dms/MessagesListHeader.tsx
··· 154 154 emoji 155 155 style={[ 156 156 a.text_md, 157 - a.font_bold, 157 + a.font_semi_bold, 158 158 a.self_start, 159 159 web(a.leading_normal), 160 160 ]}
+1 -1
src/components/dms/NewMessagesPill.tsx
··· 88 88 onPress={onPress} 89 89 onPressIn={onPressIn} 90 90 onPressOut={onPressOut}> 91 - <Text style={[a.font_bold]}> 91 + <Text style={[a.font_semi_bold]}> 92 92 <Trans>New messages</Trans> 93 93 </Text> 94 94 </AnimatedPressable>
+5 -4
src/components/dms/ReportDialog.tsx
··· 200 200 </Button> 201 201 202 202 <View style={[a.justify_center, gtMobile ? a.gap_sm : a.gap_xs]}> 203 - <Text style={[a.text_2xl, a.font_bold]}>{copy.title}</Text> 203 + <Text style={[a.text_2xl, a.font_semi_bold]}>{copy.title}</Text> 204 204 <Text style={[a.text_md, t.atoms.text_contrast_medium]}> 205 205 <Trans> 206 206 Your report will be sent to the Bluesky Moderation Service ··· 213 213 )} 214 214 215 215 <Text style={[a.text_md, t.atoms.text_contrast_medium]}> 216 - <Text style={[a.font_bold, a.text_md, t.atoms.text_contrast_medium]}> 216 + <Text 217 + style={[a.font_semi_bold, a.text_md, t.atoms.text_contrast_medium]}> 217 218 <Trans>Reason:</Trans> 218 219 </Text>{' '} 219 - <Text style={[a.font_bold, a.text_md]}>{reportOption.title}</Text> 220 + <Text style={[a.font_semi_bold, a.text_md]}>{reportOption.title}</Text> 220 221 </Text> 221 222 222 223 <Divider /> ··· 346 347 return ( 347 348 <View style={a.gap_2xl}> 348 349 <View style={[a.justify_center, gtMobile ? a.gap_sm : a.gap_xs]}> 349 - <Text style={[a.text_2xl, a.font_bold]}> 350 + <Text style={[a.text_2xl, a.font_semi_bold]}> 350 351 <Trans>Report submitted</Trans> 351 352 </Text> 352 353 <Text style={[a.text_md, t.atoms.text_contrast_medium]}>
+2 -1
src/components/forms/FormError.tsx
··· 20 20 ]}> 21 21 <Warning fill={t.palette.white} size="md" /> 22 22 <View style={[a.flex_1]}> 23 - <Text style={[{color: t.palette.white}, a.font_bold, a.leading_snug]}> 23 + <Text 24 + style={[{color: t.palette.white}, a.font_semi_bold, a.leading_snug]}> 24 25 {error} 25 26 </Text> 26 27 </View>
+19 -9
src/components/forms/TextField.tsx
··· 15 15 android, 16 16 applyFonts, 17 17 atoms as a, 18 - ios, 19 18 platform, 20 19 type TextStyleProp, 21 20 tokens, ··· 202 201 a.px_xs, 203 202 { 204 203 // paddingVertical doesn't work w/multiline - esb 205 - lineHeight: a.text_md.fontSize * 1.1875, 204 + lineHeight: a.text_md.fontSize * 1.2, 206 205 textAlignVertical: rest.multiline ? 'top' : undefined, 207 206 minHeight: rest.multiline ? 80 : undefined, 208 207 minWidth: 0, 208 + paddingTop: 13, 209 + paddingBottom: 13, 209 210 }, 210 - ios({paddingTop: 12, paddingBottom: 13}), 211 - // Needs to be sm on Paper, md on Fabric for some godforsaken reason -sfn 212 - android(a.py_sm), 213 - // fix for autofill styles covering border 211 + android({ 212 + paddingTop: 8, 213 + paddingBottom: 9, 214 + }), 215 + /* 216 + * Margins are needed here to avoid autofill background overlapping the 217 + * top and bottom borders - esb 218 + */ 214 219 web({ 215 - paddingTop: 10, 220 + paddingTop: 11, 216 221 paddingBottom: 11, 217 222 marginTop: 2, 218 223 marginBottom: 2, ··· 262 267 a.absolute, 263 268 a.inset_0, 264 269 a.rounded_sm, 265 - t.atoms.bg_contrast_25, 270 + t.atoms.bg_contrast_50, 266 271 {borderColor: 'transparent', borderWidth: 2}, 267 272 ctx.hovered ? chromeHover : {}, 268 273 ctx.focused ? chromeFocus : {}, ··· 287 292 return ( 288 293 <Text 289 294 nativeID={nativeID} 290 - style={[a.text_sm, a.font_bold, t.atoms.text_contrast_medium, a.mb_sm]}> 295 + style={[ 296 + a.text_sm, 297 + a.font_semi_bold, 298 + t.atoms.text_contrast_medium, 299 + a.mb_sm, 300 + ]}> 291 301 {children} 292 302 </Text> 293 303 )
+1 -1
src/components/forms/Toggle.tsx
··· 249 249 return ( 250 250 <Text 251 251 style={[ 252 - a.font_bold, 252 + a.font_semi_bold, 253 253 a.leading_tight, 254 254 { 255 255 userSelect: 'none',
+1 -1
src/components/forms/ToggleButton.tsx
··· 133 133 <Text 134 134 style={[ 135 135 a.text_center, 136 - a.font_bold, 136 + a.font_semi_bold, 137 137 t.atoms.text_contrast_medium, 138 138 textStyles, 139 139 ]}>
+4 -4
src/components/intents/VerifyEmailIntentDialog.tsx
··· 75 75 </View> 76 76 ) : status === 'success' ? ( 77 77 <View style={[a.gap_sm, isNative && a.pb_xl]}> 78 - <Text style={[a.font_heavy, a.text_2xl]}> 78 + <Text style={[a.font_bold, a.text_2xl]}> 79 79 <Trans>Email Verified</Trans> 80 80 </Text> 81 81 <Text style={[a.text_md, a.leading_snug]}> ··· 87 87 </View> 88 88 ) : status === 'failure' ? ( 89 89 <View style={[a.gap_sm]}> 90 - <Text style={[a.font_heavy, a.text_2xl]}> 90 + <Text style={[a.font_bold, a.text_2xl]}> 91 91 <Trans>Invalid Verification Code</Trans> 92 92 </Text> 93 93 <Text style={[a.text_md, a.leading_snug]}> ··· 100 100 </View> 101 101 ) : ( 102 102 <View style={[a.gap_sm, isNative && a.pb_xl]}> 103 - <Text style={[a.font_heavy, a.text_2xl]}> 103 + <Text style={[a.font_bold, a.text_2xl]}> 104 104 <Trans>Email Resent</Trans> 105 105 </Text> 106 106 <Text style={[a.text_md, a.leading_snug]}> 107 107 <Trans> 108 108 We have sent another verification email to{' '} 109 - <Text style={[a.text_md, a.font_bold]}> 109 + <Text style={[a.text_md, a.font_semi_bold]}> 110 110 {currentAccount?.email} 111 111 </Text> 112 112 .
+2 -2
src/components/interstitials/Trending.tsx
··· 82 82 style={[ 83 83 t.atoms.text_contrast_medium, 84 84 a.text_sm, 85 - a.font_bold, 85 + a.font_semi_bold, 86 86 ]}> 87 87 {' '} 88 88 </Text> ··· 101 101 style={[ 102 102 t.atoms.text, 103 103 a.text_sm, 104 - a.font_bold, 104 + a.font_semi_bold, 105 105 {opacity: 0.7}, // NOTE: we use opacity 0.7 instead of a color to match the color of the home pager tab bar 106 106 ]}> 107 107 {topic.topic}
+1 -1
src/components/interstitials/TrendingVideos.tsx
··· 82 82 a.align_center, 83 83 a.justify_between, 84 84 ]}> 85 - <Text style={[a.text_sm, a.font_bold, a.leading_snug]}> 85 + <Text style={[a.text_sm, a.font_semi_bold, a.leading_snug]}> 86 86 <Trans>Trending Videos</Trans> 87 87 </Text> 88 88 <Button
+2 -2
src/components/live/EditLiveDialog.tsx
··· 120 120 style={web({maxWidth: 420})}> 121 121 <View style={[a.gap_lg]}> 122 122 <View style={[a.gap_sm]}> 123 - <Text style={[a.font_bold, a.text_2xl]}> 123 + <Text style={[a.font_semi_bold, a.text_2xl]}> 124 124 <Trans>You are Live</Trans> 125 125 </Text> 126 126 <View style={[a.flex_row, a.align_center, a.gap_xs]}> ··· 182 182 a.text_sm, 183 183 a.leading_snug, 184 184 a.flex_1, 185 - a.font_bold, 185 + a.font_semi_bold, 186 186 {color: t.palette.negative_500}, 187 187 ]}> 188 188 {liveLinkError ? (
+2 -2
src/components/live/GoLiveDialog.tsx
··· 94 94 style={web({maxWidth: 420})}> 95 95 <View style={[a.gap_xl]}> 96 96 <View style={[a.gap_sm]}> 97 - <Text style={[a.font_bold, a.text_2xl]}> 97 + <Text style={[a.font_semi_bold, a.text_2xl]}> 98 98 <Trans>Go Live</Trans> 99 99 </Text> 100 100 <Text style={[a.text_md, a.leading_snug, t.atoms.text_contrast_high]}> ··· 153 153 a.text_sm, 154 154 a.leading_snug, 155 155 a.flex_1, 156 - a.font_bold, 156 + a.font_semi_bold, 157 157 {color: t.palette.negative_500}, 158 158 ]}> 159 159 {liveLinkError ? (
+1 -1
src/components/live/LinkPreview.tsx
··· 70 70 <> 71 71 <Text 72 72 numberOfLines={2} 73 - style={[a.leading_snug, a.font_bold, a.text_md]}> 73 + style={[a.leading_snug, a.font_semi_bold, a.text_md]}> 74 74 {linkMeta.title || linkMeta.url} 75 75 </Text> 76 76 <View style={[a.flex_row, a.align_center, a.gap_2xs]}>
+1 -1
src/components/live/LiveIndicator.tsx
··· 39 39 <Text 40 40 style={[ 41 41 a.text_center, 42 - a.font_bold, 42 + a.font_semi_bold, 43 43 fontSize, 44 44 {color: t.palette.white}, 45 45 ]}>
+1 -1
src/components/live/LiveStatusDialog.tsx
··· 137 137 <View style={[a.w_full, a.justify_center, a.gap_2xs]}> 138 138 <Text 139 139 numberOfLines={3} 140 - style={[a.leading_snug, a.font_bold, a.text_xl]}> 140 + style={[a.leading_snug, a.font_semi_bold, a.text_xl]}> 141 141 {embed.external.title || embed.external.uri} 142 142 </Text> 143 143 <View style={[a.flex_row, a.align_center, a.gap_2xs]}>
+4 -4
src/components/moderation/ContentHider.tsx
··· 178 178 style={[ 179 179 a.flex_1, 180 180 a.text_left, 181 - a.font_bold, 181 + a.font_semi_bold, 182 182 a.leading_snug, 183 - gtMobile && [a.font_bold], 183 + gtMobile && [a.font_semi_bold], 184 184 t.atoms.text_contrast_medium, 185 185 web({ 186 186 marginBottom: 1, ··· 192 192 {!modui.noOverride && ( 193 193 <Text 194 194 style={[ 195 - a.font_bold, 195 + a.font_semi_bold, 196 196 a.leading_snug, 197 - gtMobile && [a.font_bold], 197 + gtMobile && [a.font_semi_bold], 198 198 t.atoms.text_contrast_high, 199 199 web({ 200 200 marginBottom: 1,
+8 -3
src/components/moderation/LabelPreference.tsx
··· 48 48 49 49 return ( 50 50 <View style={[a.gap_xs, a.flex_1]}> 51 - <Text emoji style={[a.font_bold, gtPhone ? a.text_sm : a.text_md]}> 51 + <Text emoji style={[a.font_semi_bold, gtPhone ? a.text_sm : a.text_md]}> 52 52 {name} 53 53 </Text> 54 54 <Text emoji style={[t.atoms.text_contrast_medium, a.leading_snug]}> ··· 241 241 <View style={[a.flex_row, a.gap_xs, a.align_center, a.mt_xs]}> 242 242 <CircleInfo size="sm" fill={t.atoms.text_contrast_high.color} /> 243 243 244 - <Text style={[t.atoms.text_contrast_medium, a.font_bold, a.italic]}> 244 + <Text 245 + style={[ 246 + t.atoms.text_contrast_medium, 247 + a.font_semi_bold, 248 + a.italic, 249 + ]}> 245 250 {adultDisabled ? ( 246 251 <Trans>Adult content is disabled.</Trans> 247 252 ) : isGlobalLabel ? ( ··· 274 279 t.atoms.border_contrast_low, 275 280 a.self_start, 276 281 ]}> 277 - <Text emoji style={[a.font_bold, t.atoms.text_contrast_low]}> 282 + <Text emoji style={[a.font_semi_bold, t.atoms.text_contrast_low]}> 278 283 {currentPrefLabel} 279 284 </Text> 280 285 </View>
+3 -3
src/components/moderation/LabelsOnMeDialog.tsx
··· 67 67 /> 68 68 ) : ( 69 69 <> 70 - <Text style={[a.text_2xl, a.font_heavy, a.pb_xs, a.leading_tight]}> 70 + <Text style={[a.text_2xl, a.font_bold, a.pb_xs, a.leading_tight]}> 71 71 {isAccount ? ( 72 72 <Trans>Labels on your account</Trans> 73 73 ) : ( ··· 134 134 ]}> 135 135 <View style={[a.p_md, a.gap_sm, a.flex_row]}> 136 136 <View style={[a.flex_1, a.gap_xs]}> 137 - <Text emoji style={[a.font_bold, a.text_md]}> 137 + <Text emoji style={[a.font_semi_bold, a.text_md]}> 138 138 {strings.name} 139 139 </Text> 140 140 <Text emoji style={[t.atoms.text_contrast_medium, a.leading_snug]}> ··· 264 264 return ( 265 265 <> 266 266 <View> 267 - <Text style={[a.text_2xl, a.font_bold, a.pb_xs, a.leading_tight]}> 267 + <Text style={[a.text_2xl, a.font_semi_bold, a.pb_xs, a.leading_tight]}> 268 268 <Trans>Appeal "{strings.name}" label</Trans> 269 269 </Text> 270 270 <Text style={[a.text_md, a.leading_snug]}>
+1 -1
src/components/moderation/ModerationDetailsDialog.tsx
··· 142 142 paddingBottom: 0, 143 143 }}> 144 144 <View style={[xGutters, a.pb_lg]}> 145 - <Text emoji style={[t.atoms.text, a.text_2xl, a.font_heavy, a.mb_sm]}> 145 + <Text emoji style={[t.atoms.text, a.text_2xl, a.font_bold, a.mb_sm]}> 146 146 {name} 147 147 </Text> 148 148 <Text style={[t.atoms.text, a.text_sm, a.leading_snug]}>
+6 -6
src/components/moderation/ReportDialog/index.tsx
··· 69 69 const {_} = useLingui() 70 70 return ( 71 71 <Dialog.ScrollableInner label={_(msg`Report dialog`)}> 72 - <Text style={[a.font_heavy, a.text_xl, a.leading_snug, a.pb_xs]}> 72 + <Text style={[a.font_bold, a.text_xl, a.leading_snug, a.pb_xs]}> 73 73 <Trans>Invalid report subject</Trans> 74 74 </Text> 75 75 <Text style={[a.text_md, a.leading_snug]}> ··· 393 393 <Text style={[a.leading_snug, a.pb_xs]}> 394 394 <Trans> 395 395 Your report will be sent to{' '} 396 - <Text style={[a.font_bold, a.leading_snug]}> 396 + <Text style={[a.font_semi_bold, a.leading_snug]}> 397 397 {state.selectedLabeler?.creator.displayName} 398 398 </Text> 399 399 . ··· 529 529 ) : ( 530 530 <Text 531 531 style={[ 532 - a.font_heavy, 532 + a.font_bold, 533 533 a.text_center, 534 534 t.atoms.text, 535 535 { ··· 552 552 <Text 553 553 style={[ 554 554 a.flex_1, 555 - a.font_heavy, 555 + a.font_bold, 556 556 a.text_lg, 557 557 a.leading_snug, 558 558 active ? t.atoms.text : t.atoms.text_contrast_medium, ··· 598 598 ? [t.atoms.border_contrast_high] 599 599 : [t.atoms.border_contrast_low], 600 600 ]}> 601 - <Text style={[a.text_md, a.font_bold, a.leading_snug]}> 601 + <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 602 602 {option.title} 603 603 </Text> 604 604 <Text ··· 670 670 avatar={labeler.creator.avatar} 671 671 /> 672 672 <View style={[a.flex_1]}> 673 - <Text style={[a.text_md, a.font_bold, a.leading_snug]}> 673 + <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 674 674 {title} 675 675 </Text> 676 676 <Text
+8 -2
src/components/moderation/ScreenHider.tsx
··· 86 86 </View> 87 87 </View> 88 88 <Text 89 - style={[a.text_4xl, a.font_bold, a.text_center, a.mb_md, t.atoms.text]}> 89 + style={[ 90 + a.text_4xl, 91 + a.font_semi_bold, 92 + a.text_center, 93 + a.mb_md, 94 + t.atoms.text, 95 + ]}> 90 96 {isNoPwi ? ( 91 97 <Trans>Sign-in Required</Trans> 92 98 ) : ( ··· 112 118 <Text 113 119 style={[ 114 120 a.text_lg, 115 - a.font_bold, 121 + a.font_semi_bold, 116 122 a.leading_snug, 117 123 t.atoms.text, 118 124 a.ml_xs,
+2 -2
src/components/verification/VerificationsDialog.tsx
··· 79 79 gtMobile ? {width: 'auto', maxWidth: 400, minWidth: 200} : a.w_full, 80 80 ]}> 81 81 <View style={[a.gap_sm, a.pb_lg]}> 82 - <Text style={[a.text_2xl, a.font_bold, a.pr_4xl, a.leading_tight]}> 82 + <Text style={[a.text_2xl, a.font_semi_bold, a.pr_4xl, a.leading_tight]}> 83 83 {label} 84 84 </Text> 85 85 <Text style={[a.text_md, a.leading_snug]}> ··· 206 206 <ProfileCard.AvatarPlaceholder /> 207 207 <View style={[a.flex_1]}> 208 208 <Text 209 - style={[a.text_md, a.font_bold, a.leading_snug]} 209 + style={[a.text_md, a.font_semi_bold, a.leading_snug]} 210 210 numberOfLines={1}> 211 211 <Trans>Unknown verifier</Trans> 212 212 </Text>
+2 -1
src/components/verification/VerifierDialog.tsx
··· 94 94 )} 95 95 96 96 <View style={[a.gap_sm]}> 97 - <Text style={[a.text_2xl, a.font_bold, a.pr_4xl, a.leading_tight]}> 97 + <Text 98 + style={[a.text_2xl, a.font_semi_bold, a.pr_4xl, a.leading_tight]}> 98 99 {label} 99 100 </Text> 100 101 <Text style={[a.text_md, a.leading_snug]}>
+1 -1
src/lib/ThemeContext.tsx
··· 1 1 import {type ReactNode} from 'react' 2 2 import {createContext, useContext} from 'react' 3 3 import {type TextStyle, type ViewStyle} from 'react-native' 4 + import {type ThemeName} from '@bsky.app/alf' 4 5 5 - import {type ThemeName} from '#/alf/types' 6 6 import {darkTheme, defaultTheme, dimTheme} from './themes' 7 7 8 8 export type ColorScheme = 'light' | 'dark'
+2 -2
src/lib/custom-animations/CountWheel.tsx
··· 147 147 big ? a.text_md : a.text_sm, 148 148 a.user_select_none, 149 149 isLiked 150 - ? [a.font_bold, s.likeColor] 150 + ? [a.font_semi_bold, s.likeColor] 151 151 : {color: t.palette.contrast_500}, 152 152 ]}> 153 153 {formattedCount} ··· 165 165 big ? a.text_md : a.text_sm, 166 166 a.user_select_none, 167 167 isLiked 168 - ? [a.font_bold, s.likeColor] 168 + ? [a.font_semi_bold, s.likeColor] 169 169 : {color: t.palette.contrast_500}, 170 170 ]}> 171 171 {formattedPrevCount}
+2 -2
src/lib/custom-animations/CountWheel.web.tsx
··· 93 93 big ? a.text_md : a.text_sm, 94 94 a.user_select_none, 95 95 isLiked 96 - ? [a.font_bold, s.likeColor] 96 + ? [a.font_semi_bold, s.likeColor] 97 97 : {color: t.palette.contrast_500}, 98 98 ]}> 99 99 {formattedCount} ··· 110 110 big ? a.text_md : a.text_sm, 111 111 a.user_select_none, 112 112 isLiked 113 - ? [a.font_bold, s.likeColor] 113 + ? [a.font_semi_bold, s.likeColor] 114 114 : {color: t.palette.contrast_500}, 115 115 ]}> 116 116 {formattedPrevCount}
+27 -27
src/lib/themes.ts
··· 101 101 '2xl-medium': { 102 102 fontSize: 18, 103 103 letterSpacing: tokens.TRACKING, 104 - fontWeight: fontWeight.bold, 104 + fontWeight: fontWeight.semiBold, 105 105 }, 106 106 '2xl-bold': { 107 107 fontSize: 18, 108 108 letterSpacing: tokens.TRACKING, 109 - fontWeight: fontWeight.bold, 109 + fontWeight: fontWeight.semiBold, 110 110 }, 111 111 '2xl-heavy': { 112 112 fontSize: 18, 113 113 letterSpacing: tokens.TRACKING, 114 - fontWeight: fontWeight.heavy, 114 + fontWeight: fontWeight.bold, 115 115 }, 116 116 'xl-thin': { 117 117 fontSize: 17, ··· 126 126 'xl-medium': { 127 127 fontSize: 17, 128 128 letterSpacing: tokens.TRACKING, 129 - fontWeight: fontWeight.bold, 129 + fontWeight: fontWeight.semiBold, 130 130 }, 131 131 'xl-bold': { 132 132 fontSize: 17, 133 133 letterSpacing: tokens.TRACKING, 134 - fontWeight: fontWeight.bold, 134 + fontWeight: fontWeight.semiBold, 135 135 }, 136 136 'xl-heavy': { 137 137 fontSize: 17, 138 138 letterSpacing: tokens.TRACKING, 139 - fontWeight: fontWeight.heavy, 139 + fontWeight: fontWeight.bold, 140 140 }, 141 141 'lg-thin': { 142 142 fontSize: 16, ··· 151 151 'lg-medium': { 152 152 fontSize: 16, 153 153 letterSpacing: tokens.TRACKING, 154 - fontWeight: fontWeight.bold, 154 + fontWeight: fontWeight.semiBold, 155 155 }, 156 156 'lg-bold': { 157 157 fontSize: 16, 158 158 letterSpacing: tokens.TRACKING, 159 - fontWeight: fontWeight.bold, 159 + fontWeight: fontWeight.semiBold, 160 160 }, 161 161 'lg-heavy': { 162 162 fontSize: 16, 163 163 letterSpacing: tokens.TRACKING, 164 - fontWeight: fontWeight.heavy, 164 + fontWeight: fontWeight.bold, 165 165 }, 166 166 'md-thin': { 167 167 fontSize: 15, ··· 176 176 'md-medium': { 177 177 fontSize: 15, 178 178 letterSpacing: tokens.TRACKING, 179 - fontWeight: fontWeight.bold, 179 + fontWeight: fontWeight.semiBold, 180 180 }, 181 181 'md-bold': { 182 182 fontSize: 15, 183 183 letterSpacing: tokens.TRACKING, 184 - fontWeight: fontWeight.bold, 184 + fontWeight: fontWeight.semiBold, 185 185 }, 186 186 'md-heavy': { 187 187 fontSize: 15, 188 188 letterSpacing: tokens.TRACKING, 189 - fontWeight: fontWeight.heavy, 189 + fontWeight: fontWeight.bold, 190 190 }, 191 191 'sm-thin': { 192 192 fontSize: 14, ··· 201 201 'sm-medium': { 202 202 fontSize: 14, 203 203 letterSpacing: tokens.TRACKING, 204 - fontWeight: fontWeight.bold, 204 + fontWeight: fontWeight.semiBold, 205 205 }, 206 206 'sm-bold': { 207 207 fontSize: 14, 208 208 letterSpacing: tokens.TRACKING, 209 - fontWeight: fontWeight.bold, 209 + fontWeight: fontWeight.semiBold, 210 210 }, 211 211 'sm-heavy': { 212 212 fontSize: 14, 213 213 letterSpacing: tokens.TRACKING, 214 - fontWeight: fontWeight.heavy, 214 + fontWeight: fontWeight.bold, 215 215 }, 216 216 'xs-thin': { 217 217 fontSize: 13, ··· 226 226 'xs-medium': { 227 227 fontSize: 13, 228 228 letterSpacing: tokens.TRACKING, 229 - fontWeight: fontWeight.bold, 229 + fontWeight: fontWeight.semiBold, 230 230 }, 231 231 'xs-bold': { 232 232 fontSize: 13, 233 233 letterSpacing: tokens.TRACKING, 234 - fontWeight: fontWeight.bold, 234 + fontWeight: fontWeight.semiBold, 235 235 }, 236 236 'xs-heavy': { 237 237 fontSize: 13, 238 238 letterSpacing: tokens.TRACKING, 239 - fontWeight: fontWeight.heavy, 239 + fontWeight: fontWeight.bold, 240 240 }, 241 241 242 242 'title-2xl': { 243 243 fontSize: 34, 244 244 letterSpacing: tokens.TRACKING, 245 - fontWeight: fontWeight.bold, 245 + fontWeight: fontWeight.semiBold, 246 246 }, 247 247 'title-xl': { 248 248 fontSize: 28, 249 249 letterSpacing: tokens.TRACKING, 250 - fontWeight: fontWeight.bold, 250 + fontWeight: fontWeight.semiBold, 251 251 }, 252 252 'title-lg': { 253 253 fontSize: 22, 254 - fontWeight: fontWeight.bold, 254 + fontWeight: fontWeight.semiBold, 255 255 }, 256 256 title: { 257 - fontWeight: fontWeight.bold, 257 + fontWeight: fontWeight.semiBold, 258 258 fontSize: 20, 259 259 letterSpacing: tokens.TRACKING, 260 260 }, 261 261 'title-sm': { 262 - fontWeight: fontWeight.bold, 262 + fontWeight: fontWeight.semiBold, 263 263 fontSize: 17, 264 264 letterSpacing: tokens.TRACKING, 265 265 }, ··· 274 274 fontWeight: fontWeight.normal, 275 275 }, 276 276 'button-lg': { 277 - fontWeight: fontWeight.bold, 277 + fontWeight: fontWeight.semiBold, 278 278 fontSize: 18, 279 279 letterSpacing: tokens.TRACKING, 280 280 }, 281 281 button: { 282 - fontWeight: fontWeight.bold, 282 + fontWeight: fontWeight.semiBold, 283 283 fontSize: 14, 284 284 letterSpacing: tokens.TRACKING, 285 285 }, ··· 296 296 palette: { 297 297 ...defaultTheme.palette, 298 298 default: { 299 - background: darkPalette.black, 299 + background: darkPalette.contrast_0, 300 300 backgroundLight: darkPalette.contrast_25, 301 301 text: darkPalette.white, 302 302 textLight: darkPalette.contrast_600, ··· 345 345 ...darkTheme.palette, 346 346 default: { 347 347 ...darkTheme.palette.default, 348 - background: dimPalette.black, 348 + background: dimPalette.contrast_0, 349 349 backgroundLight: dimPalette.contrast_25, 350 350 text: dimPalette.white, 351 351 textLight: dimPalette.contrast_700,
+268 -268
src/locale/locales/en/messages.po
··· 95 95 msgid "{0, plural, one {following} other {following}}" 96 96 msgstr "" 97 97 98 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:479 98 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:480 99 99 msgid "{0, plural, one {like} other {likes}}" 100 100 msgstr "" 101 101 ··· 103 103 msgid "{0, plural, one {post} other {posts}}" 104 104 msgstr "" 105 105 106 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:463 106 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:464 107 107 msgid "{0, plural, one {quote} other {quotes}}" 108 108 msgstr "" 109 109 110 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:445 110 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:446 111 111 msgid "{0, plural, one {repost} other {reposts}}" 112 112 msgstr "" 113 113 114 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:490 114 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:491 115 115 msgid "{0, plural, one {save} other {saves}}" 116 116 msgstr "" 117 117 ··· 120 120 msgstr "" 121 121 122 122 #. Number of users (always at least 25) who have joined Bluesky using a specific starter pack 123 - #: src/screens/StarterPack/StarterPackScreen.tsx:490 123 + #: src/screens/StarterPack/StarterPackScreen.tsx:494 124 124 msgid "{0, plural, other {# people have}} used this starter pack!" 125 125 msgstr "" 126 126 ··· 129 129 msgstr "" 130 130 131 131 #. Pattern: {wordValue} in tags 132 - #: src/components/dialogs/MutedWords.tsx:475 132 + #: src/components/dialogs/MutedWords.tsx:481 133 133 msgid "{0} <0>in <1>tags</1></0>" 134 134 msgstr "" 135 135 136 136 #. Pattern: {wordValue} in text, tags 137 - #: src/components/dialogs/MutedWords.tsx:465 137 + #: src/components/dialogs/MutedWords.tsx:470 138 138 msgid "{0} <0>in <1>text & tags</1></0>" 139 139 msgstr "" 140 140 ··· 154 154 msgid "{0} is not available" 155 155 msgstr "" 156 156 157 - #: src/screens/StarterPack/StarterPackLandingScreen.tsx:223 157 + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:232 158 158 msgid "{0} joined this week" 159 159 msgstr "" 160 160 ··· 505 505 msgid "⚠Invalid Handle" 506 506 msgstr "" 507 507 508 - #: src/components/dialogs/MutedWords.tsx:193 508 + #: src/components/dialogs/MutedWords.tsx:198 509 509 msgid "24 hours" 510 510 msgstr "" 511 511 ··· 513 513 msgid "2FA Confirmation" 514 514 msgstr "" 515 515 516 - #: src/components/dialogs/MutedWords.tsx:232 516 + #: src/components/dialogs/MutedWords.tsx:237 517 517 msgid "30 days" 518 518 msgstr "" 519 519 520 - #: src/components/dialogs/MutedWords.tsx:217 520 + #: src/components/dialogs/MutedWords.tsx:222 521 521 msgid "7 days" 522 522 msgstr "" 523 523 ··· 613 613 msgid "Account Muted by List" 614 614 msgstr "" 615 615 616 - #: src/screens/Settings/Settings.tsx:624 616 + #: src/screens/Settings/Settings.tsx:626 617 617 msgid "Account options" 618 618 msgstr "" 619 619 620 - #: src/screens/Settings/Settings.tsx:660 620 + #: src/screens/Settings/Settings.tsx:662 621 621 msgid "Account removed from quick access" 622 622 msgstr "" 623 623 ··· 638 638 msgid "Account unmuted" 639 639 msgstr "" 640 640 641 - #: src/components/verification/VerifierDialog.tsx:96 641 + #: src/components/verification/VerifierDialog.tsx:97 642 642 msgid "Accounts with a scalloped blue check mark <0><1/></0> can verify others. These trusted verifiers are selected by Bluesky." 643 643 msgstr "" 644 644 ··· 653 653 msgstr "" 654 654 655 655 #: src/components/dialogs/lists/ListAddRemoveUsersDialog.tsx:169 656 - #: src/components/dialogs/MutedWords.tsx:328 656 + #: src/components/dialogs/MutedWords.tsx:333 657 657 #: src/components/dialogs/StarterPackDialog.tsx:371 658 658 #: src/components/dialogs/StarterPackDialog.tsx:377 659 659 #: src/view/com/modals/UserAddRemoveLists.tsx:235 660 660 msgid "Add" 661 661 msgstr "" 662 662 663 - #: src/screens/StarterPack/Wizard/index.tsx:608 663 + #: src/screens/StarterPack/Wizard/index.tsx:613 664 664 msgid "Add {0} more to continue" 665 665 msgstr "" 666 666 ··· 689 689 690 690 #: src/view/com/composer/GifAltText.tsx:76 691 691 #: src/view/com/composer/GifAltText.tsx:144 692 - #: src/view/com/composer/GifAltText.tsx:210 692 + #: src/view/com/composer/GifAltText.tsx:211 693 693 #: src/view/com/composer/photos/Gallery.tsx:170 694 694 #: src/view/com/composer/photos/Gallery.tsx:217 695 695 #: src/view/com/composer/photos/ImageAltTextDialog.tsx:88 ··· 701 701 msgid "Add alt text (optional)" 702 702 msgstr "" 703 703 704 - #: src/screens/Settings/Settings.tsx:564 705 - #: src/screens/Settings/Settings.tsx:567 704 + #: src/screens/Settings/Settings.tsx:566 705 + #: src/screens/Settings/Settings.tsx:569 706 706 #: src/view/shell/desktop/LeftNav.tsx:262 707 707 #: src/view/shell/desktop/LeftNav.tsx:266 708 708 msgid "Add another account" ··· 740 740 msgid "Add more details (optional)" 741 741 msgstr "" 742 742 743 - #: src/components/dialogs/MutedWords.tsx:321 743 + #: src/components/dialogs/MutedWords.tsx:326 744 744 msgid "Add mute word with chosen settings" 745 745 msgstr "" 746 746 747 - #: src/components/dialogs/MutedWords.tsx:112 747 + #: src/components/dialogs/MutedWords.tsx:117 748 748 msgid "Add muted words and tags" 749 749 msgstr "" 750 750 ··· 828 828 msgid "Adult Content" 829 829 msgstr "" 830 830 831 - #: src/screens/Moderation/index.tsx:423 831 + #: src/screens/Moderation/index.tsx:429 832 832 msgid "Adult content can only be enabled via the Web at <0>bsky.app</0>." 833 833 msgstr "" 834 834 835 - #: src/components/moderation/LabelPreference.tsx:246 835 + #: src/components/moderation/LabelPreference.tsx:251 836 836 msgid "Adult content is disabled." 837 837 msgstr "" 838 838 ··· 841 841 msgid "Adult Content labels" 842 842 msgstr "" 843 843 844 - #: src/screens/Moderation/index.tsx:473 844 + #: src/screens/Moderation/index.tsx:479 845 845 msgid "Advanced" 846 846 msgstr "" 847 847 ··· 1145 1145 msgstr "" 1146 1146 1147 1147 #: src/components/moderation/LabelsOnMeDialog.tsx:258 1148 - #: src/screens/Messages/components/ChatDisabled.tsx:98 1148 + #: src/screens/Messages/components/ChatDisabled.tsx:103 1149 1149 msgctxt "toast" 1150 1150 msgid "Appeal submitted" 1151 1151 msgstr "" ··· 1159 1159 msgid "Appeal Suspension" 1160 1160 msgstr "" 1161 1161 1162 - #: src/screens/Messages/components/ChatDisabled.tsx:52 1163 - #: src/screens/Messages/components/ChatDisabled.tsx:54 1164 - #: src/screens/Messages/components/ChatDisabled.tsx:106 1165 - #: src/screens/Messages/components/ChatDisabled.tsx:108 1162 + #: src/screens/Messages/components/ChatDisabled.tsx:57 1163 + #: src/screens/Messages/components/ChatDisabled.tsx:59 1164 + #: src/screens/Messages/components/ChatDisabled.tsx:111 1165 + #: src/screens/Messages/components/ChatDisabled.tsx:113 1166 1166 msgid "Appeal this decision" 1167 1167 msgstr "" 1168 1168 ··· 1183 1183 msgid "Apply Pull Request" 1184 1184 msgstr "" 1185 1185 1186 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:659 1186 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:660 1187 1187 msgid "Archived from {0}" 1188 1188 msgstr "" 1189 1189 1190 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:628 1191 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:667 1190 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:629 1191 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:668 1192 1192 msgid "Archived post" 1193 1193 msgstr "" 1194 1194 ··· 1200 1200 msgid "Are you sure you want to delete this message? The message will be deleted for you, but not for the other participant." 1201 1201 msgstr "" 1202 1202 1203 - #: src/screens/StarterPack/StarterPackScreen.tsx:657 1203 + #: src/screens/StarterPack/StarterPackScreen.tsx:661 1204 1204 msgid "Are you sure you want to delete this starter pack?" 1205 1205 msgstr "" 1206 1206 ··· 1229 1229 msgid "Are you sure you'd like to discard this post?" 1230 1230 msgstr "" 1231 1231 1232 - #: src/components/dialogs/MutedWords.tsx:433 1232 + #: src/components/dialogs/MutedWords.tsx:438 1233 1233 msgid "Are you sure?" 1234 1234 msgstr "" 1235 1235 ··· 1284 1284 #: src/screens/Login/LoginForm.tsx:316 1285 1285 #: src/screens/Login/SetNewPasswordForm.tsx:168 1286 1286 #: src/screens/Login/SetNewPasswordForm.tsx:174 1287 - #: src/screens/Messages/components/ChatDisabled.tsx:140 1288 - #: src/screens/Messages/components/ChatDisabled.tsx:141 1287 + #: src/screens/Messages/components/ChatDisabled.tsx:145 1288 + #: src/screens/Messages/components/ChatDisabled.tsx:146 1289 1289 #: src/screens/Profile/Header/Shell.tsx:158 1290 1290 #: src/screens/Settings/components/ChangePasswordDialog.tsx:271 1291 1291 #: src/screens/Settings/components/ChangePasswordDialog.tsx:280 ··· 1294 1294 msgid "Back" 1295 1295 msgstr "" 1296 1296 1297 - #: src/screens/Messages/Inbox.tsx:259 1297 + #: src/screens/Messages/Inbox.tsx:261 1298 1298 msgid "Back to Chats" 1299 1299 msgstr "" 1300 1300 ··· 1323 1323 1324 1324 #: src/components/dms/dialogs/NewChatDialog.tsx:54 1325 1325 #: src/components/dms/MessageProfileButton.tsx:58 1326 - #: src/screens/Messages/ChatList.tsx:369 1326 + #: src/screens/Messages/ChatList.tsx:371 1327 1327 #: src/screens/Messages/Conversation.tsx:228 1328 1328 msgid "Before you can message another user, you must first verify your email." 1329 1329 msgstr "" ··· 1372 1372 msgid "Block accounts" 1373 1373 msgstr "" 1374 1374 1375 - #: src/components/dms/ReportDialog.tsx:322 1375 + #: src/components/dms/ReportDialog.tsx:323 1376 1376 msgid "Block and Delete" 1377 1377 msgstr "" 1378 1378 1379 - #: src/components/dms/ReportDialog.tsx:357 1379 + #: src/components/dms/ReportDialog.tsx:358 1380 1380 msgid "Block and/or delete this conversation" 1381 1381 msgstr "" 1382 1382 ··· 1392 1392 msgid "Block these accounts?" 1393 1393 msgstr "" 1394 1394 1395 - #: src/components/dms/ReportDialog.tsx:361 1396 - #: src/components/dms/ReportDialog.tsx:364 1395 + #: src/components/dms/ReportDialog.tsx:362 1396 + #: src/components/dms/ReportDialog.tsx:365 1397 1397 msgid "Block user" 1398 1398 msgstr "" 1399 1399 1400 - #: src/components/dms/ReportDialog.tsx:328 1400 + #: src/components/dms/ReportDialog.tsx:329 1401 1401 msgid "Block User" 1402 1402 msgstr "" 1403 1403 ··· 1405 1405 msgid "Blocked" 1406 1406 msgstr "" 1407 1407 1408 - #: src/screens/Moderation/index.tsx:301 1408 + #: src/screens/Moderation/index.tsx:306 1409 1409 msgid "Blocked accounts" 1410 1410 msgstr "" 1411 1411 ··· 1435 1435 msgid "Blocking will not prevent labels from being applied on your account, but it will stop this account from replying in your threads or interacting with you." 1436 1436 msgstr "" 1437 1437 1438 - #: src/view/com/auth/SplashScreen.web.tsx:175 1438 + #: src/view/com/auth/SplashScreen.web.tsx:179 1439 1439 msgid "Blog" 1440 1440 msgstr "" 1441 1441 ··· 1444 1444 msgid "Bluesky" 1445 1445 msgstr "" 1446 1446 1447 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:684 1447 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:690 1448 1448 msgid "Bluesky cannot confirm the authenticity of the claimed date." 1449 1449 msgstr "" 1450 1450 ··· 1553 1553 msgid "Browse topic {displayName}" 1554 1554 msgstr "" 1555 1555 1556 - #: src/view/com/auth/SplashScreen.web.tsx:170 1556 + #: src/view/com/auth/SplashScreen.web.tsx:174 1557 1557 msgid "Business" 1558 1558 msgstr "" 1559 1559 ··· 1618 1618 #: src/screens/Profile/Header/EditProfileDialog.tsx:226 1619 1619 #: src/screens/Search/Shell.tsx:349 1620 1620 #: src/screens/Settings/AppIconSettings/index.tsx:44 1621 - #: src/screens/Settings/AppIconSettings/index.tsx:225 1621 + #: src/screens/Settings/AppIconSettings/index.tsx:230 1622 1622 #: src/screens/Settings/components/ChangeHandleDialog.tsx:78 1623 1623 #: src/screens/Settings/components/ChangeHandleDialog.tsx:85 1624 1624 #: src/screens/Settings/components/ChangePasswordDialog.tsx:246 ··· 1682 1682 msgstr "" 1683 1683 1684 1684 #: src/screens/Settings/AppIconSettings/index.tsx:38 1685 - #: src/screens/Settings/AppIconSettings/index.tsx:221 1685 + #: src/screens/Settings/AppIconSettings/index.tsx:226 1686 1686 msgid "Change app icon to \"{0}\"" 1687 1687 msgstr "" 1688 1688 ··· 1720 1720 msgid "Change your password" 1721 1721 msgstr "" 1722 1722 1723 - #: src/screens/Settings/AppIconSettings/index.tsx:216 1723 + #: src/screens/Settings/AppIconSettings/index.tsx:221 1724 1724 msgid "Changes app icon" 1725 1725 msgstr "" 1726 1726 ··· 1775 1775 #: src/Navigation.tsx:554 1776 1776 #: src/screens/Messages/ChatList.tsx:81 1777 1777 #: src/screens/Messages/ChatList.tsx:85 1778 - #: src/screens/Messages/ChatList.tsx:378 1778 + #: src/screens/Messages/ChatList.tsx:380 1779 1779 msgid "Chat settings" 1780 1780 msgstr "" 1781 1781 ··· 1789 1789 msgstr "" 1790 1790 1791 1791 #: src/screens/Messages/ChatList.tsx:76 1792 - #: src/screens/Messages/ChatList.tsx:394 1793 - #: src/screens/Messages/ChatList.tsx:418 1792 + #: src/screens/Messages/ChatList.tsx:396 1793 + #: src/screens/Messages/ChatList.tsx:420 1794 1794 msgid "Chats" 1795 1795 msgstr "" 1796 1796 ··· 1847 1847 msgid "Choose your password" 1848 1848 msgstr "" 1849 1849 1850 - #: src/screens/Signup/index.tsx:180 1850 + #: src/screens/Signup/index.tsx:181 1851 1851 msgid "Choose your username" 1852 1852 msgstr "" 1853 1853 ··· 1922 1922 #: src/components/dialogs/SearchablePeopleList.tsx:295 1923 1923 #: src/components/dialogs/StarterPackDialog.tsx:179 1924 1924 #: src/components/dms/EmojiPopup.android.tsx:58 1925 - #: src/components/dms/ReportDialog.tsx:386 1926 - #: src/components/dms/ReportDialog.tsx:395 1925 + #: src/components/dms/ReportDialog.tsx:387 1926 + #: src/components/dms/ReportDialog.tsx:396 1927 1927 #: src/components/live/EditLiveDialog.tsx:229 1928 1928 #: src/components/live/EditLiveDialog.tsx:235 1929 1929 #: src/components/NewskieDialog.tsx:167 ··· 1933 1933 #: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:118 1934 1934 #: src/components/StarterPack/Wizard/WizardEditListDialog.tsx:124 1935 1935 #: src/components/verification/VerificationsDialog.tsx:144 1936 - #: src/components/verification/VerifierDialog.tsx:149 1936 + #: src/components/verification/VerifierDialog.tsx:150 1937 1937 #: src/components/WhoCanReply.tsx:202 1938 1938 #: src/components/WhoCanReply.tsx:209 1939 1939 #: src/screens/Settings/components/ChangePasswordDialog.tsx:286 1940 1940 #: src/screens/Settings/components/ChangePasswordDialog.tsx:291 1941 1941 #: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:313 1942 - #: src/view/com/feeds/MissingFeed.tsx:208 1943 - #: src/view/com/feeds/MissingFeed.tsx:215 1942 + #: src/view/com/feeds/MissingFeed.tsx:210 1943 + #: src/view/com/feeds/MissingFeed.tsx:217 1944 1944 msgid "Close" 1945 1945 msgstr "" 1946 1946 ··· 1961 1961 #: src/components/ageAssurance/AgeAssuranceInitDialog.tsx:230 1962 1962 #: src/components/dialogs/GifSelect.tsx:263 1963 1963 #: src/components/verification/VerificationsDialog.tsx:136 1964 - #: src/components/verification/VerifierDialog.tsx:141 1964 + #: src/components/verification/VerifierDialog.tsx:142 1965 1965 #: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:182 1966 1966 #: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:276 1967 1967 #: src/view/com/composer/select-language/PostLanguageSelectDialog.tsx:308 ··· 2058 2058 msgid "Complete onboarding and start using your account" 2059 2059 msgstr "" 2060 2060 2061 - #: src/screens/Signup/index.tsx:182 2061 + #: src/screens/Signup/index.tsx:183 2062 2062 msgid "Complete the challenge" 2063 2063 msgstr "" 2064 2064 ··· 2082 2082 msgid "Configure content filtering setting for category: {name}" 2083 2083 msgstr "" 2084 2084 2085 - #: src/components/moderation/LabelPreference.tsx:248 2085 + #: src/components/moderation/LabelPreference.tsx:253 2086 2086 msgid "Configured in <0>moderation settings</0>." 2087 2087 msgstr "" 2088 2088 ··· 2101 2101 msgid "Confirm delete account" 2102 2102 msgstr "" 2103 2103 2104 - #: src/screens/Moderation/index.tsx:349 2104 + #: src/screens/Moderation/index.tsx:354 2105 2105 msgid "Confirm your age:" 2106 2106 msgstr "" 2107 2107 2108 - #: src/screens/Moderation/index.tsx:340 2108 + #: src/screens/Moderation/index.tsx:345 2109 2109 msgid "Confirm your birthdate" 2110 2110 msgstr "" 2111 2111 2112 2112 #: src/components/ageAssurance/AgeAssuranceAccountCard.tsx:89 2113 - #: src/components/BlockedGeoOverlay.tsx:141 2114 - #: src/components/BlockedGeoOverlay.tsx:147 2113 + #: src/components/BlockedGeoOverlay.tsx:140 2114 + #: src/components/BlockedGeoOverlay.tsx:146 2115 2115 #: src/components/dialogs/DeviceLocationRequestDialog.tsx:45 2116 2116 #: src/components/dialogs/DeviceLocationRequestDialog.tsx:112 2117 2117 msgid "Confirm your location" 2118 2118 msgstr "" 2119 2119 2120 - #: src/components/BlockedGeoOverlay.tsx:135 2120 + #: src/components/BlockedGeoOverlay.tsx:134 2121 2121 msgid "Confirm your location with GPS. Your location data is not tracked and does not leave your device." 2122 2122 msgstr "" 2123 2123 ··· 2146 2146 msgstr "" 2147 2147 2148 2148 #: src/components/ageAssurance/AgeAssuranceInitDialog.tsx:155 2149 - #: src/screens/Signup/index.tsx:221 2150 - #: src/screens/Signup/index.tsx:224 2149 + #: src/screens/Signup/index.tsx:222 2150 + #: src/screens/Signup/index.tsx:225 2151 2151 msgid "Contact support" 2152 2152 msgstr "" 2153 2153 ··· 2172 2172 msgid "Content Blocked" 2173 2173 msgstr "" 2174 2174 2175 - #: src/screens/Moderation/index.tsx:336 2176 - #: src/screens/Moderation/index.tsx:370 2175 + #: src/screens/Moderation/index.tsx:341 2176 + #: src/screens/Moderation/index.tsx:375 2177 2177 msgid "Content filters" 2178 2178 msgstr "" 2179 2179 ··· 2192 2192 msgstr "" 2193 2193 2194 2194 #: src/components/moderation/ModerationDetailsDialog.tsx:50 2195 - #: src/components/moderation/ScreenHider.tsx:93 2195 + #: src/components/moderation/ScreenHider.tsx:99 2196 2196 #: src/lib/moderation/useGlobalLabelStrings.ts:22 2197 2197 #: src/lib/moderation/useModerationCauseDescription.ts:45 2198 2198 msgid "Content Warning" ··· 2237 2237 msgid "Conversation" 2238 2238 msgstr "" 2239 2239 2240 - #: src/components/dms/ReportDialog.tsx:323 2241 - #: src/components/dms/ReportDialog.tsx:326 2240 + #: src/components/dms/ReportDialog.tsx:324 2241 + #: src/components/dms/ReportDialog.tsx:327 2242 2242 msgctxt "toast" 2243 2243 msgid "Conversation deleted" 2244 2244 msgstr "" ··· 2307 2307 msgstr "" 2308 2308 2309 2309 #: src/components/StarterPack/ShareDialog.tsx:113 2310 - #: src/screens/StarterPack/StarterPackScreen.tsx:617 2310 + #: src/screens/StarterPack/StarterPackScreen.tsx:621 2311 2311 msgid "Copy link" 2312 2312 msgstr "" 2313 2313 ··· 2332 2332 msgid "Copy link to profile" 2333 2333 msgstr "" 2334 2334 2335 - #: src/screens/StarterPack/StarterPackScreen.tsx:610 2335 + #: src/screens/StarterPack/StarterPackScreen.tsx:614 2336 2336 msgid "Copy link to starter pack" 2337 2337 msgstr "" 2338 2338 ··· 2379 2379 msgstr "" 2380 2380 2381 2381 #: src/components/dms/LeaveConvoPrompt.tsx:35 2382 - #: src/components/dms/ReportDialog.tsx:315 2382 + #: src/components/dms/ReportDialog.tsx:316 2383 2383 msgid "Could not leave chat" 2384 2384 msgstr "" 2385 2385 ··· 2436 2436 #: src/components/WelcomeModal.tsx:155 2437 2437 #: src/components/WelcomeModal.tsx:163 2438 2438 #: src/view/com/auth/SplashScreen.tsx:72 2439 - #: src/view/com/auth/SplashScreen.web.tsx:117 2439 + #: src/view/com/auth/SplashScreen.web.tsx:121 2440 2440 #: src/view/shell/bottom-bar/BottomBar.tsx:345 2441 2441 #: src/view/shell/bottom-bar/BottomBar.tsx:350 2442 2442 #: src/view/shell/bottom-bar/BottomBarWeb.tsx:206 ··· 2456 2456 msgid "Create an account" 2457 2457 msgstr "" 2458 2458 2459 - #: src/screens/StarterPack/StarterPackLandingScreen.tsx:303 2460 - #: src/screens/StarterPack/StarterPackLandingScreen.tsx:310 2459 + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:312 2460 + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:319 2461 2461 msgid "Create an account without using this starter pack" 2462 2462 msgstr "" 2463 2463 ··· 2474 2474 msgstr "" 2475 2475 2476 2476 #: src/view/com/auth/SplashScreen.tsx:64 2477 - #: src/view/com/auth/SplashScreen.web.tsx:109 2477 + #: src/view/com/auth/SplashScreen.web.tsx:113 2478 2478 msgid "Create new account" 2479 2479 msgstr "" 2480 2480 ··· 2518 2518 msgid "Customize who can interact with this post." 2519 2519 msgstr "" 2520 2520 2521 - #: src/screens/Onboarding/Layout.tsx:61 2521 + #: src/screens/Onboarding/Layout.tsx:60 2522 2522 msgid "Customizes your Bluesky experience" 2523 2523 msgstr "" 2524 2524 ··· 2573 2573 #: src/screens/Messages/components/ChatStatusInfo.tsx:55 2574 2574 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:280 2575 2575 #: src/screens/Settings/AppPasswords.tsx:212 2576 - #: src/screens/StarterPack/StarterPackScreen.tsx:599 2577 - #: src/screens/StarterPack/StarterPackScreen.tsx:688 2578 - #: src/screens/StarterPack/StarterPackScreen.tsx:760 2576 + #: src/screens/StarterPack/StarterPackScreen.tsx:603 2577 + #: src/screens/StarterPack/StarterPackScreen.tsx:692 2578 + #: src/screens/StarterPack/StarterPackScreen.tsx:764 2579 2579 msgid "Delete" 2580 2580 msgstr "" 2581 2581 ··· 2605 2605 msgid "Delete chat declaration record" 2606 2606 msgstr "" 2607 2607 2608 - #: src/components/dms/ReportDialog.tsx:367 2609 - #: src/components/dms/ReportDialog.tsx:370 2608 + #: src/components/dms/ReportDialog.tsx:368 2609 + #: src/components/dms/ReportDialog.tsx:371 2610 2610 #: src/screens/Messages/components/RequestButtons.tsx:136 2611 2611 #: src/screens/Messages/components/RequestButtons.tsx:139 2612 2612 msgid "Delete conversation" 2613 2613 msgstr "" 2614 2614 2615 - #: src/components/dms/ReportDialog.tsx:325 2615 + #: src/components/dms/ReportDialog.tsx:326 2616 2616 msgid "Delete Conversation" 2617 2617 msgstr "" 2618 2618 ··· 2643 2643 msgid "Delete post" 2644 2644 msgstr "" 2645 2645 2646 - #: src/screens/StarterPack/StarterPackScreen.tsx:593 2647 - #: src/screens/StarterPack/StarterPackScreen.tsx:751 2646 + #: src/screens/StarterPack/StarterPackScreen.tsx:597 2647 + #: src/screens/StarterPack/StarterPackScreen.tsx:755 2648 2648 msgid "Delete starter pack" 2649 2649 msgstr "" 2650 2650 2651 - #: src/screens/StarterPack/StarterPackScreen.tsx:654 2651 + #: src/screens/StarterPack/StarterPackScreen.tsx:658 2652 2652 msgid "Delete starter pack?" 2653 2653 msgstr "" 2654 2654 ··· 2746 2746 #: src/lib/moderation/useLabelBehaviorDescription.ts:71 2747 2747 #: src/screens/Messages/Settings.tsx:144 2748 2748 #: src/screens/Messages/Settings.tsx:147 2749 - #: src/screens/Moderation/index.tsx:413 2749 + #: src/screens/Moderation/index.tsx:419 2750 2750 msgid "Disabled" 2751 2751 msgstr "" 2752 2752 ··· 2824 2824 msgid "DNS Panel" 2825 2825 msgstr "" 2826 2826 2827 - #: src/components/dialogs/MutedWords.tsx:302 2827 + #: src/components/dialogs/MutedWords.tsx:307 2828 2828 msgid "Do not apply this mute word to users you follow" 2829 2829 msgstr "" 2830 2830 ··· 2855 2855 2856 2856 #: src/components/dialogs/BirthDateSettings.tsx:149 2857 2857 #: src/components/dialogs/BirthDateSettings.tsx:156 2858 - #: src/components/dms/ReportDialog.tsx:319 2858 + #: src/components/dms/ReportDialog.tsx:320 2859 2859 #: src/components/forms/DateField/index.tsx:103 2860 2860 #: src/components/forms/DateField/index.tsx:109 2861 2861 #: src/components/Select/index.tsx:185 ··· 2896 2896 msgid "Double tap to like" 2897 2897 msgstr "" 2898 2898 2899 - #: src/screens/StarterPack/StarterPackLandingScreen.tsx:321 2899 + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:330 2900 2900 msgid "Download Bluesky" 2901 2901 msgstr "" 2902 2902 ··· 2909 2909 msgid "Drop to add images" 2910 2910 msgstr "" 2911 2911 2912 - #: src/components/dialogs/MutedWords.tsx:153 2912 + #: src/components/dialogs/MutedWords.tsx:158 2913 2913 msgid "Duration:" 2914 2914 msgstr "" 2915 2915 ··· 2938 2938 msgstr "" 2939 2939 2940 2940 #: src/screens/Settings/AccountSettings.tsx:145 2941 - #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:249 2942 - #: src/screens/StarterPack/StarterPackScreen.tsx:588 2941 + #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:252 2942 + #: src/screens/StarterPack/StarterPackScreen.tsx:592 2943 2943 #: src/screens/StarterPack/Wizard/index.tsx:339 2944 2944 #: src/screens/StarterPack/Wizard/index.tsx:344 2945 2945 msgid "Edit" ··· 2995 2995 msgid "Edit My Feeds" 2996 2996 msgstr "" 2997 2997 2998 - #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:240 2998 + #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:243 2999 2999 msgid "Edit notifications from {0}" 3000 3000 msgstr "" 3001 3001 ··· 3020 3020 msgid "Edit Profile" 3021 3021 msgstr "" 3022 3022 3023 - #: src/screens/StarterPack/StarterPackScreen.tsx:580 3023 + #: src/screens/StarterPack/StarterPackScreen.tsx:584 3024 3024 msgid "Edit starter pack" 3025 3025 msgstr "" 3026 3026 ··· 3108 3108 msgid "Enable {0} only" 3109 3109 msgstr "" 3110 3110 3111 - #: src/screens/Moderation/index.tsx:400 3111 + #: src/screens/Moderation/index.tsx:406 3112 3112 msgid "Enable adult content" 3113 3113 msgstr "" 3114 3114 ··· 3154 3154 3155 3155 #: src/screens/Messages/Settings.tsx:135 3156 3156 #: src/screens/Messages/Settings.tsx:138 3157 - #: src/screens/Moderation/index.tsx:411 3157 + #: src/screens/Moderation/index.tsx:417 3158 3158 msgid "Enabled" 3159 3159 msgstr "" 3160 3160 ··· 3170 3170 msgid "Enter a password" 3171 3171 msgstr "" 3172 3172 3173 - #: src/components/dialogs/MutedWords.tsx:127 3174 - #: src/components/dialogs/MutedWords.tsx:128 3173 + #: src/components/dialogs/MutedWords.tsx:132 3174 + #: src/components/dialogs/MutedWords.tsx:133 3175 3175 msgid "Enter a word or tag" 3176 3176 msgstr "" 3177 3177 ··· 3235 3235 msgid "Error loading preference" 3236 3236 msgstr "" 3237 3237 3238 - #: src/view/com/feeds/MissingFeed.tsx:198 3238 + #: src/view/com/feeds/MissingFeed.tsx:200 3239 3239 msgid "Error message" 3240 3240 msgstr "" 3241 3241 ··· 3289 3289 msgid "Excessive or unwanted messages" 3290 3290 msgstr "" 3291 3291 3292 - #: src/components/dialogs/MutedWords.tsx:311 3292 + #: src/components/dialogs/MutedWords.tsx:316 3293 3293 msgid "Exclude users you follow" 3294 3294 msgstr "" 3295 3295 3296 - #: src/components/dialogs/MutedWords.tsx:514 3296 + #: src/components/dialogs/MutedWords.tsx:521 3297 3297 msgid "Excludes users you follow" 3298 3298 msgstr "" 3299 3299 ··· 3337 3337 msgid "Experimental" 3338 3338 msgstr "" 3339 3339 3340 - #: src/components/dialogs/MutedWords.tsx:500 3340 + #: src/components/dialogs/MutedWords.tsx:507 3341 3341 msgid "Expired" 3342 3342 msgstr "" 3343 3343 3344 - #: src/components/dialogs/MutedWords.tsx:502 3344 + #: src/components/dialogs/MutedWords.tsx:509 3345 3345 msgid "Expires {0}" 3346 3346 msgstr "" 3347 3347 ··· 3449 3449 msgid "Failed to delete post, please try again" 3450 3450 msgstr "" 3451 3451 3452 - #: src/screens/StarterPack/StarterPackScreen.tsx:722 3452 + #: src/screens/StarterPack/StarterPackScreen.tsx:726 3453 3453 msgid "Failed to delete starter pack" 3454 3454 msgstr "" 3455 3455 ··· 3457 3457 msgid "Failed to follow all suggested accounts, please try again" 3458 3458 msgstr "" 3459 3459 3460 - #: src/screens/Messages/ChatList.tsx:281 3461 - #: src/screens/Messages/Inbox.tsx:208 3460 + #: src/screens/Messages/ChatList.tsx:282 3461 + #: src/screens/Messages/Inbox.tsx:209 3462 3462 msgid "Failed to load conversations" 3463 3463 msgstr "" 3464 3464 ··· 3506 3506 msgid "Failed to load suggested follows" 3507 3507 msgstr "" 3508 3508 3509 - #: src/screens/Messages/Inbox.tsx:316 3510 - #: src/screens/Messages/Inbox.tsx:339 3509 + #: src/screens/Messages/Inbox.tsx:318 3510 + #: src/screens/Messages/Inbox.tsx:341 3511 3511 msgid "Failed to mark all requests as read" 3512 3512 msgstr "" 3513 3513 ··· 3555 3555 msgstr "" 3556 3556 3557 3557 #: src/components/moderation/LabelsOnMeDialog.tsx:254 3558 - #: src/screens/Messages/components/ChatDisabled.tsx:94 3558 + #: src/screens/Messages/components/ChatDisabled.tsx:99 3559 3559 msgid "Failed to submit appeal, please try again." 3560 3560 msgstr "" 3561 3561 ··· 3616 3616 msgid "Feed creator" 3617 3617 msgstr "" 3618 3618 3619 - #: src/view/com/feeds/MissingFeed.tsx:188 3619 + #: src/view/com/feeds/MissingFeed.tsx:189 3620 3620 msgid "Feed identifier" 3621 3621 msgstr "" 3622 3622 ··· 3919 3919 msgid "For You" 3920 3920 msgstr "" 3921 3921 3922 - #: src/components/dialogs/MutedWords.tsx:178 3922 + #: src/components/dialogs/MutedWords.tsx:183 3923 3923 msgid "Forever" 3924 3924 msgstr "" 3925 3925 ··· 4051 4051 #: src/components/dialogs/LinkWarning.tsx:111 4052 4052 #: src/components/dialogs/LinkWarning.tsx:117 4053 4053 #: src/components/Layout/Header/index.tsx:128 4054 - #: src/components/moderation/ScreenHider.tsx:154 4055 - #: src/components/moderation/ScreenHider.tsx:163 4056 - #: src/screens/Messages/Inbox.tsx:249 4054 + #: src/components/moderation/ScreenHider.tsx:160 4055 + #: src/components/moderation/ScreenHider.tsx:169 4056 + #: src/screens/Messages/Inbox.tsx:251 4057 4057 #: src/screens/Profile/ProfileFeed/index.tsx:92 4058 4058 #: src/screens/ProfileList/components/ErrorScreen.tsx:34 4059 4059 #: src/screens/ProfileList/components/ErrorScreen.tsx:40 ··· 4070 4070 #: src/screens/Profile/ErrorState.tsx:62 4071 4071 #: src/screens/Profile/ErrorState.tsx:66 4072 4072 #: src/screens/Profile/ProfileFeed/index.tsx:97 4073 - #: src/screens/StarterPack/StarterPackScreen.tsx:773 4073 + #: src/screens/StarterPack/StarterPackScreen.tsx:777 4074 4074 #: src/view/screens/NotFound.tsx:56 4075 4075 msgid "Go Back" 4076 4076 msgstr "" ··· 4078 4078 #: src/components/dms/ReportDialog.tsx:197 4079 4079 #: src/components/ReportDialog/SelectReportOptionView.tsx:81 4080 4080 #: src/components/ReportDialog/SubmitView.tsx:110 4081 - #: src/screens/Onboarding/Layout.tsx:121 4082 - #: src/screens/Onboarding/Layout.tsx:214 4081 + #: src/screens/Onboarding/Layout.tsx:120 4082 + #: src/screens/Onboarding/Layout.tsx:213 4083 4083 #: src/screens/Signup/BackNextButtons.tsx:35 4084 4084 msgid "Go back to previous step" 4085 4085 msgstr "" ··· 4195 4195 msgid "Have a code? <0>Click here.</0>" 4196 4196 msgstr "" 4197 4197 4198 - #: src/screens/Signup/index.tsx:219 4198 + #: src/screens/Signup/index.tsx:220 4199 4199 msgid "Having trouble?" 4200 4200 msgstr "" 4201 4201 ··· 4221 4221 msgstr "" 4222 4222 4223 4223 #: src/components/VideoPostCard.tsx:178 4224 - #: src/components/VideoPostCard.tsx:460 4224 + #: src/components/VideoPostCard.tsx:462 4225 4225 msgid "Hidden" 4226 4226 msgstr "" 4227 4227 ··· 4417 4417 msgid "If you want to change your password, we will send you a code to verify that this is your account." 4418 4418 msgstr "" 4419 4419 4420 - #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:154 4420 + #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:157 4421 4421 msgid "If you want to restrict who can receive notifications for your account's activity, you can change this in <0>Settings → Privacy and Security</0>." 4422 4422 msgstr "" 4423 4423 ··· 4499 4499 msgstr "" 4500 4500 4501 4501 #. Title message shown in chat requests inbox when it's empty 4502 - #: src/screens/Messages/Inbox.tsx:229 4502 + #: src/screens/Messages/Inbox.tsx:231 4503 4503 msgid "Inbox zero!" 4504 4504 msgstr "" 4505 4505 ··· 4531 4531 msgid "Interaction limited" 4532 4532 msgstr "" 4533 4533 4534 - #: src/screens/Moderation/index.tsx:241 4534 + #: src/screens/Moderation/index.tsx:246 4535 4535 msgid "Interaction settings" 4536 4536 msgstr "" 4537 4537 ··· 4601 4601 msgstr "" 4602 4602 4603 4603 #. Link to a page with job openings at Bluesky 4604 - #: src/view/com/auth/SplashScreen.web.tsx:180 4604 + #: src/view/com/auth/SplashScreen.web.tsx:184 4605 4605 msgid "Jobs" 4606 4606 msgstr "" 4607 4607 4608 4608 #: src/components/LoggedOutCTA.tsx:54 4609 - #: src/screens/StarterPack/StarterPackLandingScreen.tsx:205 4610 - #: src/screens/StarterPack/StarterPackLandingScreen.tsx:211 4609 + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:210 4610 + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:216 4611 4611 #: src/screens/StarterPack/StarterPackScreen.tsx:466 4612 4612 #: src/screens/StarterPack/StarterPackScreen.tsx:477 4613 4613 msgid "Join Bluesky" 4614 4614 msgstr "" 4615 4615 4616 - #: src/components/StarterPack/QrCode.tsx:68 4616 + #: src/components/StarterPack/QrCode.tsx:73 4617 4617 #: src/view/shell/NavSignupCard.tsx:40 4618 4618 msgid "Join the conversation" 4619 4619 msgstr "" ··· 4697 4697 msgstr "" 4698 4698 4699 4699 #: src/components/verification/VerificationsDialog.tsx:170 4700 - #: src/components/verification/VerifierDialog.tsx:137 4700 + #: src/components/verification/VerifierDialog.tsx:138 4701 4701 #: src/screens/Moderation/VerificationSettings.tsx:48 4702 4702 #: src/screens/Profile/Header/EditProfileDialog.tsx:349 4703 4703 #: src/screens/Settings/components/ChangeHandleDialog.tsx:213 ··· 4706 4706 msgid "Learn more" 4707 4707 msgstr "" 4708 4708 4709 - #: src/components/moderation/ScreenHider.tsx:140 4709 + #: src/components/moderation/ScreenHider.tsx:146 4710 4710 msgid "Learn More" 4711 4711 msgstr "" 4712 4712 ··· 4714 4714 msgid "Learn more about age assurance" 4715 4715 msgstr "" 4716 4716 4717 - #: src/view/com/auth/SplashScreen.web.tsx:168 4717 + #: src/view/com/auth/SplashScreen.web.tsx:172 4718 4718 msgid "Learn more about Bluesky" 4719 4719 msgstr "" 4720 4720 ··· 4736 4736 msgstr "" 4737 4737 4738 4738 #: src/components/moderation/PostHider.tsx:110 4739 - #: src/components/moderation/ScreenHider.tsx:127 4739 + #: src/components/moderation/ScreenHider.tsx:133 4740 4740 msgid "Learn more about this warning" 4741 4741 msgstr "" 4742 4742 4743 4743 #: src/components/verification/VerificationsDialog.tsx:151 4744 - #: src/components/verification/VerifierDialog.tsx:118 4744 + #: src/components/verification/VerifierDialog.tsx:119 4745 4745 msgctxt "english-only-resource" 4746 4746 msgid "Learn more about verification on Bluesky" 4747 4747 msgstr "" ··· 4885 4885 msgid "Likes of your reposts notifications" 4886 4886 msgstr "" 4887 4887 4888 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:472 4888 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:473 4889 4889 msgid "Likes on this post" 4890 4890 msgstr "" 4891 4891 ··· 5081 5081 msgid "Manage saved feeds" 5082 5082 msgstr "" 5083 5083 5084 - #: src/screens/Moderation/index.tsx:311 5084 + #: src/screens/Moderation/index.tsx:316 5085 5085 msgid "Manage verification settings" 5086 5086 msgstr "" 5087 5087 ··· 5089 5089 msgid "Manage your muted words and tags" 5090 5090 msgstr "" 5091 5091 5092 - #: src/screens/Messages/Inbox.tsx:326 5093 - #: src/screens/Messages/Inbox.tsx:345 5094 - #: src/screens/Messages/Inbox.tsx:352 5092 + #: src/screens/Messages/Inbox.tsx:328 5093 + #: src/screens/Messages/Inbox.tsx:347 5094 + #: src/screens/Messages/Inbox.tsx:354 5095 5095 msgid "Mark all as read" 5096 5096 msgstr "" 5097 5097 ··· 5100 5100 msgid "Mark as read" 5101 5101 msgstr "" 5102 5102 5103 - #: src/screens/Messages/Inbox.tsx:313 5104 - #: src/screens/Messages/Inbox.tsx:336 5103 + #: src/screens/Messages/Inbox.tsx:315 5104 + #: src/screens/Messages/Inbox.tsx:338 5105 5105 msgid "Marked all as read" 5106 5106 msgstr "" 5107 5107 ··· 5233 5233 msgid "Moderation list updated" 5234 5234 msgstr "" 5235 5235 5236 - #: src/screens/Moderation/index.tsx:271 5236 + #: src/screens/Moderation/index.tsx:276 5237 5237 msgid "Moderation lists" 5238 5238 msgstr "" 5239 5239 ··· 5242 5242 msgid "Moderation Lists" 5243 5243 msgstr "" 5244 5244 5245 - #: src/components/moderation/LabelPreference.tsx:251 5245 + #: src/components/moderation/LabelPreference.tsx:256 5246 5246 msgid "moderation settings" 5247 5247 msgstr "" 5248 5248 ··· 5250 5250 msgid "Moderation states" 5251 5251 msgstr "" 5252 5252 5253 - #: src/screens/Moderation/index.tsx:225 5253 + #: src/screens/Moderation/index.tsx:230 5254 5254 msgid "Moderation tools" 5255 5255 msgstr "" 5256 5256 ··· 5319 5319 msgid "Mute conversation" 5320 5320 msgstr "" 5321 5321 5322 - #: src/components/dialogs/MutedWords.tsx:253 5322 + #: src/components/dialogs/MutedWords.tsx:258 5323 5323 msgid "Mute in:" 5324 5324 msgstr "" 5325 5325 ··· 5331 5331 msgid "Mute these accounts?" 5332 5332 msgstr "" 5333 5333 5334 - #: src/components/dialogs/MutedWords.tsx:185 5334 + #: src/components/dialogs/MutedWords.tsx:190 5335 5335 msgid "Mute this word for 24 hours" 5336 5336 msgstr "" 5337 5337 5338 - #: src/components/dialogs/MutedWords.tsx:224 5338 + #: src/components/dialogs/MutedWords.tsx:229 5339 5339 msgid "Mute this word for 30 days" 5340 5340 msgstr "" 5341 5341 5342 - #: src/components/dialogs/MutedWords.tsx:209 5342 + #: src/components/dialogs/MutedWords.tsx:214 5343 5343 msgid "Mute this word for 7 days" 5344 5344 msgstr "" 5345 5345 5346 - #: src/components/dialogs/MutedWords.tsx:258 5346 + #: src/components/dialogs/MutedWords.tsx:263 5347 5347 msgid "Mute this word in post text and tags" 5348 5348 msgstr "" 5349 5349 5350 - #: src/components/dialogs/MutedWords.tsx:274 5350 + #: src/components/dialogs/MutedWords.tsx:279 5351 5351 msgid "Mute this word in tags only" 5352 5352 msgstr "" 5353 5353 5354 - #: src/components/dialogs/MutedWords.tsx:170 5354 + #: src/components/dialogs/MutedWords.tsx:175 5355 5355 msgid "Mute this word until you unmute it" 5356 5356 msgstr "" 5357 5357 ··· 5365 5365 msgid "Mute words & tags" 5366 5366 msgstr "" 5367 5367 5368 - #: src/screens/Moderation/index.tsx:286 5368 + #: src/screens/Moderation/index.tsx:291 5369 5369 msgid "Muted accounts" 5370 5370 msgstr "" 5371 5371 ··· 5382 5382 msgid "Muted by \"{0}\"" 5383 5383 msgstr "" 5384 5384 5385 - #: src/screens/Moderation/index.tsx:256 5385 + #: src/screens/Moderation/index.tsx:261 5386 5386 msgid "Muted words & tags" 5387 5387 msgstr "" 5388 5388 ··· 5473 5473 msgstr "" 5474 5474 5475 5475 #: src/components/dms/dialogs/NewChatDialog.tsx:67 5476 - #: src/screens/Messages/ChatList.tsx:401 5477 - #: src/screens/Messages/ChatList.tsx:408 5476 + #: src/screens/Messages/ChatList.tsx:403 5477 + #: src/screens/Messages/ChatList.tsx:410 5478 5478 msgid "New chat" 5479 5479 msgstr "" 5480 5480 ··· 5739 5739 msgid "Non-sexual Nudity" 5740 5740 msgstr "" 5741 5741 5742 - #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:217 5742 + #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:220 5743 5743 msgid "None" 5744 5744 msgstr "" 5745 5745 ··· 5752 5752 msgid "Not Found" 5753 5753 msgstr "" 5754 5754 5755 - #: src/components/BlockedGeoOverlay.tsx:126 5755 + #: src/components/BlockedGeoOverlay.tsx:125 5756 5756 msgid "Not in Mississippi?" 5757 5757 msgstr "" 5758 5758 ··· 5768 5768 msgid "Note: This post is only visible to logged-in users." 5769 5769 msgstr "" 5770 5770 5771 - #: src/screens/Messages/ChatList.tsx:302 5771 + #: src/screens/Messages/ChatList.tsx:304 5772 5772 msgid "Nothing here" 5773 5773 msgstr "" 5774 5774 ··· 5854 5854 #: src/screens/Profile/Header/ProfileHeaderLabeler.tsx:349 5855 5855 #: src/screens/Search/modules/ExploreInterestsCard.tsx:48 5856 5856 #: src/screens/Settings/AppIconSettings/index.tsx:48 5857 - #: src/screens/Settings/AppIconSettings/index.tsx:229 5857 + #: src/screens/Settings/AppIconSettings/index.tsx:234 5858 5858 msgid "OK" 5859 5859 msgstr "" 5860 5860 5861 5861 #: src/screens/Login/PasswordUpdatedForm.tsx:37 5862 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:689 5862 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:695 5863 5863 msgid "Okay" 5864 5864 msgstr "" 5865 5865 ··· 5870 5870 msgid "Oldest replies first" 5871 5871 msgstr "" 5872 5872 5873 - #: src/components/StarterPack/QrCode.tsx:82 5873 + #: src/components/StarterPack/QrCode.tsx:87 5874 5874 msgid "on<0><1/><2><3/></2></0>" 5875 5875 msgstr "" 5876 5876 ··· 5980 5980 msgid "Open moderation debug page" 5981 5981 msgstr "" 5982 5982 5983 - #: src/screens/Moderation/index.tsx:252 5983 + #: src/screens/Moderation/index.tsx:257 5984 5984 msgid "Open muted words and tags settings" 5985 5985 msgstr "" 5986 5986 ··· 6001 6001 msgid "Open share menu" 6002 6002 msgstr "" 6003 6003 6004 - #: src/screens/StarterPack/StarterPackScreen.tsx:566 6004 + #: src/screens/StarterPack/StarterPackScreen.tsx:570 6005 6005 msgid "Open starter pack menu" 6006 6006 msgstr "" 6007 6007 ··· 6056 6056 msgstr "" 6057 6057 6058 6058 #: src/view/com/auth/SplashScreen.tsx:66 6059 - #: src/view/com/auth/SplashScreen.web.tsx:111 6059 + #: src/view/com/auth/SplashScreen.web.tsx:115 6060 6060 msgid "Opens flow to create a new Bluesky account" 6061 6061 msgstr "" 6062 6062 6063 6063 #: src/view/com/auth/SplashScreen.tsx:83 6064 - #: src/view/com/auth/SplashScreen.web.tsx:125 6064 + #: src/view/com/auth/SplashScreen.web.tsx:129 6065 6065 msgid "Opens flow to sign in to your existing Bluesky account" 6066 6066 msgstr "" 6067 6067 ··· 6094 6094 msgid "Opens this profile" 6095 6095 msgstr "" 6096 6096 6097 - #: src/components/dms/ReportDialog.tsx:226 6097 + #: src/components/dms/ReportDialog.tsx:227 6098 6098 #: src/components/ReportDialog/SubmitView.tsx:168 6099 6099 msgid "Optionally provide additional information below:" 6100 6100 msgstr "" 6101 6101 6102 - #: src/components/dialogs/MutedWords.tsx:299 6102 + #: src/components/dialogs/MutedWords.tsx:304 6103 6103 msgid "Options:" 6104 6104 msgstr "" 6105 6105 ··· 6145 6145 msgid "Our blog post" 6146 6146 msgstr "" 6147 6147 6148 - #: src/components/dms/ReportDialog.tsx:353 6148 + #: src/components/dms/ReportDialog.tsx:354 6149 6149 msgid "Our moderation team has received your report." 6150 6150 msgstr "" 6151 6151 6152 - #: src/screens/Messages/components/ChatDisabled.tsx:29 6152 + #: src/screens/Messages/components/ChatDisabled.tsx:34 6153 6153 msgid "Our moderators have reviewed reports and decided to disable your access to chats on Bluesky." 6154 6154 msgstr "" 6155 6155 ··· 6415 6415 msgid "Please explain why you think this label was incorrectly applied by {0}" 6416 6416 msgstr "" 6417 6417 6418 - #: src/screens/Messages/components/ChatDisabled.tsx:117 6418 + #: src/screens/Messages/components/ChatDisabled.tsx:122 6419 6419 msgid "Please explain why you think your chats were incorrectly disabled" 6420 6420 msgstr "" 6421 6421 ··· 6498 6498 msgid "Post failed to upload. Please check your Internet connection and try again." 6499 6499 msgstr "" 6500 6500 6501 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:133 6502 - #: src/screens/PostThread/components/ThreadItemPost.tsx:110 6501 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:134 6502 + #: src/screens/PostThread/components/ThreadItemPost.tsx:111 6503 6503 #: src/screens/PostThread/components/ThreadItemTreePost.tsx:107 6504 6504 #: src/screens/VideoFeed/index.tsx:532 6505 6505 msgid "Post has been deleted" ··· 6551 6551 #: src/components/activity-notifications/SubscribeProfileDialog.tsx:250 6552 6552 #: src/components/activity-notifications/SubscribeProfileDialog.tsx:262 6553 6553 #: src/screens/ProfileList/index.tsx:166 6554 - #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:213 6554 + #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:216 6555 6555 #: src/screens/StarterPack/StarterPackScreen.tsx:191 6556 6556 #: src/view/screens/Profile.tsx:225 6557 6557 msgid "Posts" 6558 6558 msgstr "" 6559 6559 6560 - #: src/components/dialogs/MutedWords.tsx:115 6560 + #: src/components/dialogs/MutedWords.tsx:120 6561 6561 msgid "Posts can be muted based on their text, their tags, or both. We recommend avoiding common words that appear in many posts, since it can result in no posts being shown." 6562 6562 msgstr "" 6563 6563 ··· 6565 6565 msgid "Posts hidden" 6566 6566 msgstr "" 6567 6567 6568 - #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:211 6568 + #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:214 6569 6569 msgid "Posts, Replies" 6570 6570 msgstr "" 6571 6571 ··· 6622 6622 msgid "Privacy and Security" 6623 6623 msgstr "" 6624 6624 6625 - #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:158 6625 + #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:161 6626 6626 msgid "Privacy and Security settings" 6627 6627 msgstr "" 6628 6628 ··· 6646 6646 msgid "Processing..." 6647 6647 msgstr "" 6648 6648 6649 - #: src/view/screens/DebugMod.tsx:934 6649 + #: src/view/screens/DebugMod.tsx:936 6650 6650 #: src/view/screens/Profile.tsx:364 6651 6651 msgid "profile" 6652 6652 msgstr "" ··· 6760 6760 msgid "Quotes" 6761 6761 msgstr "" 6762 6762 6763 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:456 6763 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:457 6764 6764 msgid "Quotes of this post" 6765 6765 msgstr "" 6766 6766 ··· 6807 6807 msgid "Read our blog post" 6808 6808 msgstr "" 6809 6809 6810 - #: src/view/com/auth/SplashScreen.web.tsx:173 6810 + #: src/view/com/auth/SplashScreen.web.tsx:177 6811 6811 msgid "Read the Bluesky blog" 6812 6812 msgstr "" 6813 6813 ··· 6834 6834 msgid "Reason for appeal" 6835 6835 msgstr "" 6836 6836 6837 - #: src/components/dms/ReportDialog.tsx:217 6837 + #: src/components/dms/ReportDialog.tsx:218 6838 6838 msgid "Reason:" 6839 6839 msgstr "" 6840 6840 ··· 6871 6871 msgid "Reject chat request" 6872 6872 msgstr "" 6873 6873 6874 - #: src/screens/Messages/ChatList.tsx:285 6875 - #: src/screens/Messages/Inbox.tsx:212 6874 + #: src/screens/Messages/ChatList.tsx:286 6875 + #: src/screens/Messages/Inbox.tsx:213 6876 6876 msgid "Reload conversations" 6877 6877 msgstr "" 6878 6878 6879 6879 #: src/components/dialogs/lists/ListAddRemoveUsersDialog.tsx:171 6880 - #: src/components/dialogs/MutedWords.tsx:438 6880 + #: src/components/dialogs/MutedWords.tsx:443 6881 6881 #: src/components/dialogs/StarterPackDialog.tsx:371 6882 6882 #: src/components/dialogs/StarterPackDialog.tsx:377 6883 6883 #: src/components/FeedCard.tsx:343 6884 6884 #: src/components/StarterPack/Wizard/WizardListCard.tsx:104 6885 6885 #: src/components/StarterPack/Wizard/WizardListCard.tsx:111 6886 6886 #: src/screens/Bookmarks/index.tsx:255 6887 - #: src/screens/Settings/Settings.tsx:662 6887 + #: src/screens/Settings/Settings.tsx:664 6888 6888 #: src/view/com/modals/UserAddRemoveLists.tsx:235 6889 6889 #: src/view/com/posts/PostFeedErrorMessage.tsx:217 6890 6890 msgid "Remove" ··· 6898 6898 msgid "Remove {historyItem}" 6899 6899 msgstr "" 6900 6900 6901 - #: src/screens/Settings/Settings.tsx:641 6902 - #: src/screens/Settings/Settings.tsx:644 6901 + #: src/screens/Settings/Settings.tsx:643 6902 + #: src/screens/Settings/Settings.tsx:646 6903 6903 msgid "Remove account" 6904 6904 msgstr "" 6905 6905 ··· 6939 6939 msgid "Remove from my feeds" 6940 6940 msgstr "" 6941 6941 6942 - #: src/screens/Settings/Settings.tsx:654 6942 + #: src/screens/Settings/Settings.tsx:656 6943 6943 msgid "Remove from quick access?" 6944 6944 msgstr "" 6945 6945 ··· 6966 6966 msgid "Remove live status" 6967 6967 msgstr "" 6968 6968 6969 - #: src/components/dialogs/MutedWords.tsx:523 6969 + #: src/components/dialogs/MutedWords.tsx:530 6970 6970 msgid "Remove mute word from your list" 6971 6971 msgstr "" 6972 6972 ··· 7066 7066 #: src/components/activity-notifications/SubscribeProfileDialog.tsx:267 7067 7067 #: src/components/activity-notifications/SubscribeProfileDialog.tsx:279 7068 7068 #: src/lib/hooks/useNotificationHandler.ts:140 7069 - #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:215 7069 + #: src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx:218 7070 7070 #: src/screens/Settings/NotificationSettings/index.tsx:148 7071 7071 #: src/screens/Settings/NotificationSettings/ReplyNotificationSettings.tsx:41 7072 7072 #: src/view/screens/Profile.tsx:226 ··· 7170 7170 msgid "Report post" 7171 7171 msgstr "" 7172 7172 7173 - #: src/screens/StarterPack/StarterPackScreen.tsx:630 7174 - #: src/screens/StarterPack/StarterPackScreen.tsx:633 7173 + #: src/screens/StarterPack/StarterPackScreen.tsx:634 7174 + #: src/screens/StarterPack/StarterPackScreen.tsx:637 7175 7175 msgid "Report starter pack" 7176 7176 msgstr "" 7177 7177 7178 - #: src/components/dms/ReportDialog.tsx:350 7178 + #: src/components/dms/ReportDialog.tsx:351 7179 7179 msgid "Report submitted" 7180 7180 msgstr "" 7181 7181 ··· 7235 7235 #: src/components/PostControls/RepostButton.tsx:145 7236 7236 #: src/components/PostControls/RepostButton.web.tsx:44 7237 7237 #: src/components/PostControls/RepostButton.web.tsx:104 7238 - #: src/screens/StarterPack/StarterPackScreen.tsx:561 7238 + #: src/screens/StarterPack/StarterPackScreen.tsx:565 7239 7239 msgid "Repost or quote post" 7240 7240 msgstr "" 7241 7241 ··· 7262 7262 msgid "Reposts" 7263 7263 msgstr "" 7264 7264 7265 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:438 7265 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:439 7266 7266 msgid "Reposts of this post" 7267 7267 msgstr "" 7268 7268 ··· 7351 7351 #: src/components/StarterPack/ProfileStarterPacks.tsx:342 7352 7352 #: src/screens/Login/LoginForm.tsx:323 7353 7353 #: src/screens/Login/LoginForm.tsx:330 7354 - #: src/screens/Messages/ChatList.tsx:291 7354 + #: src/screens/Messages/ChatList.tsx:292 7355 7355 #: src/screens/Messages/components/MessageListError.tsx:25 7356 - #: src/screens/Messages/Inbox.tsx:218 7356 + #: src/screens/Messages/Inbox.tsx:219 7357 7357 #: src/screens/Onboarding/StepInterests/index.tsx:226 7358 7358 #: src/screens/Onboarding/StepInterests/index.tsx:229 7359 7359 #: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:209 7360 7360 #: src/screens/Onboarding/StepSuggestedAccounts/index.tsx:212 7361 - #: src/screens/PostThread/components/ThreadError.tsx:75 7362 - #: src/screens/PostThread/components/ThreadError.tsx:81 7361 + #: src/screens/PostThread/components/ThreadError.tsx:80 7362 + #: src/screens/PostThread/components/ThreadError.tsx:86 7363 7363 #: src/screens/Signup/BackNextButtons.tsx:53 7364 7364 #: src/view/com/util/error/ErrorMessage.tsx:60 7365 7365 #: src/view/com/util/error/ErrorScreen.tsx:97 ··· 7372 7372 7373 7373 #: src/components/Error.tsx:73 7374 7374 #: src/screens/List/ListHiddenScreen.tsx:219 7375 - #: src/screens/StarterPack/StarterPackScreen.tsx:767 7375 + #: src/screens/StarterPack/StarterPackScreen.tsx:771 7376 7376 msgid "Return to previous page" 7377 7377 msgstr "" 7378 7378 ··· 7608 7608 msgid "See #{tag} posts by user" 7609 7609 msgstr "" 7610 7610 7611 - #: src/view/com/auth/SplashScreen.web.tsx:178 7611 + #: src/view/com/auth/SplashScreen.web.tsx:182 7612 7612 msgid "See jobs at Bluesky" 7613 7613 msgstr "" 7614 7614 ··· 7691 7691 msgid "Select GIF \"{0}\"" 7692 7692 msgstr "" 7693 7693 7694 - #: src/components/dialogs/MutedWords.tsx:142 7694 + #: src/components/dialogs/MutedWords.tsx:147 7695 7695 msgid "Select how long to mute this word for." 7696 7696 msgstr "" 7697 7697 ··· 7742 7742 msgid "Select up to 3 languages used in this post" 7743 7743 msgstr "" 7744 7744 7745 - #: src/components/dialogs/MutedWords.tsx:242 7745 + #: src/components/dialogs/MutedWords.tsx:247 7746 7746 msgid "Select what content this mute word should apply to." 7747 7747 msgstr "" 7748 7748 ··· 7808 7808 msgid "Send post to..." 7809 7809 msgstr "" 7810 7810 7811 - #: src/components/dms/ReportDialog.tsx:276 7812 - #: src/components/dms/ReportDialog.tsx:279 7811 + #: src/components/dms/ReportDialog.tsx:277 7812 + #: src/components/dms/ReportDialog.tsx:280 7813 7813 #: src/components/ReportDialog/SubmitView.tsx:221 7814 7814 #: src/components/ReportDialog/SubmitView.tsx:225 7815 7815 msgid "Send report" ··· 7848 7848 msgid "Set app icon to {0}" 7849 7849 msgstr "" 7850 7850 7851 - #: src/screens/Moderation/index.tsx:352 7851 + #: src/screens/Moderation/index.tsx:357 7852 7852 msgid "Set birthdate" 7853 7853 msgstr "" 7854 7854 ··· 7856 7856 msgid "Set new password" 7857 7857 msgstr "" 7858 7858 7859 - #: src/screens/Onboarding/Layout.tsx:50 7859 + #: src/screens/Onboarding/Layout.tsx:49 7860 7860 msgid "Set up your account" 7861 7861 msgstr "" 7862 7862 ··· 7994 7994 #: src/components/PostControls/ShareMenu/ShareMenuItems.tsx:120 7995 7995 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:165 7996 7996 #: src/screens/ProfileList/components/MoreOptionsMenu.tsx:171 7997 - #: src/screens/StarterPack/StarterPackScreen.tsx:611 7998 - #: src/screens/StarterPack/StarterPackScreen.tsx:619 7997 + #: src/screens/StarterPack/StarterPackScreen.tsx:615 7998 + #: src/screens/StarterPack/StarterPackScreen.tsx:623 7999 7999 #: src/view/com/profile/ProfileMenu.tsx:246 8000 8000 #: src/view/com/profile/ProfileMenu.tsx:259 8001 8001 msgid "Share via..." ··· 8019 8019 msgid "Show alt text" 8020 8020 msgstr "" 8021 8021 8022 - #: src/components/moderation/ScreenHider.tsx:172 8023 - #: src/components/moderation/ScreenHider.tsx:175 8022 + #: src/components/moderation/ScreenHider.tsx:178 8023 + #: src/components/moderation/ScreenHider.tsx:181 8024 8024 #: src/screens/List/ListHiddenScreen.tsx:190 8025 8025 #: src/screens/VideoFeed/index.tsx:631 8026 8026 #: src/screens/VideoFeed/index.tsx:637 ··· 8107 8107 msgid "Show warning and filter from feeds" 8108 8108 msgstr "" 8109 8109 8110 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:630 8110 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:631 8111 8111 msgid "Shows information about when this post was created" 8112 8112 msgstr "" 8113 8113 ··· 8130 8130 #: src/screens/Search/SearchResults.tsx:258 8131 8131 #: src/view/com/auth/SplashScreen.tsx:81 8132 8132 #: src/view/com/auth/SplashScreen.tsx:89 8133 - #: src/view/com/auth/SplashScreen.web.tsx:123 8134 - #: src/view/com/auth/SplashScreen.web.tsx:131 8133 + #: src/view/com/auth/SplashScreen.web.tsx:127 8134 + #: src/view/com/auth/SplashScreen.web.tsx:135 8135 8135 #: src/view/shell/bottom-bar/BottomBar.tsx:355 8136 8136 #: src/view/shell/bottom-bar/BottomBar.tsx:360 8137 8137 #: src/view/shell/bottom-bar/BottomBarWeb.tsx:216 ··· 8192 8192 msgid "Sign out?" 8193 8193 msgstr "" 8194 8194 8195 - #: src/components/moderation/ScreenHider.tsx:91 8195 + #: src/components/moderation/ScreenHider.tsx:97 8196 8196 #: src/lib/moderation/useGlobalLabelStrings.ts:28 8197 8197 msgid "Sign-in Required" 8198 8198 msgstr "" ··· 8379 8379 msgid "Starter pack by you" 8380 8380 msgstr "" 8381 8381 8382 - #: src/screens/StarterPack/StarterPackScreen.tsx:731 8382 + #: src/screens/StarterPack/StarterPackScreen.tsx:735 8383 8383 msgid "Starter pack is invalid" 8384 8384 msgstr "" 8385 8385 ··· 8397 8397 msgid "Status Page" 8398 8398 msgstr "" 8399 8399 8400 - #: src/screens/Signup/index.tsx:168 8400 + #: src/screens/Signup/index.tsx:169 8401 8401 msgid "Step {0} of {1}" 8402 8402 msgstr "" 8403 8403 ··· 8414 8414 #: src/components/ageAssurance/AgeAssuranceAppealDialog.tsx:123 8415 8415 #: src/components/moderation/LabelsOnMeDialog.tsx:324 8416 8416 #: src/components/moderation/LabelsOnMeDialog.tsx:325 8417 - #: src/screens/Messages/components/ChatDisabled.tsx:149 8418 - #: src/screens/Messages/components/ChatDisabled.tsx:150 8417 + #: src/screens/Messages/components/ChatDisabled.tsx:154 8418 + #: src/screens/Messages/components/ChatDisabled.tsx:155 8419 8419 msgid "Submit" 8420 8420 msgstr "" 8421 8421 ··· 8503 8503 8504 8504 #: src/screens/Settings/Settings.tsx:123 8505 8505 #: src/screens/Settings/Settings.tsx:137 8506 - #: src/screens/Settings/Settings.tsx:604 8506 + #: src/screens/Settings/Settings.tsx:606 8507 8507 #: src/view/shell/desktop/LeftNav.tsx:247 8508 8508 msgid "Switch account" 8509 8509 msgstr "" ··· 8535 8535 msgid "System log" 8536 8536 msgstr "" 8537 8537 8538 - #: src/components/dialogs/MutedWords.tsx:282 8538 + #: src/components/dialogs/MutedWords.tsx:287 8539 8539 msgid "Tags only" 8540 8540 msgstr "" 8541 8541 ··· 8622 8622 msgid "Terms used violate community standards" 8623 8623 msgstr "" 8624 8624 8625 - #: src/components/dialogs/MutedWords.tsx:266 8625 + #: src/components/dialogs/MutedWords.tsx:271 8626 8626 msgid "Text & tags" 8627 8627 msgstr "" 8628 8628 8629 - #: src/components/dms/ReportDialog.tsx:234 8629 + #: src/components/dms/ReportDialog.tsx:235 8630 8630 msgid "Text field" 8631 8631 msgstr "" 8632 8632 8633 8633 #: src/components/moderation/LabelsOnMeDialog.tsx:288 8634 - #: src/screens/Messages/components/ChatDisabled.tsx:115 8634 + #: src/screens/Messages/components/ChatDisabled.tsx:120 8635 8635 msgid "Text input field" 8636 8636 msgstr "" 8637 8637 ··· 8648 8648 msgstr "" 8649 8649 8650 8650 #: src/components/ageAssurance/AgeAssuranceAccountCard.tsx:115 8651 - #: src/components/BlockedGeoOverlay.tsx:169 8651 + #: src/components/BlockedGeoOverlay.tsx:168 8652 8652 msgid "Thanks! You're all set." 8653 8653 msgstr "" 8654 8654 ··· 8683 8683 msgstr "" 8684 8684 8685 8685 #: src/screens/Settings/AppIconSettings/index.tsx:41 8686 - #: src/screens/Settings/AppIconSettings/index.tsx:222 8686 + #: src/screens/Settings/AppIconSettings/index.tsx:227 8687 8687 msgid "The app will be restarted" 8688 8688 msgstr "" 8689 8689 ··· 8696 8696 msgid "The birthdate you've entered means you are under 18 years old. Certain content and features may be unavailable to you." 8697 8697 msgstr "" 8698 8698 8699 - #: src/screens/Moderation/index.tsx:426 8699 + #: src/screens/Moderation/index.tsx:432 8700 8700 msgid "The Bluesky web application" 8701 8701 msgstr "" 8702 8702 ··· 8716 8716 msgid "The Discover feed now knows what you like" 8717 8717 msgstr "" 8718 8718 8719 - #: src/screens/StarterPack/StarterPackLandingScreen.tsx:324 8719 + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:333 8720 8720 msgid "The experience is better in the app. Download Bluesky now and we'll pick back up where you left off." 8721 8721 msgstr "" 8722 8722 ··· 8762 8762 msgid "The server appears to be experiencing issues. Please try again in a few moments." 8763 8763 msgstr "" 8764 8764 8765 - #: src/screens/StarterPack/StarterPackScreen.tsx:741 8765 + #: src/screens/StarterPack/StarterPackScreen.tsx:745 8766 8766 msgid "The starter pack that you are trying to view is invalid. You may delete this starter pack instead." 8767 8767 msgstr "" 8768 8768 ··· 8836 8836 msgid "There was an issue removing this feed. Please check your internet connection and try again." 8837 8837 msgstr "" 8838 8838 8839 - #: src/components/dms/ReportDialog.tsx:264 8839 + #: src/components/dms/ReportDialog.tsx:265 8840 8840 #: src/components/ReportDialog/SubmitView.tsx:88 8841 8841 msgid "There was an issue sending your report. Please check your internet connection." 8842 8842 msgstr "" ··· 8891 8891 msgid "These settings only apply to the Following feed." 8892 8892 msgstr "" 8893 8893 8894 - #: src/components/moderation/ScreenHider.tsx:111 8894 + #: src/components/moderation/ScreenHider.tsx:117 8895 8895 msgid "This {screenDescription} has been flagged:" 8896 8896 msgstr "" 8897 8897 ··· 8903 8903 msgid "This account has one or more attempted verifications, but it is not currently verified." 8904 8904 msgstr "" 8905 8905 8906 - #: src/components/moderation/ScreenHider.tsx:106 8906 + #: src/components/moderation/ScreenHider.tsx:112 8907 8907 msgid "This account has requested that users sign in to view their profile." 8908 8908 msgstr "" 8909 8909 ··· 8919 8919 msgid "This appeal will be sent to <0>{sourceName}</0>." 8920 8920 msgstr "" 8921 8921 8922 - #: src/screens/Messages/components/ChatDisabled.tsx:111 8922 + #: src/screens/Messages/components/ChatDisabled.tsx:116 8923 8923 msgid "This appeal will be sent to Bluesky's moderation service." 8924 8924 msgstr "" 8925 8925 ··· 9039 9039 msgid "This moderation service is unavailable. See below for more details. If this issue persists, contact us." 9040 9040 msgstr "" 9041 9041 9042 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:670 9042 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:671 9043 9043 msgid "This post claims to have been created on <0>{0}</0>, but was first seen by Bluesky on <1>{1}</1>." 9044 9044 msgstr "" 9045 9045 ··· 9120 9120 msgid "This user isn't following anyone." 9121 9121 msgstr "" 9122 9122 9123 - #: src/components/dialogs/MutedWords.tsx:435 9123 + #: src/components/dialogs/MutedWords.tsx:440 9124 9124 msgid "This will delete \"{0}\" from your muted words. You can always add it back later." 9125 9125 msgstr "" 9126 9126 9127 - #: src/screens/Settings/Settings.tsx:656 9127 + #: src/screens/Settings/Settings.tsx:658 9128 9128 msgid "This will remove @{0} from the quick access list." 9129 9129 msgstr "" 9130 9130 ··· 9180 9180 msgid "Today" 9181 9181 msgstr "" 9182 9182 9183 - #: src/screens/Moderation/index.tsx:403 9183 + #: src/screens/Moderation/index.tsx:409 9184 9184 msgid "Toggle to enable or disable adult content" 9185 9185 msgstr "" 9186 9186 ··· 9209 9209 #: src/components/dms/MessageContextMenu.tsx:139 9210 9210 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:444 9211 9211 #: src/components/PostControls/PostMenu/PostMenuItems.tsx:446 9212 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:592 9213 - #: src/screens/PostThread/components/ThreadItemAnchor.tsx:595 9212 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:593 9213 + #: src/screens/PostThread/components/ThreadItemAnchor.tsx:596 9214 9214 msgid "Translate" 9215 9215 msgstr "" 9216 9216 ··· 9274 9274 msgid "Unable to contact your service. Please check your Internet connection." 9275 9275 msgstr "" 9276 9276 9277 - #: src/screens/StarterPack/StarterPackScreen.tsx:673 9277 + #: src/screens/StarterPack/StarterPackScreen.tsx:677 9278 9278 msgid "Unable to delete" 9279 9279 msgstr "" 9280 9280 ··· 9612 9612 msgid "Use your account email address, or another real email address you control, in case KWS or Bluesky needs to contact you." 9613 9613 msgstr "" 9614 9614 9615 - #: src/components/dms/ReportDialog.tsx:329 9615 + #: src/components/dms/ReportDialog.tsx:330 9616 9616 msgctxt "toast" 9617 9617 msgid "User blocked" 9618 9618 msgstr "" ··· 9705 9705 msgid "Verification failed, please try again." 9706 9706 msgstr "" 9707 9707 9708 - #: src/screens/Moderation/index.tsx:316 9708 + #: src/screens/Moderation/index.tsx:321 9709 9709 msgid "Verification settings" 9710 9710 msgstr "" 9711 9711 ··· 9938 9938 msgid "View users who like this feed" 9939 9939 msgstr "" 9940 9940 9941 - #: src/components/VideoPostCard.tsx:399 9941 + #: src/components/VideoPostCard.tsx:401 9942 9942 msgid "View video" 9943 9943 msgstr "" 9944 9944 9945 - #: src/screens/Moderation/index.tsx:296 9945 + #: src/screens/Moderation/index.tsx:301 9946 9946 msgid "View your blocked accounts" 9947 9947 msgstr "" 9948 9948 9949 - #: src/screens/Moderation/index.tsx:236 9949 + #: src/screens/Moderation/index.tsx:241 9950 9950 msgid "View your default post interaction settings" 9951 9951 msgstr "" 9952 9952 ··· 9955 9955 msgid "View your feeds and explore more" 9956 9956 msgstr "" 9957 9957 9958 - #: src/screens/Moderation/index.tsx:266 9958 + #: src/screens/Moderation/index.tsx:271 9959 9959 msgid "View your moderation lists" 9960 9960 msgstr "" 9961 9961 9962 - #: src/screens/Moderation/index.tsx:281 9962 + #: src/screens/Moderation/index.tsx:286 9963 9963 msgid "View your muted accounts" 9964 9964 msgstr "" 9965 9965 ··· 9967 9967 msgid "View your verifications" 9968 9968 msgstr "" 9969 9969 9970 - #: src/view/com/util/images/AutoSizedImage.tsx:207 9971 - #: src/view/com/util/images/AutoSizedImage.tsx:229 9970 + #: src/view/com/util/images/AutoSizedImage.tsx:206 9971 + #: src/view/com/util/images/AutoSizedImage.tsx:228 9972 9972 msgid "Views full image" 9973 9973 msgstr "" 9974 9974 ··· 10064 10064 msgid "We were unable to load your birth date preferences. Please try again." 10065 10065 msgstr "" 10066 10066 10067 - #: src/screens/Moderation/index.tsx:483 10067 + #: src/screens/Moderation/index.tsx:489 10068 10068 msgid "We were unable to load your configured labelers at this time." 10069 10069 msgstr "" 10070 10070 ··· 10121 10121 msgid "We're sorry, but based on your device's location, you are currently located in a region that requires age assurance." 10122 10122 msgstr "" 10123 10123 10124 - #: src/components/BlockedGeoOverlay.tsx:159 10124 + #: src/components/BlockedGeoOverlay.tsx:158 10125 10125 msgid "We're sorry, but based on your device's location, you are currently located in a region where we cannot provide access at this time." 10126 10126 msgstr "" 10127 10127 ··· 10129 10129 msgid "We're sorry, but we were unable to resolve this list. If this persists, please contact the list creator, @{handleOrDid}." 10130 10130 msgstr "" 10131 10131 10132 - #: src/components/dialogs/MutedWords.tsx:378 10132 + #: src/components/dialogs/MutedWords.tsx:383 10133 10133 msgid "We're sorry, but we weren't able to load your muted words at this time. Please try again." 10134 10134 msgstr "" 10135 10135 ··· 10187 10187 msgstr "" 10188 10188 10189 10189 #: src/view/com/auth/SplashScreen.tsx:51 10190 - #: src/view/com/auth/SplashScreen.web.tsx:99 10190 + #: src/view/com/auth/SplashScreen.web.tsx:103 10191 10191 #: src/view/com/composer/Composer.tsx:812 10192 10192 msgid "What's up?" 10193 10193 msgstr "" ··· 10213 10213 msgstr "" 10214 10214 10215 10215 #: src/screens/Home/NoFeedsPinned.tsx:79 10216 - #: src/screens/Messages/ChatList.tsx:269 10217 - #: src/screens/Messages/Inbox.tsx:197 10216 + #: src/screens/Messages/ChatList.tsx:270 10217 + #: src/screens/Messages/Inbox.tsx:198 10218 10218 msgid "Whoops!" 10219 10219 msgstr "" 10220 10220 ··· 10298 10298 msgid "Yes, deactivate" 10299 10299 msgstr "" 10300 10300 10301 - #: src/screens/StarterPack/StarterPackScreen.tsx:685 10301 + #: src/screens/StarterPack/StarterPackScreen.tsx:689 10302 10302 msgid "Yes, delete this starter pack" 10303 10303 msgstr "" 10304 10304 ··· 10440 10440 msgid "You don't follow any users who follow @{name}." 10441 10441 msgstr "" 10442 10442 10443 - #: src/screens/Messages/Inbox.tsx:241 10443 + #: src/screens/Messages/Inbox.tsx:243 10444 10444 msgid "You don't have any chat requests at the moment." 10445 10445 msgstr "" 10446 10446 ··· 10489 10489 msgid "You have muted this user" 10490 10490 msgstr "" 10491 10491 10492 - #: src/screens/Messages/ChatList.tsx:312 10492 + #: src/screens/Messages/ChatList.tsx:314 10493 10493 msgid "You have no conversations yet. Start one!" 10494 10494 msgstr "" 10495 10495 ··· 10530 10530 msgid "You haven't created a starter pack yet!" 10531 10531 msgstr "" 10532 10532 10533 - #: src/components/dialogs/MutedWords.tsx:398 10533 + #: src/components/dialogs/MutedWords.tsx:403 10534 10534 msgid "You haven't muted any words or tags yet" 10535 10535 msgstr "" 10536 10536 ··· 10579 10579 msgid "You must be following at least seven other people to generate a starter pack." 10580 10580 msgstr "" 10581 10581 10582 - #: src/screens/Moderation/index.tsx:374 10582 + #: src/screens/Moderation/index.tsx:379 10583 10583 msgid "You must complete age assurance in order to access the settings below." 10584 10584 msgstr "" 10585 10585 ··· 10665 10665 msgid "You'll follow the suggested users once you finish creating your account!" 10666 10666 msgstr "" 10667 10667 10668 - #: src/screens/StarterPack/StarterPackLandingScreen.tsx:236 10668 + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:245 10669 10669 msgid "You'll follow these people and {0} others" 10670 10670 msgstr "" 10671 10671 10672 - #: src/screens/StarterPack/StarterPackLandingScreen.tsx:234 10672 + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:243 10673 10673 msgid "You'll follow these people right away" 10674 10674 msgstr "" 10675 10675 ··· 10677 10677 msgid "You'll start receiving notifications for {0}!" 10678 10678 msgstr "" 10679 10679 10680 - #: src/screens/StarterPack/StarterPackLandingScreen.tsx:274 10680 + #: src/screens/StarterPack/StarterPackLandingScreen.tsx:283 10681 10681 msgid "You'll stay updated with these feeds" 10682 10682 msgstr "" 10683 10683 ··· 10731 10731 msgid "You've run out of videos to watch. Maybe it's a good time to take a break?" 10732 10732 msgstr "" 10733 10733 10734 - #: src/screens/Signup/index.tsx:178 10734 + #: src/screens/Signup/index.tsx:179 10735 10735 msgid "Your account" 10736 10736 msgstr "" 10737 10737 ··· 10767 10767 msgid "Your browser does not support the video format. Please try a different browser." 10768 10768 msgstr "" 10769 10769 10770 - #: src/screens/Messages/components/ChatDisabled.tsx:26 10770 + #: src/screens/Messages/components/ChatDisabled.tsx:31 10771 10771 msgid "Your chats have been disabled" 10772 10772 msgstr "" 10773 10773 ··· 10837 10837 msgid "Your location data is not tracked and does not leave your device." 10838 10838 msgstr "" 10839 10839 10840 - #: src/components/dialogs/MutedWords.tsx:369 10840 + #: src/components/dialogs/MutedWords.tsx:374 10841 10841 msgid "Your muted words" 10842 10842 msgstr "" 10843 10843
+1 -1
src/screens/Deactivated.tsx
··· 121 121 </View> 122 122 123 123 <View style={[a.gap_xs, a.pb_3xl]}> 124 - <Text style={[a.text_xl, a.font_bold, a.leading_snug]}> 124 + <Text style={[a.text_xl, a.font_semi_bold, a.leading_snug]}> 125 125 <Trans>Welcome back!</Trans> 126 126 </Text> 127 127 <Text style={[a.text_sm, a.leading_snug]}>
+1 -1
src/screens/Home/NoFeedsPinned.tsx
··· 75 75 }, 76 76 ]}> 77 77 <View style={[a.align_center, a.gap_sm, a.pb_xl]}> 78 - <Text style={[a.text_xl, a.font_bold]}> 78 + <Text style={[a.text_xl, a.font_semi_bold]}> 79 79 <Trans>Whoops!</Trans> 80 80 </Text> 81 81 <Text
+2 -2
src/screens/List/ListHiddenScreen.tsx
··· 122 122 width={42} 123 123 /> 124 124 <View style={[a.gap_sm, a.align_center]}> 125 - <Text style={[a.font_bold, a.text_3xl]}> 125 + <Text style={[a.font_semi_bold, a.text_3xl]}> 126 126 {list.creator.viewer?.blocking || list.creator.viewer?.blockedBy ? ( 127 127 <Trans>Creator has been blocked</Trans> 128 128 ) : ( ··· 150 150 ) : ( 151 151 <Trans> 152 152 This list – created by{' '} 153 - <Text style={[a.font_bold]}> 153 + <Text style={[a.font_semi_bold]}> 154 154 {sanitizeHandle(list.creator.handle, '@')} 155 155 </Text>{' '} 156 156 – contains possible violations of Bluesky's community guidelines
+1 -1
src/screens/Login/FormContainer.tsx
··· 22 22 testID={testID} 23 23 style={[a.gap_md, a.flex_1, !gtMobile && [a.px_lg, a.py_md], style]}> 24 24 {titleText && !gtMobile && ( 25 - <Text style={[a.text_xl, a.font_bold, t.atoms.text_contrast_high]}> 25 + <Text style={[a.text_xl, a.font_semi_bold, t.atoms.text_contrast_high]}> 26 26 {titleText} 27 27 </Text> 28 28 )}
+1 -1
src/screens/Login/PasswordUpdatedForm.tsx
··· 19 19 <FormContainer 20 20 testID="passwordUpdatedForm" 21 21 style={[a.gap_2xl, !gtMobile && a.mt_5xl]}> 22 - <Text style={[a.text_3xl, a.font_bold, a.text_center]}> 22 + <Text style={[a.text_3xl, a.font_semi_bold, a.text_center]}> 23 23 <Trans>Password updated!</Trans> 24 24 </Text> 25 25 <Text style={[a.text_center, a.mx_auto, {maxWidth: '80%'}]}>
+4 -2
src/screens/Messages/ChatList.tsx
··· 265 265 width={48} 266 266 fill={t.atoms.text_contrast_low.color} 267 267 /> 268 - <Text style={[a.pt_md, a.pb_sm, a.text_2xl, a.font_bold]}> 268 + <Text 269 + style={[a.pt_md, a.pb_sm, a.text_2xl, a.font_semi_bold]}> 269 270 <Trans>Whoops!</Trans> 270 271 </Text> 271 272 <Text ··· 298 299 <> 299 300 <View style={[a.pt_3xl, a.align_center]}> 300 301 <MessageIcon width={48} fill={t.palette.primary_500} /> 301 - <Text style={[a.pt_md, a.pb_sm, a.text_2xl, a.font_bold]}> 302 + <Text 303 + style={[a.pt_md, a.pb_sm, a.text_2xl, a.font_semi_bold]}> 302 304 <Trans>Nothing here</Trans> 303 305 </Text> 304 306 <Text
+4 -2
src/screens/Messages/Inbox.tsx
··· 193 193 width={48} 194 194 fill={t.atoms.text_contrast_low.color} 195 195 /> 196 - <Text style={[a.pt_md, a.pb_sm, a.text_2xl, a.font_bold]}> 196 + <Text 197 + style={[a.pt_md, a.pb_sm, a.text_2xl, a.font_semi_bold]}> 197 198 <Trans>Whoops!</Trans> 198 199 </Text> 199 200 <Text ··· 225 226 <> 226 227 <View style={[a.pt_3xl, a.align_center]}> 227 228 <MessageIcon width={48} fill={t.palette.primary_500} /> 228 - <Text style={[a.pt_md, a.pb_sm, a.text_2xl, a.font_bold]}> 229 + <Text 230 + style={[a.pt_md, a.pb_sm, a.text_2xl, a.font_semi_bold]}> 229 231 <Trans comment="Title message shown in chat requests inbox when it's empty"> 230 232 Inbox zero! 231 233 </Trans>
+2 -2
src/screens/Messages/Settings.tsx
··· 71 71 </Layout.Header.Outer> 72 72 <Layout.Content> 73 73 <View style={[a.p_lg, a.gap_md]}> 74 - <Text style={[a.text_lg, a.font_bold]}> 74 + <Text style={[a.text_lg, a.font_semi_bold]}> 75 75 <Trans>Allow new messages from</Trans> 76 76 </Text> 77 77 <Toggle.Group ··· 121 121 {isNative && ( 122 122 <> 123 123 <Divider style={a.my_md} /> 124 - <Text style={[a.text_lg, a.font_bold]}> 124 + <Text style={[a.text_lg, a.font_semi_bold]}> 125 125 <Trans>Notification Sounds</Trans> 126 126 </Text> 127 127 <Toggle.Group
+7 -2
src/screens/Messages/components/ChatDisabled.tsx
··· 22 22 <View 23 23 style={[a.align_start, a.p_xl, a.rounded_md, t.atoms.bg_contrast_25]}> 24 24 <Text 25 - style={[a.text_md, a.font_bold, a.pb_sm, t.atoms.text_contrast_high]}> 25 + style={[ 26 + a.text_md, 27 + a.font_semi_bold, 28 + a.pb_sm, 29 + t.atoms.text_contrast_high, 30 + ]}> 26 31 <Trans>Your chats have been disabled</Trans> 27 32 </Text> 28 33 <Text style={[a.text_sm, a.leading_snug, t.atoms.text_contrast_medium]}> ··· 104 109 105 110 return ( 106 111 <Dialog.ScrollableInner label={_(msg`Appeal this decision`)}> 107 - <Text style={[a.text_2xl, a.font_bold, a.pb_xs, a.leading_tight]}> 112 + <Text style={[a.text_2xl, a.font_semi_bold, a.pb_xs, a.leading_tight]}> 108 113 <Trans>Appeal this decision</Trans> 109 114 </Text> 110 115 <Text style={[a.text_md, a.leading_snug]}>
+2 -2
src/screens/Messages/components/ChatListItem.tsx
··· 397 397 style={[ 398 398 a.text_md, 399 399 t.atoms.text, 400 - a.font_bold, 400 + a.font_semi_bold, 401 401 {lineHeight: 21}, 402 402 isDimStyle && t.atoms.text_contrast_medium, 403 403 ]}> ··· 461 461 style={[ 462 462 a.text_sm, 463 463 a.leading_snug, 464 - hasUnread ? a.font_bold : t.atoms.text_contrast_high, 464 + hasUnread ? a.font_semi_bold : t.atoms.text_contrast_high, 465 465 isDimStyle && t.atoms.text_contrast_medium, 466 466 ]}> 467 467 {lastMessage}
+1 -1
src/screens/Messages/components/InboxPreview.tsx
··· 57 57 )} 58 58 </View> 59 59 <ButtonText 60 - style={[a.flex_1, a.font_bold, a.text_left]} 60 + style={[a.flex_1, a.font_semi_bold, a.text_left]} 61 61 numberOfLines={1}> 62 62 <Trans>Chat requests</Trans> 63 63 </ButtonText>
+1 -1
src/screens/Messages/components/RequestListItem.tsx
··· 38 38 {/* spacer, since you can't nest pressables */} 39 39 <View style={[a.pt_md, a.pb_xs, a.w_full, {opacity: 0}]} aria-hidden> 40 40 {/* Placeholder text so that it responds to the font height */} 41 - <Text style={[a.text_xs, a.leading_tight, a.font_bold]}> 41 + <Text style={[a.text_xs, a.leading_tight, a.font_semi_bold]}> 42 42 <Trans comment="Accept a chat request">Accept Request</Trans> 43 43 </Text> 44 44 </View>
+12 -6
src/screens/Moderation/index.tsx
··· 142 142 ]}> 143 143 <View style={[a.flex_row, a.align_center, a.gap_md]}> 144 144 <Icon size="md" style={[t.atoms.text_contrast_medium]} /> 145 - <Text style={[a.text_sm, a.font_bold]}>{title}</Text> 145 + <Text style={[a.text_sm, a.font_semi_bold]}>{title}</Text> 146 146 </View> 147 147 <ChevronRight 148 148 size="sm" ··· 221 221 )} 222 222 223 223 <Text 224 - style={[a.text_md, a.font_bold, a.pb_md, t.atoms.text_contrast_high]}> 224 + style={[ 225 + a.text_md, 226 + a.font_semi_bold, 227 + a.pb_md, 228 + t.atoms.text_contrast_high, 229 + ]}> 225 230 <Trans>Moderation tools</Trans> 226 231 </Text> 227 232 ··· 330 335 a.pt_2xl, 331 336 a.pb_md, 332 337 a.text_md, 333 - a.font_bold, 338 + a.font_semi_bold, 334 339 t.atoms.text_contrast_high, 335 340 ]}> 336 341 <Trans>Content filters</Trans> ··· 364 369 a.pt_2xl, 365 370 a.pb_md, 366 371 a.text_md, 367 - a.font_bold, 372 + a.font_semi_bold, 368 373 t.atoms.text_contrast_high, 369 374 ]}> 370 375 <Trans>Content filters</Trans> ··· 396 401 a.justify_between, 397 402 disabledOnIOS && {opacity: 0.5}, 398 403 ]}> 399 - <Text style={[a.font_bold, t.atoms.text_contrast_high]}> 404 + <Text 405 + style={[a.font_semi_bold, t.atoms.text_contrast_high]}> 400 406 <Trans>Enable adult content</Trans> 401 407 </Text> 402 408 <Toggle.Item ··· 465 471 <Text 466 472 style={[ 467 473 a.text_md, 468 - a.font_bold, 474 + a.font_semi_bold, 469 475 a.pt_2xl, 470 476 a.pb_md, 471 477 t.atoms.text_contrast_high,
+2 -5
src/screens/Onboarding/Layout.tsx
··· 17 17 useTheme, 18 18 web, 19 19 } from '#/alf' 20 - import {leading} from '#/alf/typography' 21 20 import {Button, ButtonIcon, ButtonText} from '#/components/Button' 22 21 import {ArrowLeft_Stroke2_Corner0_Rounded as ArrowLeft} from '#/components/icons/Arrow' 23 22 import {HEADER_SLOT_SIZE} from '#/components/Layout' ··· 234 233 style={[ 235 234 a.pb_sm, 236 235 a.text_4xl, 237 - a.font_bold, 238 - { 239 - lineHeight: leading(a.text_4xl, a.leading_tight), 240 - }, 236 + a.font_semi_bold, 237 + a.leading_tight, 241 238 flatten(style), 242 239 ]}> 243 240 {children}
+4 -4
src/screens/Onboarding/StepFinished.tsx
··· 432 432 </View> 433 433 434 434 <View style={[a.gap_sm]}> 435 - <Text style={[a.font_heavy, a.text_3xl, a.text_center]}> 435 + <Text style={[a.font_bold, a.text_3xl, a.text_center]}> 436 436 {title} 437 437 </Text> 438 438 <Text ··· 537 537 <View style={[a.flex_row, a.align_center, a.w_full, a.gap_lg]}> 538 538 <IconCircle icon={Growth} size="lg" style={{width: 48, height: 48}} /> 539 539 <View style={[a.flex_1, a.gap_xs]}> 540 - <Text style={[a.font_bold, a.text_lg]}> 540 + <Text style={[a.font_semi_bold, a.text_lg]}> 541 541 <Trans>Public</Trans> 542 542 </Text> 543 543 <Text ··· 551 551 <View style={[a.flex_row, a.align_center, a.w_full, a.gap_lg]}> 552 552 <IconCircle icon={News} size="lg" style={{width: 48, height: 48}} /> 553 553 <View style={[a.flex_1, a.gap_xs]}> 554 - <Text style={[a.font_bold, a.text_lg]}> 554 + <Text style={[a.font_semi_bold, a.text_lg]}> 555 555 <Trans>Open</Trans> 556 556 </Text> 557 557 <Text ··· 567 567 style={{width: 48, height: 48}} 568 568 /> 569 569 <View style={[a.flex_1, a.gap_xs]}> 570 - <Text style={[a.font_bold, a.text_lg]}> 570 + <Text style={[a.font_semi_bold, a.text_lg]}> 571 571 <Trans>Flexible</Trans> 572 572 </Text> 573 573 <Text
+1 -1
src/screens/Onboarding/StepInterests/InterestButton.tsx
··· 69 69 { 70 70 color: t.palette.contrast_900, 71 71 }, 72 - a.font_bold, 72 + a.font_semi_bold, 73 73 native({paddingTop: 2}), 74 74 ctx.selected ? styles.textSelected : {}, 75 75 ]}>
+1 -1
src/screens/Onboarding/StepInterests/index.tsx
··· 184 184 <Text 185 185 style={[ 186 186 a.text_md, 187 - a.font_bold, 187 + a.font_semi_bold, 188 188 { 189 189 color: t.palette.negative_900, 190 190 },
+1 -1
src/screens/Onboarding/StepSuggestedAccounts/index.tsx
··· 133 133 134 134 return ( 135 135 <View style={[a.align_start]} testID="onboardingInterests"> 136 - <Text style={[a.font_heavy, a.text_3xl]}> 136 + <Text style={[a.font_bold, a.text_3xl]}> 137 137 <Trans comment="Accounts suggested to the user for them to follow"> 138 138 Suggested for you 139 139 </Trans>
+6 -1
src/screens/PostThread/components/ThreadError.tsx
··· 58 58 ]}> 59 59 <View style={[a.gap_xs]}> 60 60 <Text 61 - style={[a.text_center, a.text_lg, a.font_bold, a.leading_snug]}> 61 + style={[ 62 + a.text_center, 63 + a.text_lg, 64 + a.font_semi_bold, 65 + a.leading_snug, 66 + ]}> 62 67 {title} 63 68 </Text> 64 69 <Text
+16 -10
src/screens/PostThread/components/ThreadItemAnchor.tsx
··· 133 133 ]}> 134 134 <TrashIcon style={[t.atoms.text_contrast_medium]} /> 135 135 </View> 136 - <Text style={[a.text_md, a.font_bold, t.atoms.text_contrast_medium]}> 136 + <Text 137 + style={[a.text_md, a.font_semi_bold, t.atoms.text_contrast_medium]}> 137 138 <Trans>Post has been deleted</Trans> 138 139 </Text> 139 140 </View> ··· 353 354 style={[ 354 355 a.flex_shrink, 355 356 a.text_lg, 356 - a.font_bold, 357 + a.font_semi_bold, 357 358 a.leading_snug, 358 359 ]} 359 360 numberOfLines={1}> ··· 451 452 <Text 452 453 testID="repostCount-expanded" 453 454 style={[a.text_md, t.atoms.text_contrast_medium]}> 454 - <Text style={[a.text_md, a.font_bold, t.atoms.text]}> 455 + <Text style={[a.text_md, a.font_semi_bold, t.atoms.text]}> 455 456 {formatPostStatCount(post.repostCount)} 456 457 </Text>{' '} 457 458 <Plural ··· 470 471 <Text 471 472 testID="quoteCount-expanded" 472 473 style={[a.text_md, t.atoms.text_contrast_medium]}> 473 - <Text style={[a.text_md, a.font_bold, t.atoms.text]}> 474 + <Text style={[a.text_md, a.font_semi_bold, t.atoms.text]}> 474 475 {formatPostStatCount(post.quoteCount)} 475 476 </Text>{' '} 476 477 <Plural ··· 488 489 <Text 489 490 testID="likeCount-expanded" 490 491 style={[a.text_md, t.atoms.text_contrast_medium]}> 491 - <Text style={[a.text_md, a.font_bold, t.atoms.text]}> 492 + <Text style={[a.text_md, a.font_semi_bold, t.atoms.text]}> 492 493 {formatPostStatCount(post.likeCount)} 493 494 </Text>{' '} 494 495 <Plural value={post.likeCount} one="like" other="likes" /> ··· 501 502 <Text 502 503 testID="bookmarkCount-expanded" 503 504 style={[a.text_md, t.atoms.text_contrast_medium]}> 504 - <Text style={[a.text_md, a.font_bold, t.atoms.text]}> 505 + <Text style={[a.text_md, a.font_semi_bold, t.atoms.text]}> 505 506 {formatPostStatCount(post.bookmarkCount)} 506 507 </Text>{' '} 507 508 <Plural value={post.bookmarkCount} one="save" other="saves" /> ··· 669 670 <Text 670 671 style={[ 671 672 a.text_xs, 672 - a.font_bold, 673 + a.font_semi_bold, 673 674 a.leading_tight, 674 675 t.atoms.text_contrast_medium, 675 676 ]}> ··· 686 687 <Prompt.DescriptionText> 687 688 <Trans> 688 689 This post claims to have been created on{' '} 689 - <RNText style={[a.font_bold]}>{niceDate(i18n, createdAt)}</RNText>, 690 - but was first seen by Bluesky on{' '} 691 - <RNText style={[a.font_bold]}>{niceDate(i18n, indexedAt)}</RNText>. 690 + <RNText style={[a.font_semi_bold]}> 691 + {niceDate(i18n, createdAt)} 692 + </RNText> 693 + , but was first seen by Bluesky on{' '} 694 + <RNText style={[a.font_semi_bold]}> 695 + {niceDate(i18n, indexedAt)} 696 + </RNText> 697 + . 692 698 </Trans> 693 699 </Prompt.DescriptionText> 694 700 <Text
+2 -1
src/screens/PostThread/components/ThreadItemPost.tsx
··· 106 106 ]}> 107 107 <TrashIcon style={[t.atoms.text_contrast_medium]} /> 108 108 </View> 109 - <Text style={[a.text_md, a.font_bold, t.atoms.text_contrast_medium]}> 109 + <Text 110 + style={[a.text_md, a.font_semi_bold, t.atoms.text_contrast_medium]}> 110 111 <Trans>Post has been deleted</Trans> 111 112 </Text> 112 113 </View>
+2 -1
src/screens/PostThread/components/ThreadItemPostTombstone.tsx
··· 46 46 <View style={[a.flex_row, a.justify_center, {width: LINEAR_AVI_WIDTH}]}> 47 47 <Icon style={[t.atoms.text_contrast_medium]} /> 48 48 </View> 49 - <Text style={[a.text_md, a.font_bold, t.atoms.text_contrast_medium]}> 49 + <Text 50 + style={[a.text_md, a.font_semi_bold, t.atoms.text_contrast_medium]}> 50 51 {copy} 51 52 </Text> 52 53 </View>
+1 -1
src/screens/Profile/ErrorState.tsx
··· 27 27 <View style={[a.px_xl]}> 28 28 <CircleInfo width={48} style={[t.atoms.text_contrast_low]} /> 29 29 30 - <Text style={[a.text_xl, a.font_bold, a.pb_md, a.pt_xl]}> 30 + <Text style={[a.text_xl, a.font_semi_bold, a.pb_md, a.pt_xl]}> 31 31 <Trans>Hmmmm, we couldn't load that moderation service.</Trans> 32 32 </Text> 33 33 <Text
+1 -1
src/screens/Profile/Header/DisplayName.tsx
··· 27 27 t.atoms.text, 28 28 gtMobile ? a.text_4xl : a.text_3xl, 29 29 a.self_start, 30 - a.font_heavy, 30 + a.font_bold, 31 31 ]}> 32 32 {sanitizeDisplayName( 33 33 profile.displayName || sanitizeHandle(profile.handle),
+2 -2
src/screens/Profile/Header/EditProfileDialog.tsx
··· 326 326 style={[ 327 327 a.text_sm, 328 328 a.mt_xs, 329 - a.font_bold, 329 + a.font_semi_bold, 330 330 {color: t.palette.negative_400}, 331 331 ]}> 332 332 <Plural ··· 377 377 style={[ 378 378 a.text_sm, 379 379 a.mt_xs, 380 - a.font_bold, 380 + a.font_semi_bold, 381 381 {color: t.palette.negative_400}, 382 382 ]}> 383 383 <Plural
+3 -3
src/screens/Profile/Header/Metrics.tsx
··· 37 37 style={[a.flex_row, t.atoms.text]} 38 38 to={makeProfileLink(profile, 'followers')} 39 39 label={`${profile.followersCount || 0} ${pluralizedFollowers}`}> 40 - <Text style={[a.font_bold, a.text_md]}>{followers} </Text> 40 + <Text style={[a.font_semi_bold, a.text_md]}>{followers} </Text> 41 41 <Text style={[t.atoms.text_contrast_medium, a.text_md]}> 42 42 {pluralizedFollowers} 43 43 </Text> ··· 47 47 style={[a.flex_row, t.atoms.text]} 48 48 to={makeProfileLink(profile, 'follows')} 49 49 label={_(msg`${profile.followsCount || 0} following`)}> 50 - <Text style={[a.font_bold, a.text_md]}>{following} </Text> 50 + <Text style={[a.font_semi_bold, a.text_md]}>{following} </Text> 51 51 <Text style={[t.atoms.text_contrast_medium, a.text_md]}> 52 52 {pluralizedFollowings} 53 53 </Text> 54 54 </InlineLinkText> 55 - <Text style={[a.font_bold, t.atoms.text, a.text_md]}> 55 + <Text style={[a.font_semi_bold, t.atoms.text, a.text_md]}> 56 56 {formatCount(i18n, profile.postsCount || 0)}{' '} 57 57 <Text style={[t.atoms.text_contrast_medium, a.font_normal, a.text_md]}> 58 58 {plural(profile.postsCount || 0, {one: 'post', other: 'posts'})}
+2 -2
src/screens/Profile/Header/ProfileHeaderLabeler.tsx
··· 225 225 ? t.palette.contrast_700 226 226 : t.palette.white, 227 227 }, 228 - a.font_bold, 228 + a.font_semi_bold, 229 229 a.text_center, 230 230 a.leading_tight, 231 231 ]}> ··· 297 297 {({hovered, focused, pressed}) => ( 298 298 <Text 299 299 style={[ 300 - a.font_bold, 300 + a.font_semi_bold, 301 301 a.text_sm, 302 302 t.atoms.text_contrast_medium, 303 303 (hovered || focused || pressed) &&
+1 -1
src/screens/Profile/Header/ProfileHeaderStandard.tsx
··· 267 267 t.atoms.text, 268 268 gtMobile ? a.text_4xl : a.text_3xl, 269 269 a.self_start, 270 - a.font_heavy, 270 + a.font_bold, 271 271 a.leading_tight, 272 272 ]}> 273 273 {sanitizeDisplayName(
+2 -2
src/screens/Profile/components/ProfileFeedHeader.tsx
··· 234 234 <Text 235 235 style={[ 236 236 a.text_md, 237 - a.font_heavy, 237 + a.font_bold, 238 238 a.leading_tight, 239 239 gtMobile && a.text_lg, 240 240 ]} ··· 441 441 442 442 <View style={[a.flex_1, a.gap_2xs]}> 443 443 <Text 444 - style={[a.text_2xl, a.font_heavy, a.leading_tight]} 444 + style={[a.text_2xl, a.font_bold, a.leading_tight]} 445 445 numberOfLines={2}> 446 446 {info.displayName} 447 447 </Text>
+1 -1
src/screens/ProfileList/components/ErrorScreen.tsx
··· 22 22 23 23 return ( 24 24 <View style={[a.px_xl, a.py_md, a.gap_md]}> 25 - <Text style={[a.text_4xl, a.font_heavy]}> 25 + <Text style={[a.text_4xl, a.font_bold]}> 26 26 <Trans>Could not load list</Trans> 27 27 </Text> 28 28 <Text style={[a.text_md, t.atoms.text_contrast_high, a.leading_snug]}>
+2 -2
src/screens/SavedFeeds.tsx
··· 374 374 a.border_b, 375 375 t.atoms.border_contrast_low, 376 376 ]}> 377 - <Text style={[a.text_xl, a.font_heavy, a.leading_snug]}>{children}</Text> 377 + <Text style={[a.text_xl, a.font_bold, a.leading_snug]}>{children}</Text> 378 378 </View> 379 379 ) 380 380 } ··· 406 406 /> 407 407 </View> 408 408 <View style={[a.flex_1, a.flex_row, a.gap_sm, a.align_center]}> 409 - <Text style={[a.text_sm, a.font_bold, a.leading_snug]}> 409 + <Text style={[a.text_sm, a.font_semi_bold, a.leading_snug]}> 410 410 <Trans context="feed-name">Following</Trans> 411 411 </Text> 412 412 </View>
+1 -1
src/screens/Search/Explore.tsx
··· 885 885 ]}> 886 886 <CircleInfo size="md" fill={t.palette.negative_400} /> 887 887 <View style={[a.flex_1, a.gap_sm]}> 888 - <Text style={[a.font_bold, a.leading_snug]}> 888 + <Text style={[a.font_semi_bold, a.leading_snug]}> 889 889 {item.message} 890 890 </Text> 891 891 <Text
+1 -1
src/screens/Search/Shell.tsx
··· 460 460 a.pt_sm, 461 461 a.pb_lg, 462 462 ]}> 463 - <Text style={[a.text_2xl, a.font_heavy]}> 463 + <Text style={[a.text_2xl, a.font_bold]}> 464 464 <Trans>Search</Trans> 465 465 </Text> 466 466 </View>
+5 -1
src/screens/Search/components/ModuleHeader.tsx
··· 93 93 94 94 export function TitleText({style, ...props}: TextProps) { 95 95 return ( 96 - <Text style={[a.font_bold, a.flex_1, a.text_xl, style]} emoji {...props} /> 96 + <Text 97 + style={[a.font_semi_bold, a.flex_1, a.text_xl, style]} 98 + emoji 99 + {...props} 100 + /> 97 101 ) 98 102 } 99 103
+1 -1
src/screens/Search/components/SearchHistory.tsx
··· 45 45 <View style={[a.w_full, a.gap_md]}> 46 46 {(searchHistory.length > 0 || selectedProfiles.length > 0) && ( 47 47 <View style={[a.px_lg, a.pt_sm]}> 48 - <Text style={[a.text_md, a.font_bold]}> 48 + <Text style={[a.text_md, a.font_semi_bold]}> 49 49 <Trans>Recent Searches</Trans> 50 50 </Text> 51 51 </View>
+2 -2
src/screens/Search/components/StarterPackCard.tsx
··· 89 89 <View style={[a.flex_1]}> 90 90 <Text 91 91 emoji 92 - style={[a.text_md, a.font_bold, a.leading_snug]} 92 + style={[a.text_md, a.font_semi_bold, a.leading_snug]} 93 93 numberOfLines={1}> 94 94 {record.name} 95 95 </Text> ··· 242 242 <Text 243 243 style={[ 244 244 gtPhone ? a.text_md : a.text_xs, 245 - a.font_bold, 245 + a.font_semi_bold, 246 246 a.leading_snug, 247 247 {color: 'white'}, 248 248 ]}>
+1 -1
src/screens/Search/modules/ExploreInterestsCard.tsx
··· 63 63 ]}> 64 64 <View style={[a.flex_row, a.gap_sm, a.align_center]}> 65 65 <Shapes /> 66 - <Text style={[a.text_xl, a.font_bold, a.leading_tight]}> 66 + <Text style={[a.text_xl, a.font_semi_bold, a.leading_tight]}> 67 67 <Trans>Your interests</Trans> 68 68 </Text> 69 69 </View>
+1 -1
src/screens/Search/modules/ExploreRecommendations.tsx
··· 50 50 fill={t.palette.primary_500} 51 51 style={{marginLeft: -2}} 52 52 /> 53 - <Text style={[a.text_2xl, a.font_heavy, t.atoms.text]}> 53 + <Text style={[a.text_2xl, a.font_bold, t.atoms.text]}> 54 54 <Trans>Recommended</Trans> 55 55 </Text> 56 56 </View>
+2 -2
src/screens/Search/modules/ExploreTrendingTopics.tsx
··· 104 104 <Text 105 105 style={[ 106 106 a.text_md, 107 - a.font_bold, 107 + a.font_semi_bold, 108 108 a.leading_tight, 109 109 {width: 20}, 110 110 ]}> ··· 113 113 </Trans> 114 114 </Text> 115 115 <Text 116 - style={[a.text_md, a.font_bold, a.leading_tight]} 116 + style={[a.text_md, a.font_semi_bold, a.leading_tight]} 117 117 numberOfLines={1}> 118 118 {trend.displayName} 119 119 </Text>
+1 -1
src/screens/Settings/AccountSettings.tsx
··· 97 97 color={t.palette.primary_500} 98 98 /> 99 99 <SettingsList.ItemText 100 - style={[{color: t.palette.primary_500}, a.font_bold]}> 100 + style={[{color: t.palette.primary_500}, a.font_semi_bold]}> 101 101 <Trans>Verify your email</Trans> 102 102 </SettingsList.ItemText> 103 103 <SettingsList.Chevron color={t.palette.primary_500} />
+7 -2
src/screens/Settings/AppIconSettings/index.tsx
··· 93 93 a.text_md, 94 94 a.mt_xl, 95 95 a.mb_sm, 96 - a.font_bold, 96 + a.font_semi_bold, 97 97 t.atoms.text_contrast_medium, 98 98 ]}> 99 99 <Trans>Bluesky+</Trans> ··· 201 201 const t = useTheme() 202 202 return ( 203 203 <Text 204 - style={[a.text_md, a.font_bold, a.flex_1, t.atoms.text_contrast_medium]} 204 + style={[ 205 + a.text_md, 206 + a.font_semi_bold, 207 + a.flex_1, 208 + t.atoms.text_contrast_medium, 209 + ]} 205 210 emoji> 206 211 {children} 207 212 </Text>
+1 -1
src/screens/Settings/AppPasswords.tsx
··· 167 167 a.gap_sm, 168 168 ]}> 169 169 <View style={[a.gap_xs]}> 170 - <Text style={[t.atoms.text, a.text_md, a.font_bold]}> 170 + <Text style={[t.atoms.text, a.text_md, a.font_semi_bold]}> 171 171 {appPassword.name} 172 172 </Text> 173 173 <Text style={[t.atoms.text_contrast_medium]}>
+1 -1
src/screens/Settings/InterestsSettings.tsx
··· 222 222 { 223 223 color: t.palette.contrast_900, 224 224 }, 225 - a.font_bold, 225 + a.font_semi_bold, 226 226 ctx.selected ? styles.textSelected : {}, 227 227 ]}> 228 228 {interestsDisplayNames[interest]}
+5 -2
src/screens/Settings/NotificationSettings/ActivityNotificationSettings.tsx
··· 140 140 Enable notifications for an account by visiting their 141 141 profile and pressing the{' '} 142 142 <RNText 143 - style={[a.font_bold, t.atoms.text_contrast_high]}> 143 + style={[ 144 + a.font_semi_bold, 145 + t.atoms.text_contrast_high, 146 + ]}> 144 147 bell icon 145 148 </RNText>{' '} 146 149 <BellRingingFilledIcon ··· 157 160 <InlineLinkText 158 161 label={_(msg`Privacy and Security settings`)} 159 162 to={{screen: 'ActivityPrivacySettings'}} 160 - style={[a.font_bold]}> 163 + style={[a.font_semi_bold]}> 161 164 Settings &rarr; Privacy and Security 162 165 </InlineLinkText> 163 166 .
+1 -1
src/screens/Settings/NotificationSettings/components/ItemTextWithSubtitle.tsx
··· 19 19 const t = useTheme() 20 20 return ( 21 21 <View style={[a.flex_1, bold ? a.gap_xs : a.gap_2xs]}> 22 - <SettingsList.ItemText style={bold && [a.font_bold, a.text_lg]}> 22 + <SettingsList.ItemText style={bold && [a.font_semi_bold, a.text_lg]}> 23 23 {titleText} 24 24 </SettingsList.ItemText> 25 25 {showSkeleton ? (
+1 -1
src/screens/Settings/NotificationSettings/components/PreferenceControls.tsx
··· 150 150 {'include' in preference && ( 151 151 <> 152 152 <Divider /> 153 - <Text style={[a.font_bold, a.text_md]}> 153 + <Text style={[a.font_semi_bold, a.text_md]}> 154 154 <Trans>From</Trans> 155 155 </Text> 156 156 <Toggle.Group
+4 -2
src/screens/Settings/Settings.tsx
··· 350 350 a.pt_sm, 351 351 t.atoms.text, 352 352 gtMobile ? a.text_4xl : a.text_3xl, 353 - a.font_heavy, 353 + a.font_bold, 354 354 ]}> 355 355 {displayName} 356 356 </Text> ··· 520 520 521 521 <SettingsList.Divider /> 522 522 <View style={[a.p_xl, a.gap_md]}> 523 - <Text style={[a.text_lg, a.font_bold]}>PolicyUpdate202508 Debug</Text> 523 + <Text style={[a.text_lg, a.font_semi_bold]}> 524 + PolicyUpdate202508 Debug 525 + </Text> 524 526 525 527 <View style={[a.flex_row, a.align_center, a.justify_between, a.gap_md]}> 526 528 <Button
+2 -2
src/screens/Settings/components/AddAppPasswordDialog.tsx
··· 107 107 style={[a.gap_lg]} 108 108 exiting={native(SlideOutLeft)} 109 109 key={0}> 110 - <Text style={[a.text_2xl, a.font_bold]}> 110 + <Text style={[a.text_2xl, a.font_semi_bold]}> 111 111 <Trans>Add App Password</Trans> 112 112 </Text> 113 113 <Text style={[a.text_md, a.leading_snug]}> ··· 183 183 style={[a.gap_lg]} 184 184 entering={isWeb ? FadeIn.delay(200) : SlideInRight} 185 185 key={1}> 186 - <Text style={[a.text_2xl, a.font_bold]}> 186 + <Text style={[a.text_2xl, a.font_semi_bold]}> 187 187 <Trans>Here is your app password!</Trans> 188 188 </Text> 189 189 <Text style={[a.text_md, a.leading_snug]}>
+3 -3
src/screens/Settings/components/ChangeHandleDialog.tsx
··· 244 244 <Text> 245 245 <Trans> 246 246 Your full handle will be{' '} 247 - <Text style={[a.font_bold]}> 247 + <Text style={[a.font_semi_bold]}> 248 248 @{createFullHandle(subdomain, host)} 249 249 </Text> 250 250 </Trans> ··· 280 280 }), 281 281 )} 282 282 to="https://bsky.social/about/blog/4-28-2023-domain-handle-tutorial" 283 - style={[a.font_bold]} 283 + style={[a.font_semi_bold]} 284 284 disableMismatchWarning> 285 285 Learn more here. 286 286 </InlineLinkText> ··· 522 522 <Admonition type="info" style={[a.mb_md]}> 523 523 <Trans> 524 524 Your current handle{' '} 525 - <Text style={[a.font_bold]}> 525 + <Text style={[a.font_semi_bold]}> 526 526 {sanitizeHandle(currentAccount?.handle || '', '@')} 527 527 </Text>{' '} 528 528 will automatically remain reserved for you. You can switch back to
+1 -1
src/screens/Settings/components/ChangePasswordDialog.tsx
··· 165 165 style={web({maxWidth: 400})}> 166 166 <View style={[a.gap_xl]}> 167 167 <View style={[a.gap_sm]}> 168 - <Text style={[a.font_heavy, a.text_2xl]}> 168 + <Text style={[a.font_bold, a.text_2xl]}> 169 169 {uiStrings[stage].title} 170 170 </Text> 171 171 {error ? (
+1 -1
src/screens/Settings/components/CopyButton.tsx
··· 58 58 pointerEvents="none"> 59 59 <Text 60 60 style={[ 61 - a.font_bold, 61 + a.font_semi_bold, 62 62 a.text_right, 63 63 a.text_md, 64 64 t.atoms.text_contrast_high,
+1 -1
src/screens/Settings/components/DisableEmail2FADialog.tsx
··· 85 85 <View style={[a.relative, a.gap_md, a.w_full]}> 86 86 <Text 87 87 nativeID="dialog-title" 88 - style={[a.text_2xl, a.font_bold, t.atoms.text]}> 88 + style={[a.text_2xl, a.font_semi_bold, t.atoms.text]}> 89 89 <Trans>Disable Email 2FA</Trans> 90 90 </Text> 91 91 <P nativeID="dialog-description">
+1 -1
src/screens/Settings/components/ExportCarDialog.tsx
··· 58 58 accessibilityDescribedBy="dialog-description" 59 59 accessibilityLabelledBy="dialog-title"> 60 60 <View style={[a.relative, a.gap_lg, a.w_full]}> 61 - <Text nativeID="dialog-title" style={[a.text_2xl, a.font_heavy]}> 61 + <Text nativeID="dialog-title" style={[a.text_2xl, a.font_bold]}> 62 62 <Trans>Export My Data</Trans> 63 63 </Text> 64 64 <Text
+4 -3
src/screens/Signup/index.tsx
··· 139 139 <Animated.View entering={!isFetchedAtMount ? FadeIn : undefined}> 140 140 <LinearGradientBackground 141 141 style={[a.mx_lg, a.p_lg, a.gap_sm, a.rounded_sm]}> 142 - <Text style={[a.font_bold, a.text_xl, {color: 'white'}]}> 142 + <Text style={[a.font_semi_bold, a.text_xl, {color: 'white'}]}> 143 143 {starterPack.record.name} 144 144 </Text> 145 145 <Text style={[{color: 'white'}]}> ··· 170 170 !gtMobile && {paddingBottom: 100}, 171 171 ]}> 172 172 <View style={[a.gap_sm, a.pb_3xl]}> 173 - <Text style={[a.font_bold, t.atoms.text_contrast_medium]}> 173 + <Text 174 + style={[a.font_semi_bold, t.atoms.text_contrast_medium]}> 174 175 <Trans> 175 176 Step {state.activeStep + 1} of{' '} 176 177 {state.serviceDescription && ··· 179 180 : '3'} 180 181 </Trans> 181 182 </Text> 182 - <Text style={[a.text_3xl, a.font_bold]}> 183 + <Text style={[a.text_3xl, a.font_semi_bold]}> 183 184 {state.activeStep === SignupStep.INFO ? ( 184 185 <Trans>The ATmosphere ✨</Trans> 185 186 ) : state.activeStep === SignupStep.HANDLE ? (
+2 -2
src/screens/SignupQueued.tsx
··· 123 123 <Logo width={120} /> 124 124 </View> 125 125 126 - <Text style={[a.text_4xl, a.font_heavy, a.pb_sm]}> 126 + <Text style={[a.text_4xl, a.font_bold, a.pb_sm]}> 127 127 <Trans>You're in line</Trans> 128 128 </Text> 129 129 <P style={[t.atoms.text_contrast_medium]}> ··· 146 146 ]}> 147 147 {typeof placeInQueue === 'number' && ( 148 148 <Text 149 - style={[a.text_5xl, a.text_center, a.font_heavy, a.mb_2xl]}> 149 + style={[a.text_5xl, a.text_center, a.font_bold, a.mb_2xl]}> 150 150 {placeInQueue} 151 151 </Text> 152 152 )}
+19 -6
src/screens/StarterPack/StarterPackLandingScreen.tsx
··· 183 183 </View> 184 184 <Text 185 185 style={[ 186 - a.font_bold, 186 + a.font_semi_bold, 187 187 a.text_4xl, 188 188 a.text_center, 189 189 a.leading_tight, ··· 192 192 {record.name} 193 193 </Text> 194 194 <Text 195 - style={[a.text_center, a.font_bold, a.text_md, {color: 'white'}]}> 195 + style={[ 196 + a.text_center, 197 + a.font_semi_bold, 198 + a.text_md, 199 + {color: 'white'}, 200 + ]}> 196 201 Starter pack by {`@${creator.handle}`} 197 202 </Text> 198 203 </LinearGradientBackground> ··· 218 223 color={t.atoms.text_contrast_medium.color} 219 224 /> 220 225 <Text 221 - style={[a.font_bold, a.text_sm, t.atoms.text_contrast_medium]} 226 + style={[ 227 + a.font_semi_bold, 228 + a.text_sm, 229 + t.atoms.text_contrast_medium, 230 + ]} 222 231 numberOfLines={1}> 223 232 <Trans> 224 233 {formatCount(i18n, JOINED_THIS_WEEK)} joined this week ··· 229 238 <View style={[a.gap_3xl]}> 230 239 {Boolean(listItemsSample?.length) && ( 231 240 <View style={[a.gap_md]}> 232 - <Text style={[a.font_heavy, a.text_lg]}> 241 + <Text style={[a.font_bold, a.text_lg]}> 233 242 {listItemsCount <= 8 ? ( 234 243 <Trans>You'll follow these people right away</Trans> 235 244 ) : ( ··· 270 279 )} 271 280 {feeds?.length ? ( 272 281 <View style={[a.gap_md]}> 273 - <Text style={[a.font_heavy, a.text_lg]}> 282 + <Text style={[a.font_bold, a.text_lg]}> 274 283 <Trans>You'll stay updated with these feeds</Trans> 275 284 </Text> 276 285 ··· 387 396 {/* Webkit needs this to have a zindex of 2? */} 388 397 <View style={[a.gap_md, {zIndex: 2}]}> 389 398 <Text 390 - style={[a.font_bold, a.text_4xl, {lineHeight: 40, color: 'white'}]}> 399 + style={[ 400 + a.font_semi_bold, 401 + a.text_4xl, 402 + {lineHeight: 40, color: 'white'}, 403 + ]}> 391 404 Download Bluesky to get started! 392 405 </Text> 393 406 <Text style={[a.text_lg, {color: 'white'}]}>
+7 -3
src/screens/StarterPack/StarterPackScreen.tsx
··· 486 486 color={t.atoms.text_contrast_medium.color} 487 487 /> 488 488 <Text 489 - style={[a.font_bold, a.text_sm, t.atoms.text_contrast_medium]}> 489 + style={[ 490 + a.font_semi_bold, 491 + a.text_sm, 492 + t.atoms.text_contrast_medium, 493 + ]}> 490 494 <Trans comment="Number of users (always at least 25) who have joined Bluesky using a specific starter pack"> 491 495 <Plural 492 496 value={starterPack.joinedAllTimeCount || 0} ··· 669 673 t.atoms.bg_contrast_25, 670 674 ]}> 671 675 <View style={[a.flex_1, a.gap_2xs]}> 672 - <Text style={[a.font_bold]}> 676 + <Text style={[a.font_semi_bold]}> 673 677 <Trans>Unable to delete</Trans> 674 678 </Text> 675 679 <Text style={[a.leading_snug]}>{cleanError(deleteError)}</Text> ··· 727 731 <Layout.Content centerContent> 728 732 <View style={[a.py_4xl, a.px_xl, a.align_center, a.gap_5xl]}> 729 733 <View style={[a.w_full, a.align_center, a.gap_lg]}> 730 - <Text style={[a.font_bold, a.text_3xl]}> 734 + <Text style={[a.font_semi_bold, a.text_3xl]}> 731 735 <Trans>Starter pack is invalid</Trans> 732 736 </Text> 733 737 <Text
+1 -1
src/screens/StarterPack/Wizard/StepDetails.tsx
··· 27 27 <View style={[a.px_xl, a.gap_xl, a.mt_4xl]}> 28 28 <View style={[a.gap_md, a.align_center, a.px_md, a.mb_md]}> 29 29 <StarterPack width={90} gradient="sky" /> 30 - <Text style={[a.font_bold, a.text_3xl]}> 30 + <Text style={[a.font_semi_bold, a.text_3xl]}> 31 31 <Trans>Invites, but personal</Trans> 32 32 </Text> 33 33 <Text style={[a.text_center, a.text_md, a.px_md]}>
+1 -1
src/screens/StarterPack/Wizard/StepFeeds.tsx
··· 113 113 ) : ( 114 114 <Text 115 115 style={[ 116 - a.font_bold, 116 + a.font_semi_bold, 117 117 a.text_lg, 118 118 a.text_center, 119 119 a.mt_lg,
+1 -1
src/screens/StarterPack/Wizard/StepProfiles.tsx
··· 98 98 ) : ( 99 99 <Text 100 100 style={[ 101 - a.font_bold, 101 + a.font_semi_bold, 102 102 a.text_lg, 103 103 a.text_center, 104 104 a.mt_lg,
+20 -15
src/screens/StarterPack/Wizard/index.tsx
··· 447 447 ]}> 448 448 {items.length > minimumItems && ( 449 449 <View style={[a.absolute, {right: 14, top: 31}]}> 450 - <Text style={[a.font_bold]}> 450 + <Text style={[a.font_semi_bold]}> 451 451 {items.length}/ 452 452 {state.currentStep === 'Profiles' ? STARTER_PACK_MAX_SIZE : 3} 453 453 </Text> ··· 490 490 ) : ( 491 491 <Trans> 492 492 It's just{' '} 493 - <Text style={[a.font_bold, textStyles]} emoji> 493 + <Text style={[a.font_semi_bold, textStyles]} emoji> 494 494 {getName(items[0])}{' '} 495 495 </Text> 496 496 right now! Add more people to your starter pack by searching ··· 500 500 ) : items.length === 2 ? ( 501 501 currentAccount?.did === items[0].did ? ( 502 502 <Trans> 503 - <Text style={[a.font_bold, textStyles]}>You</Text> and 503 + <Text style={[a.font_semi_bold, textStyles]}>You</Text> and 504 504 <Text> </Text> 505 - <Text style={[a.font_bold, textStyles]} emoji> 505 + <Text style={[a.font_semi_bold, textStyles]} emoji> 506 506 {getName(items[1] /* [0] is self, skip it */)}{' '} 507 507 </Text> 508 508 are included in your starter pack 509 509 </Trans> 510 510 ) : ( 511 511 <Trans> 512 - <Text style={[a.font_bold, textStyles]}> 512 + <Text style={[a.font_semi_bold, textStyles]}> 513 513 {getName(items[0])} 514 514 </Text>{' '} 515 515 and 516 516 <Text> </Text> 517 - <Text style={[a.font_bold, textStyles]} emoji> 517 + <Text style={[a.font_semi_bold, textStyles]} emoji> 518 518 {getName(items[1] /* [0] is self, skip it */)}{' '} 519 519 </Text> 520 520 are included in your starter pack ··· 522 522 ) 523 523 ) : items.length > 2 ? ( 524 524 <Trans context="profiles"> 525 - <Text style={[a.font_bold, textStyles]} emoji> 525 + <Text style={[a.font_semi_bold, textStyles]} emoji> 526 526 {getName(items[1] /* [0] is self, skip it */)},{' '} 527 527 </Text> 528 - <Text style={[a.font_bold, textStyles]} emoji> 528 + <Text style={[a.font_semi_bold, textStyles]} emoji> 529 529 {getName(items[2])},{' '} 530 530 </Text> 531 531 and{' '} ··· 542 542 ) : state.currentStep === 'Feeds' ? ( 543 543 items.length === 0 ? ( 544 544 <View style={[a.gap_sm]}> 545 - <Text style={[a.font_bold, a.text_center, textStyles]}> 545 + <Text style={[a.font_semi_bold, a.text_center, textStyles]}> 546 546 <Trans>Add some feeds to your starter pack!</Trans> 547 547 </Text> 548 548 <Text style={[a.text_center, textStyles]}> ··· 556 556 { 557 557 items.length === 1 ? ( 558 558 <Trans> 559 - <Text style={[a.font_bold, textStyles]} emoji> 559 + <Text style={[a.font_semi_bold, textStyles]} emoji> 560 560 {getName(items[0])} 561 561 </Text>{' '} 562 562 is included in your starter pack 563 563 </Trans> 564 564 ) : items.length === 2 ? ( 565 565 <Trans> 566 - <Text style={[a.font_bold, textStyles]} emoji> 566 + <Text style={[a.font_semi_bold, textStyles]} emoji> 567 567 {getName(items[0])} 568 568 </Text>{' '} 569 569 and 570 570 <Text> </Text> 571 - <Text style={[a.font_bold, textStyles]} emoji> 571 + <Text style={[a.font_semi_bold, textStyles]} emoji> 572 572 {getName(items[1])}{' '} 573 573 </Text> 574 574 are included in your starter pack 575 575 </Trans> 576 576 ) : items.length > 2 ? ( 577 577 <Trans context="feeds"> 578 - <Text style={[a.font_bold, textStyles]} emoji> 578 + <Text style={[a.font_semi_bold, textStyles]} emoji> 579 579 {getName(items[0])},{' '} 580 580 </Text> 581 - <Text style={[a.font_bold, textStyles]} emoji> 581 + <Text style={[a.font_semi_bold, textStyles]} emoji> 582 582 {getName(items[1])},{' '} 583 583 </Text> 584 584 and{' '} ··· 604 604 isNative ? a.mt_sm : a.mt_md, 605 605 ]}> 606 606 {state.currentStep === 'Profiles' && items.length < 8 && ( 607 - <Text style={[a.font_bold, textStyles, t.atoms.text_contrast_medium]}> 607 + <Text 608 + style={[ 609 + a.font_semi_bold, 610 + textStyles, 611 + t.atoms.text_contrast_medium, 612 + ]}> 608 613 <Trans>Add {8 - items.length} more to continue</Trans> 609 614 </Text> 610 615 )}
+1 -1
src/screens/Takendown.tsx
··· 148 148 <Logo width={64} /> 149 149 </View> 150 150 151 - <Text style={[a.text_4xl, a.font_heavy, a.pb_md]}> 151 + <Text style={[a.text_4xl, a.font_bold, a.pb_md]}> 152 152 {isAppealling ? ( 153 153 <Trans>Appeal suspension</Trans> 154 154 ) : (
+1 -1
src/screens/VideoFeed/components/Header.tsx
··· 120 120 <Text 121 121 style={[ 122 122 a.text_md, 123 - a.font_heavy, 123 + a.font_bold, 124 124 a.leading_tight, 125 125 gtMobile && a.text_lg, 126 126 ]}
+1 -1
src/screens/VideoFeed/components/Scrubber.tsx
··· 179 179 timeStyle, 180 180 ]} 181 181 pointerEvents="none"> 182 - <Text style={[a.text_center, a.font_bold]}> 182 + <Text style={[a.text_center, a.font_semi_bold]}> 183 183 <Text style={[a.text_5xl, {fontVariant: ['tabular-nums']}]}> 184 184 {formatTime(currentSeekTime)} 185 185 </Text>
+4 -4
src/screens/VideoFeed/index.tsx
··· 524 524 <Text 525 525 style={[ 526 526 a.text_2xl, 527 - a.font_heavy, 527 + a.font_bold, 528 528 a.text_center, 529 529 a.leading_tight, 530 530 a.mx_xl, ··· 670 670 <Text 671 671 style={[ 672 672 a.text_sm, 673 - a.font_bold, 673 + a.font_semi_bold, 674 674 a.text_center, 675 675 {opacity: pressed ? 0.5 : 1}, 676 676 ]}> ··· 807 807 /> 808 808 <View style={[a.flex_1]}> 809 809 <Text 810 - style={[a.text_md, a.font_heavy]} 810 + style={[a.text_md, a.font_bold]} 811 811 emoji 812 812 numberOfLines={1}> 813 813 {sanitizeDisplayName( ··· 1115 1115 <LeafIcon width={64} fill="black" /> 1116 1116 </View> 1117 1117 <View style={[a.w_full, a.gap_md]}> 1118 - <Text style={[a.text_3xl, a.text_center, a.font_heavy]}> 1118 + <Text style={[a.text_3xl, a.text_center, a.font_bold]}> 1119 1119 <Trans>That's everything!</Trans> 1120 1120 </Text> 1121 1121 <Text
+1 -1
src/view/com/auth/SplashScreen.tsx
··· 44 44 <Text 45 45 style={[ 46 46 a.text_md, 47 - a.font_bold, 47 + a.font_semi_bold, 48 48 t.atoms.text_contrast_medium, 49 49 a.text_center, 50 50 ]}>
+5 -1
src/view/com/auth/SplashScreen.web.tsx
··· 95 95 )} 96 96 97 97 <Text 98 - style={[a.text_md, a.font_bold, t.atoms.text_contrast_medium]}> 98 + style={[ 99 + a.text_md, 100 + a.font_semi_bold, 101 + t.atoms.text_contrast_medium, 102 + ]}> 99 103 <Trans>What's up?</Trans> 100 104 </Text> 101 105 </View>
+1 -1
src/view/com/auth/server-input/index.tsx
··· 126 126 accessibilityDescribedBy="dialog-description" 127 127 accessibilityLabelledBy="dialog-title"> 128 128 <View style={[a.relative, a.gap_md, a.w_full]}> 129 - <Text nativeID="dialog-title" style={[a.text_2xl, a.font_bold]}> 129 + <Text nativeID="dialog-title" style={[a.text_2xl, a.font_semi_bold]}> 130 130 <Trans>Choose your account provider</Trans> 131 131 </Text> 132 132 <ToggleButton.Group
+2 -2
src/view/com/composer/Composer.tsx
··· 1770 1770 style={[ 1771 1771 {paddingLeft: 28}, 1772 1772 a.text_xs, 1773 - a.font_bold, 1773 + a.font_semi_bold, 1774 1774 a.leading_snug, 1775 1775 t.atoms.text_contrast_low, 1776 1776 ]}> ··· 1863 1863 progress={wheelProgress} 1864 1864 /> 1865 1865 </Animated.View> 1866 - <NewText style={[a.font_bold, a.ml_sm]}>{text}</NewText> 1866 + <NewText style={[a.font_semi_bold, a.ml_sm]}>{text}</NewText> 1867 1867 </ToolbarWrapper> 1868 1868 ) 1869 1869 }
+1 -1
src/view/com/composer/ComposerReplyTo.tsx
··· 101 101 <View style={[a.flex_1, a.pl_md, a.pr_sm, a.gap_2xs]}> 102 102 <View style={[a.flex_row, a.align_center, a.pr_xs]}> 103 103 <Text 104 - style={[a.font_bold, a.text_md, a.leading_snug, a.flex_shrink]} 104 + style={[a.font_semi_bold, a.text_md, a.leading_snug, a.flex_shrink]} 105 105 numberOfLines={1} 106 106 emoji> 107 107 {sanitizeDisplayName(
+3 -2
src/view/com/composer/GifAltText.tsx
··· 95 95 <Plus size="sm" fill={t.palette.white} /> 96 96 )} 97 97 <Text 98 - style={[a.font_bold, {color: t.palette.white}]} 98 + style={[a.font_semi_bold, {color: t.palette.white}]} 99 99 accessible={false}> 100 100 <Trans>ALT</Trans> 101 101 </Text> ··· 206 206 </View> 207 207 {/* below the text input to force tab order */} 208 208 <View> 209 - <Text style={[a.text_2xl, a.font_bold, a.leading_tight, a.pb_sm]}> 209 + <Text 210 + style={[a.text_2xl, a.font_semi_bold, a.leading_tight, a.pb_sm]}> 210 211 <Trans>Add alt text</Trans> 211 212 </Text> 212 213 <View style={[a.align_center]}>
+3 -3
src/view/com/composer/labels/LabelsBtn.tsx
··· 108 108 style={[{maxWidth: 500}, a.w_full]}> 109 109 <View style={[a.flex_1]}> 110 110 <View style={[a.gap_sm]}> 111 - <Text style={[a.text_2xl, a.font_bold]}> 111 + <Text style={[a.text_2xl, a.font_semi_bold]}> 112 112 <Trans>Add a content warning</Trans> 113 113 </Text> 114 114 <Text style={[t.atoms.text_contrast_medium, a.leading_snug]}> ··· 123 123 <View> 124 124 <View 125 125 style={[a.flex_row, a.align_center, a.justify_between, a.pb_sm]}> 126 - <Text style={[a.font_bold, a.text_lg]}> 126 + <Text style={[a.font_semi_bold, a.text_lg]}> 127 127 <Trans>Adult Content</Trans> 128 128 </Text> 129 129 </View> ··· 181 181 <View> 182 182 <View 183 183 style={[a.flex_row, a.align_center, a.justify_between, a.pb_sm]}> 184 - <Text style={[a.font_bold, a.text_lg]}> 184 + <Text style={[a.font_semi_bold, a.text_lg]}> 185 185 <Trans>Other</Trans> 186 186 </Text> 187 187 </View>
+1 -1
src/view/com/composer/photos/ImageAltTextDialog.tsx
··· 89 89 <Dialog.Close /> 90 90 91 91 <View> 92 - <Text style={[a.text_2xl, a.font_bold, a.leading_tight, a.pb_sm]}> 92 + <Text style={[a.text_2xl, a.font_semi_bold, a.leading_tight, a.pb_sm]}> 93 93 <Trans>Add alt text</Trans> 94 94 </Text> 95 95
+1 -1
src/view/com/composer/select-language/PostLanguageSelect.tsx
··· 111 111 <Text 112 112 style={[ 113 113 {color}, 114 - a.font_bold, 114 + a.font_semi_bold, 115 115 a.text_sm, 116 116 a.leading_snug, 117 117 {maxWidth: 100},
+2 -2
src/view/com/composer/select-language/PostLanguageSelectDialog.tsx
··· 155 155 style={[ 156 156 t.atoms.text, 157 157 a.text_left, 158 - a.font_bold, 158 + a.font_semi_bold, 159 159 a.text_xl, 160 160 a.mb_sm, 161 161 ]}> ··· 240 240 style={[ 241 241 a.px_0, 242 242 a.py_md, 243 - a.font_bold, 243 + a.font_semi_bold, 244 244 a.text_xs, 245 245 t.atoms.text_contrast_low, 246 246 a.pt_3xl,
+1 -1
src/view/com/composer/select-language/SuggestedLanguage.tsx
··· 88 88 <Text style={[a.flex_1]}> 89 89 <Trans> 90 90 Are you writing in{' '} 91 - <Text style={[a.font_bold]}>{suggestedLanguageName}</Text>? 91 + <Text style={[a.font_semi_bold]}>{suggestedLanguageName}</Text>? 92 92 </Trans> 93 93 </Text> 94 94
+1 -1
src/view/com/composer/text-input/TextInput.web.tsx
··· 353 353 <Text 354 354 style={[ 355 355 a.text_lg, 356 - a.font_bold, 356 + a.font_semi_bold, 357 357 t.atoms.text_contrast_medium, 358 358 t.atoms.border_contrast_high, 359 359 styles.dropText,
+1 -1
src/view/com/composer/text-input/mobile/Autocomplete.tsx
··· 110 110 platform({ios: a.flex_1}), 111 111 ]}> 112 112 <Text 113 - style={[a.text_md, a.font_bold, a.leading_snug]} 113 + style={[a.text_md, a.font_semi_bold, a.leading_snug]} 114 114 emoji 115 115 numberOfLines={1}> 116 116 {displayName}
+3 -3
src/view/com/composer/videos/SubtitleDialog.tsx
··· 97 97 return ( 98 98 <Dialog.ScrollableInner label={_(msg`Video settings`)}> 99 99 <View style={a.gap_md}> 100 - <Text style={[a.text_xl, a.font_bold, a.leading_tight]}> 100 + <Text style={[a.text_xl, a.font_semi_bold, a.leading_tight]}> 101 101 <Trans>Alt text</Trans> 102 102 </Text> 103 103 <TextField.Root> ··· 128 128 a.my_md, 129 129 ]} 130 130 /> 131 - <Text style={[a.text_xl, a.font_bold, a.leading_tight]}> 131 + <Text style={[a.text_xl, a.font_semi_bold, a.leading_tight]}> 132 132 <Trans>Captions (.vtt)</Trans> 133 133 </Text> 134 134 <SubtitleFilePicker ··· 235 235 <PageTextIcon style={[t.atoms.text, a.flex_shrink_0]} size="sm" /> 236 236 )} 237 237 <Text 238 - style={[a.flex_1, a.leading_snug, a.font_bold, a.mb_2xs]} 238 + style={[a.flex_1, a.leading_snug, a.font_semi_bold, a.mb_2xs]} 239 239 numberOfLines={1}> 240 240 {file.name} 241 241 </Text>
+2 -2
src/view/com/feeds/FeedSourceCard.tsx
··· 139 139 <View style={[a.flex_1]}> 140 140 <Text 141 141 emoji 142 - style={[a.text_sm, a.font_bold, a.leading_snug]} 142 + style={[a.text_sm, a.font_semi_bold, a.leading_snug]} 143 143 numberOfLines={1}> 144 144 {feed.displayName} 145 145 </Text> ··· 165 165 <Text 166 166 style={[ 167 167 a.text_sm, 168 - a.font_bold, 168 + a.font_semi_bold, 169 169 t.atoms.text_contrast_medium, 170 170 a.leading_snug, 171 171 ]}>
+7 -5
src/view/com/feeds/MissingFeed.tsx
··· 67 67 <View style={[a.flex_1]}> 68 68 <Text 69 69 emoji 70 - style={[a.text_sm, a.font_bold, a.leading_snug, a.italic]} 70 + style={[a.text_sm, a.font_semi_bold, a.leading_snug, a.italic]} 71 71 numberOfLines={1}> 72 72 {type === 'feed' ? ( 73 73 <Trans>Feed unavailable</Trans> ··· 128 128 } 129 129 style={web({maxWidth: 500})}> 130 130 <View style={[a.gap_sm]}> 131 - <Text style={[a.font_heavy, a.text_2xl]}> 131 + <Text style={[a.font_bold, a.text_2xl]}> 132 132 {type === 'feed' ? ( 133 133 <Trans>Could not connect to feed service</Trans> 134 134 ) : ( ··· 147 147 )} 148 148 </Text> 149 149 <Divider style={[a.my_md]} /> 150 - <Text style={[a.font_bold, t.atoms.text_contrast_high]}> 150 + <Text style={[a.font_semi_bold, t.atoms.text_contrast_high]}> 151 151 {type === 'feed' ? ( 152 152 <Trans>Feed creator</Trans> 153 153 ) : ( ··· 184 184 )} 185 185 {type === 'feed' && ( 186 186 <> 187 - <Text style={[a.font_bold, t.atoms.text_contrast_high, a.mt_md]}> 187 + <Text 188 + style={[a.font_semi_bold, t.atoms.text_contrast_high, a.mt_md]}> 188 189 <Trans>Feed identifier</Trans> 189 190 </Text> 190 191 <Text style={[a.text_md, t.atoms.text_contrast_high, a.italic]}> ··· 194 195 )} 195 196 {error instanceof Error && ( 196 197 <> 197 - <Text style={[a.font_bold, t.atoms.text_contrast_high, a.mt_md]}> 198 + <Text 199 + style={[a.font_semi_bold, t.atoms.text_contrast_high, a.mt_md]}> 198 200 <Trans>Error message</Trans> 199 201 </Text> 200 202 <Text style={[a.text_md, t.atoms.text_contrast_high, a.italic]}>
+11 -11
src/view/com/notifications/NotificationFeedItem.tsx
··· 214 214 <ProfileHoverCard did={firstAuthor.profile.did} inline> 215 215 <InlineLinkText 216 216 key={firstAuthor.href} 217 - style={[t.atoms.text, a.font_bold, a.text_md, a.leading_tight]} 217 + style={[t.atoms.text, a.font_semi_bold, a.text_md, a.leading_tight]} 218 218 to={firstAuthor.href} 219 219 disableMismatchWarning 220 220 emoji ··· 271 271 notificationContent = hasMultipleAuthors ? ( 272 272 <Trans> 273 273 {firstAuthorLink} and{' '} 274 - <Text style={[a.text_md, a.font_bold, a.leading_snug]}> 274 + <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 275 275 <Plural 276 276 value={additionalAuthorsCount} 277 277 one={`${formattedAuthorsCount} other`} ··· 295 295 notificationContent = hasMultipleAuthors ? ( 296 296 <Trans> 297 297 {firstAuthorLink} and{' '} 298 - <Text style={[a.text_md, a.font_bold, a.leading_snug]}> 298 + <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 299 299 <Plural 300 300 value={additionalAuthorsCount} 301 301 one={`${formattedAuthorsCount} other`} ··· 352 352 notificationContent = hasMultipleAuthors ? ( 353 353 <Trans> 354 354 {firstAuthorLink} and{' '} 355 - <Text style={[a.text_md, a.font_bold, a.leading_snug]}> 355 + <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 356 356 <Plural 357 357 value={additionalAuthorsCount} 358 358 one={`${formattedAuthorsCount} other`} ··· 378 378 notificationContent = hasMultipleAuthors ? ( 379 379 <Trans> 380 380 {firstAuthorLink} and{' '} 381 - <Text style={[a.text_md, a.font_bold, a.leading_snug]}> 381 + <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 382 382 <Plural 383 383 value={additionalAuthorsCount} 384 384 one={`${formattedAuthorsCount} other`} ··· 402 402 notificationContent = hasMultipleAuthors ? ( 403 403 <Trans> 404 404 {firstAuthorLink} and{' '} 405 - <Text style={[a.text_md, a.font_bold, a.leading_snug]}> 405 + <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 406 406 <Plural 407 407 value={additionalAuthorsCount} 408 408 one={`${formattedAuthorsCount} other`} ··· 483 483 notificationContent = hasMultipleAuthors ? ( 484 484 <Trans> 485 485 {firstAuthorLink} and{' '} 486 - <Text style={[a.text_md, a.font_bold, a.leading_snug]}> 486 + <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 487 487 <Plural 488 488 value={additionalAuthorsCount} 489 489 one={`${formattedAuthorsCount} other`} ··· 507 507 notificationContent = hasMultipleAuthors ? ( 508 508 <Trans> 509 509 {firstAuthorLink} and{' '} 510 - <Text style={[a.text_md, a.font_bold, a.leading_snug]}> 510 + <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 511 511 <Plural 512 512 value={additionalAuthorsCount} 513 513 one={`${formattedAuthorsCount} other`} ··· 541 541 notificationContent = hasMultipleAuthors ? ( 542 542 <Trans> 543 543 New posts from {firstAuthorLink} and{' '} 544 - <Text style={[a.text_md, a.font_bold, a.leading_snug]}> 544 + <Text style={[a.text_md, a.font_semi_bold, a.leading_snug]}> 545 545 <Plural 546 546 value={additionalAuthorsCount} 547 547 one={`${formattedAuthorsCount} other`} ··· 846 846 {authors.length > MAX_AUTHORS ? ( 847 847 <Text 848 848 style={[ 849 - a.font_bold, 849 + a.font_semi_bold, 850 850 {paddingLeft: 6}, 851 851 t.atoms.text_contrast_medium, 852 852 ]}> ··· 926 926 emoji 927 927 style={[ 928 928 a.text_md, 929 - a.font_bold, 929 + a.font_semi_bold, 930 930 a.leading_tight, 931 931 {maxWidth: '70%'}, 932 932 ]}>
+1 -1
src/view/com/pager/TabBar.tsx
··· 431 431 <Text 432 432 emoji 433 433 testID={testID ? `${testID}-${item}` : undefined} 434 - style={[styles.itemText, t.atoms.text, a.text_md, a.font_bold]} 434 + style={[styles.itemText, t.atoms.text, a.text_md, a.font_semi_bold]} 435 435 onLayout={handleTextLayout}> 436 436 {item} 437 437 </Text>
+1 -1
src/view/com/pager/TabBar.web.tsx
··· 121 121 styles.itemText, 122 122 selected ? t.atoms.text : t.atoms.text_contrast_medium, 123 123 a.text_md, 124 - a.font_bold, 124 + a.font_semi_bold, 125 125 {lineHeight: 20}, 126 126 ]}> 127 127 {item}
+1 -1
src/view/com/posts/FeedShutdownMsg.tsx
··· 92 92 t.atoms.border_contrast_low, 93 93 a.border_t, 94 94 ]}> 95 - <Text style={[a.text_5xl, a.font_bold, t.atoms.text, a.text_center]}> 95 + <Text style={[a.text_5xl, a.font_semi_bold, t.atoms.text, a.text_center]}> 96 96 :( 97 97 </Text> 98 98 <Text style={[a.text_md, a.leading_snug, t.atoms.text, a.text_center]}>
+1 -1
src/view/com/util/PostMeta.tsx
··· 92 92 onPress={onBeforePressAuthor} 93 93 style={[ 94 94 a.text_md, 95 - a.font_bold, 95 + a.font_semi_bold, 96 96 t.atoms.text, 97 97 a.leading_tight, 98 98 a.flex_shrink_0,
+1 -1
src/view/com/util/error/ErrorScreen.tsx
··· 62 62 /> 63 63 </View> 64 64 </View> 65 - <Text style={[a.text_center, a.font_heavy, a.text_2xl, a.mb_md]}> 65 + <Text style={[a.text_center, a.font_bold, a.text_2xl, a.mb_md]}> 66 66 {title} 67 67 </Text> 68 68 <Text style={[a.text_center, a.text_md, a.mb_xl]}>{message}</Text>
+1 -2
src/view/com/util/images/AutoSizedImage.tsx
··· 190 190 }, 191 191 ], 192 192 ]}> 193 - <Text 194 - style={[a.font_heavy, largeAlt ? a.text_xs : {fontSize: 8}]}> 193 + <Text style={[a.font_bold, largeAlt ? a.text_xs : {fontSize: 8}]}> 195 194 ALT 196 195 </Text> 197 196 </View>
+1 -1
src/view/com/util/images/Gallery.tsx
··· 116 116 ], 117 117 ]}> 118 118 <Text 119 - style={[a.font_heavy, largeAltBadge ? a.text_xs : {fontSize: 8}]}> 119 + style={[a.font_bold, largeAltBadge ? a.text_xs : {fontSize: 8}]}> 120 120 ALT 121 121 </Text> 122 122 </View>
+9 -7
src/view/screens/DebugMod.tsx
··· 275 275 <moderationOptsOverrideContext.Provider value={modOpts}> 276 276 <ScrollView> 277 277 <CenteredView style={[t.atoms.bg, a.px_lg, a.py_lg]}> 278 - <H1 style={[a.text_5xl, a.font_bold, a.pb_lg]}> 278 + <H1 style={[a.text_5xl, a.font_semi_bold, a.pb_lg]}> 279 279 Moderation states 280 280 </H1> 281 281 ··· 396 396 <View style={[a.mt_md]}> 397 397 <Text 398 398 style={[ 399 - a.font_bold, 399 + a.font_semi_bold, 400 400 a.text_xs, 401 401 t.atoms.text, 402 402 a.pb_sm, ··· 438 438 <View> 439 439 <Text 440 440 style={[ 441 - a.font_bold, 441 + a.font_semi_bold, 442 442 a.text_xs, 443 443 t.atoms.text, 444 444 a.pl_md, ··· 596 596 function Heading({title, subtitle}: {title: string; subtitle?: string}) { 597 597 const t = useTheme() 598 598 return ( 599 - <H3 style={[a.text_3xl, a.font_bold, a.pb_md]}> 599 + <H3 style={[a.text_3xl, a.font_semi_bold, a.pb_md]}> 600 600 {title}{' '} 601 601 {!!subtitle && ( 602 602 <H3 style={[t.atoms.text_contrast_medium, a.text_lg]}>{subtitle}</H3> ··· 627 627 a.mt_md, 628 628 ]}> 629 629 <View> 630 - <Text style={[a.font_bold, a.text_xs, t.atoms.text, a.pl_md, a.pb_xs]}> 630 + <Text 631 + style={[a.font_semi_bold, a.text_xs, t.atoms.text, a.pl_md, a.pb_xs]}> 631 632 Blurs 632 633 </Text> 633 634 <View ··· 662 663 </View> 663 664 </View> 664 665 <View> 665 - <Text style={[a.font_bold, a.text_xs, t.atoms.text, a.pl_md, a.pb_xs]}> 666 + <Text 667 + style={[a.font_semi_bold, a.text_xs, t.atoms.text, a.pl_md, a.pb_xs]}> 666 668 Severity 667 669 </Text> 668 670 <View ··· 789 791 const ui = mod.ui(key as keyof ModerationBehavior) 790 792 return ( 791 793 <View key={key} style={[a.flex_row, a.gap_md]}> 792 - <Text style={[a.font_bold, {width: 100}]}>{key}</Text> 794 + <Text style={[a.font_semi_bold, {width: 100}]}>{key}</Text> 793 795 <Flag v={ui.filter} label="Filter" /> 794 796 <Flag v={ui.blur} label="Blur" /> 795 797 <Flag v={ui.alert} label="Alert" />
+2 -2
src/view/screens/Feeds.tsx
··· 700 700 }> 701 701 <IconCircle icon={ListSparkle_Stroke2_Corner0_Rounded} size="lg" /> 702 702 <View style={[a.flex_1, a.gap_xs]}> 703 - <Text style={[a.flex_1, a.text_2xl, a.font_heavy, t.atoms.text]}> 703 + <Text style={[a.flex_1, a.text_2xl, a.font_bold, t.atoms.text]}> 704 704 <Trans>My Feeds</Trans> 705 705 </Text> 706 706 <Text style={[t.atoms.text_contrast_high]}> ··· 726 726 size="lg" 727 727 /> 728 728 <View style={[a.flex_1, a.gap_sm]}> 729 - <Text style={[a.flex_1, a.text_2xl, a.font_heavy, t.atoms.text]}> 729 + <Text style={[a.flex_1, a.text_2xl, a.font_bold, t.atoms.text]}> 730 730 <Trans>Discover New Feeds</Trans> 731 731 </Text> 732 732 <Text style={[t.atoms.text_contrast_high]}>
+2 -2
src/view/screens/Storybook/Buttons.tsx
··· 16 16 export function Buttons() { 17 17 return ( 18 18 <View style={[a.gap_md]}> 19 - <Text style={[a.font_heavy, a.text_5xl]}>Buttons</Text> 19 + <Text style={[a.font_bold, a.text_5xl]}>Buttons</Text> 20 20 21 21 {[ 22 22 'primary', ··· 29 29 <Fragment key={color}> 30 30 {['tiny', 'small', 'large'].map(size => ( 31 31 <Fragment key={size}> 32 - <Text style={[a.font_heavy, a.text_2xl]}> 32 + <Text style={[a.font_bold, a.text_2xl]}> 33 33 color={color} size={size} 34 34 </Text> 35 35 <View style={[a.flex_row, a.align_start, a.gap_md]}>
+1 -1
src/view/screens/Storybook/Settings.tsx
··· 106 106 color={t.palette.primary_500} 107 107 /> 108 108 <SettingsList.ItemText 109 - style={[{color: t.palette.primary_500}, a.font_bold]}> 109 + style={[{color: t.palette.primary_500}, a.font_semi_bold]}> 110 110 Protect your account 111 111 </SettingsList.ItemText> 112 112 <SettingsList.Chevron color={t.palette.primary_500} />
+4 -4
src/view/screens/Storybook/Theming.tsx
··· 11 11 <View style={[t.atoms.bg, a.gap_lg, a.p_xl]}> 12 12 <Palette /> 13 13 14 - <Text style={[a.font_bold, a.pt_xl, a.px_md]}>theme.atoms.text</Text> 14 + <Text style={[a.font_semi_bold, a.pt_xl, a.px_md]}>theme.atoms.text</Text> 15 15 16 16 <View style={[a.flex_1, t.atoms.border_contrast_high, a.border_t]} /> 17 - <Text style={[a.font_bold, t.atoms.text_contrast_high, a.px_md]}> 17 + <Text style={[a.font_semi_bold, t.atoms.text_contrast_high, a.px_md]}> 18 18 theme.atoms.text_contrast_high 19 19 </Text> 20 20 21 21 <View style={[a.flex_1, t.atoms.border_contrast_medium, a.border_t]} /> 22 - <Text style={[a.font_bold, t.atoms.text_contrast_medium, a.px_md]}> 22 + <Text style={[a.font_semi_bold, t.atoms.text_contrast_medium, a.px_md]}> 23 23 theme.atoms.text_contrast_medium 24 24 </Text> 25 25 26 26 <View style={[a.flex_1, t.atoms.border_contrast_low, a.border_t]} /> 27 - <Text style={[a.font_bold, t.atoms.text_contrast_low, a.px_md]}> 27 + <Text style={[a.font_semi_bold, t.atoms.text_contrast_low, a.px_md]}> 28 28 theme.atoms.text_contrast_low 29 29 </Text> 30 30
+4 -4
src/view/screens/Storybook/Typography.tsx
··· 26 26 <Text style={[a.text_xl, a.font_medium, a.italic]}> 27 27 This is medium italic text 28 28 </Text> 29 - <Text style={[a.text_xl, a.font_bold]}>This is bold text</Text> 30 - <Text style={[a.text_xl, a.font_bold, a.italic]}> 29 + <Text style={[a.text_xl, a.font_semi_bold]}>This is bold text</Text> 30 + <Text style={[a.text_xl, a.font_semi_bold, a.italic]}> 31 31 This is bold italic text 32 32 </Text> 33 - <Text style={[a.text_xl, a.font_heavy]}>This is heavy text</Text> 34 - <Text style={[a.text_xl, a.font_heavy, a.italic]}> 33 + <Text style={[a.text_xl, a.font_bold]}>This is heavy text</Text> 34 + <Text style={[a.text_xl, a.font_bold, a.italic]}> 35 35 This is heavy italic text 36 36 </Text> 37 37
+5 -5
src/view/shell/Drawer.tsx
··· 90 90 <View style={[a.flex_row, a.align_center, a.gap_xs, a.flex_1]}> 91 91 <Text 92 92 emoji 93 - style={[a.font_heavy, a.text_xl, a.mt_2xs, a.leading_tight]} 93 + style={[a.font_bold, a.text_xl, a.mt_2xs, a.leading_tight]} 94 94 numberOfLines={1}> 95 95 {profile?.displayName || account.handle} 96 96 </Text> ··· 115 115 </View> 116 116 <Text style={[a.text_md, t.atoms.text_contrast_medium]}> 117 117 <Trans> 118 - <Text style={[a.text_md, a.font_bold]}> 118 + <Text style={[a.text_md, a.font_semi_bold]}> 119 119 {formatCount(i18n, profile?.followersCount ?? 0)} 120 120 </Text>{' '} 121 121 <Plural ··· 126 126 </Trans>{' '} 127 127 &middot;{' '} 128 128 <Trans> 129 - <Text style={[a.text_md, a.font_bold]}> 129 + <Text style={[a.text_md, a.font_semi_bold]}> 130 130 {formatCount(i18n, profile?.followsCount ?? 0)} 131 131 </Text>{' '} 132 132 <Plural ··· 656 656 style={[ 657 657 a.text_xs, 658 658 a.leading_tight, 659 - a.font_bold, 659 + a.font_semi_bold, 660 660 { 661 661 fontVariant: ['tabular-nums'], 662 662 color: colors.white, ··· 673 673 style={[ 674 674 a.flex_1, 675 675 a.text_2xl, 676 - bold && a.font_heavy, 676 + bold && a.font_bold, 677 677 web(a.leading_snug), 678 678 ]} 679 679 numberOfLines={1}>
+1 -1
src/view/shell/NavSignupCard.tsx
··· 36 36 37 37 <View style={[a.pt_lg]}> 38 38 <Text 39 - style={[a.text_3xl, a.font_heavy, {lineHeight: a.text_3xl.fontSize}]}> 39 + style={[a.text_3xl, a.font_bold, {lineHeight: a.text_3xl.fontSize}]}> 40 40 <Trans>Join the conversation</Trans> 41 41 </Text> 42 42 </View>
+1 -1
src/view/shell/desktop/Feeds.tsx
··· 90 90 a.text_md, 91 91 a.leading_snug, 92 92 current 93 - ? [a.font_bold, t.atoms.text] 93 + ? [a.font_semi_bold, t.atoms.text] 94 94 : [t.atoms.text_contrast_medium], 95 95 web({ 96 96 marginHorizontal: 2,
+3 -3
src/view/shell/desktop/LeftNav.tsx
··· 161 161 }, 162 162 ]}> 163 163 <Text 164 - style={[a.font_heavy, a.text_sm, a.leading_snug]} 164 + style={[a.font_bold, a.text_sm, a.leading_snug]} 165 165 numberOfLines={1}> 166 166 {sanitizeDisplayName( 167 167 profile.displayName || profile.handle, ··· 464 464 style={[ 465 465 a.absolute, 466 466 a.text_xs, 467 - a.font_bold, 467 + a.font_semi_bold, 468 468 a.rounded_full, 469 469 a.text_center, 470 470 a.leading_tight, ··· 511 511 ) : null} 512 512 </View> 513 513 {!leftNavMinimal && ( 514 - <Text style={[a.text_xl, isCurrent ? a.font_heavy : a.font_normal]}> 514 + <Text style={[a.text_xl, isCurrent ? a.font_bold : a.font_normal]}> 515 515 {label} 516 516 </Text> 517 517 )}
+1 -1
src/view/shell/desktop/SidebarTrendingTopics.tsx
··· 53 53 style={[ 54 54 a.flex_1, 55 55 a.text_sm, 56 - a.font_bold, 56 + a.font_semi_bold, 57 57 t.atoms.text_contrast_medium, 58 58 ]}> 59 59 <Trans>Trending</Trans>
+7
yarn.lock
··· 3635 3635 resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz#923ca57e173c6b232bbbb07347b1be982f03e783" 3636 3636 integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A== 3637 3637 3638 + "@bsky.app/alf@^0.1.2": 3639 + version "0.1.2" 3640 + resolved "https://registry.yarnpkg.com/@bsky.app/alf/-/alf-0.1.2.tgz#8e3b3cd0b27f1dfe359d99edd2afd7d123b7ab69" 3641 + integrity sha512-lIidmkoHsqXwj07BY4fYIu/JyWGXRAGLfh65qhGzWpXLTK1DGyoQUjz5CwsqTDSQWpCfBC7eEaOtYjjv9cAjSQ== 3642 + dependencies: 3643 + react-responsive "^10.0.1" 3644 + 3638 3645 "@bufbuild/protobuf@^1.5.0": 3639 3646 version "1.7.0" 3640 3647 resolved "https://registry.yarnpkg.com/@bufbuild/protobuf/-/protobuf-1.7.0.tgz#cecddc8162a231642b410bc7b99309cd5969733c"