Bluesky app fork with some witchin' additions 馃挮 witchsky.app
bluesky fork client
119
fork

Configure Feed

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

at a876aae44ea07494ebea9727350aa060b81f317b 390 lines 10 kB view raw
1import {Platform} from 'react-native' 2 3import {tokens} from '#/alf' 4import {type Palette} from '#/alf/themes' 5import {fontWeight} from '#/alf/tokens' 6import {colors} from './styles' 7import {type Theme} from './ThemeContext' 8 9export const defaultTheme = ({ 10 lightPalette, 11 darkPalette, 12}: { 13 lightPalette: Palette 14 darkPalette: Palette 15}): Theme => ({ 16 colorScheme: 'light', 17 palette: { 18 default: { 19 background: lightPalette.white, 20 backgroundLight: lightPalette.contrast_25, 21 text: lightPalette.black, 22 textLight: lightPalette.contrast_700, 23 textInverted: lightPalette.white, 24 link: lightPalette.primary_500, 25 border: lightPalette.contrast_100, 26 borderDark: lightPalette.contrast_200, 27 icon: lightPalette.contrast_500, 28 29 // non-standard 30 textVeryLight: lightPalette.contrast_400, 31 replyLine: lightPalette.contrast_100, 32 replyLineDot: lightPalette.contrast_200, 33 unreadNotifBg: lightPalette.primary_25, 34 unreadNotifBorder: lightPalette.primary_100, 35 postCtrl: lightPalette.contrast_500, 36 brandText: lightPalette.primary_500, 37 emptyStateIcon: lightPalette.contrast_300, 38 borderLinkHover: lightPalette.contrast_300, 39 }, 40 primary: { 41 background: colors.blue3, 42 backgroundLight: colors.blue2, 43 text: colors.white, 44 textLight: colors.blue0, 45 textInverted: colors.blue3, 46 link: colors.blue0, 47 border: colors.blue4, 48 borderDark: colors.blue5, 49 icon: colors.blue4, 50 }, 51 secondary: { 52 background: colors.green3, 53 backgroundLight: colors.green2, 54 text: colors.white, 55 textLight: colors.green1, 56 textInverted: colors.green4, 57 link: colors.green1, 58 border: colors.green4, 59 borderDark: colors.green5, 60 icon: colors.green4, 61 }, 62 inverted: { 63 background: darkPalette.black, 64 backgroundLight: darkPalette.contrast_50, 65 text: darkPalette.white, 66 textLight: darkPalette.contrast_700, 67 textInverted: darkPalette.black, 68 link: darkPalette.primary_500, 69 border: darkPalette.contrast_100, 70 borderDark: darkPalette.contrast_200, 71 icon: darkPalette.contrast_500, 72 }, 73 error: { 74 background: colors.red3, 75 backgroundLight: colors.red2, 76 text: colors.white, 77 textLight: colors.red1, 78 textInverted: colors.red3, 79 link: colors.red1, 80 border: colors.red4, 81 borderDark: colors.red5, 82 icon: colors.red4, 83 }, 84 }, 85 shapes: { 86 button: { 87 // TODO 88 }, 89 bigButton: { 90 // TODO 91 }, 92 smallButton: { 93 // TODO 94 }, 95 }, 96 typography: { 97 '2xl-thin': { 98 fontSize: 18, 99 letterSpacing: tokens.TRACKING, 100 fontWeight: fontWeight.normal, 101 }, 102 '2xl': { 103 fontSize: 18, 104 letterSpacing: tokens.TRACKING, 105 fontWeight: fontWeight.normal, 106 }, 107 '2xl-medium': { 108 fontSize: 18, 109 letterSpacing: tokens.TRACKING, 110 fontWeight: fontWeight.semiBold, 111 }, 112 '2xl-bold': { 113 fontSize: 18, 114 letterSpacing: tokens.TRACKING, 115 fontWeight: fontWeight.semiBold, 116 }, 117 '2xl-heavy': { 118 fontSize: 18, 119 letterSpacing: tokens.TRACKING, 120 fontWeight: fontWeight.bold, 121 }, 122 'xl-thin': { 123 fontSize: 17, 124 letterSpacing: tokens.TRACKING, 125 fontWeight: fontWeight.normal, 126 }, 127 xl: { 128 fontSize: 17, 129 letterSpacing: tokens.TRACKING, 130 fontWeight: fontWeight.normal, 131 }, 132 'xl-medium': { 133 fontSize: 17, 134 letterSpacing: tokens.TRACKING, 135 fontWeight: fontWeight.semiBold, 136 }, 137 'xl-bold': { 138 fontSize: 17, 139 letterSpacing: tokens.TRACKING, 140 fontWeight: fontWeight.semiBold, 141 }, 142 'xl-heavy': { 143 fontSize: 17, 144 letterSpacing: tokens.TRACKING, 145 fontWeight: fontWeight.bold, 146 }, 147 'lg-thin': { 148 fontSize: 16, 149 letterSpacing: tokens.TRACKING, 150 fontWeight: fontWeight.normal, 151 }, 152 lg: { 153 fontSize: 16, 154 letterSpacing: tokens.TRACKING, 155 fontWeight: fontWeight.normal, 156 }, 157 'lg-medium': { 158 fontSize: 16, 159 letterSpacing: tokens.TRACKING, 160 fontWeight: fontWeight.semiBold, 161 }, 162 'lg-bold': { 163 fontSize: 16, 164 letterSpacing: tokens.TRACKING, 165 fontWeight: fontWeight.semiBold, 166 }, 167 'lg-heavy': { 168 fontSize: 16, 169 letterSpacing: tokens.TRACKING, 170 fontWeight: fontWeight.bold, 171 }, 172 'md-thin': { 173 fontSize: 15, 174 letterSpacing: tokens.TRACKING, 175 fontWeight: fontWeight.normal, 176 }, 177 md: { 178 fontSize: 15, 179 letterSpacing: tokens.TRACKING, 180 fontWeight: fontWeight.normal, 181 }, 182 'md-medium': { 183 fontSize: 15, 184 letterSpacing: tokens.TRACKING, 185 fontWeight: fontWeight.semiBold, 186 }, 187 'md-bold': { 188 fontSize: 15, 189 letterSpacing: tokens.TRACKING, 190 fontWeight: fontWeight.semiBold, 191 }, 192 'md-heavy': { 193 fontSize: 15, 194 letterSpacing: tokens.TRACKING, 195 fontWeight: fontWeight.bold, 196 }, 197 'sm-thin': { 198 fontSize: 14, 199 letterSpacing: tokens.TRACKING, 200 fontWeight: fontWeight.normal, 201 }, 202 sm: { 203 fontSize: 14, 204 letterSpacing: tokens.TRACKING, 205 fontWeight: fontWeight.normal, 206 }, 207 'sm-medium': { 208 fontSize: 14, 209 letterSpacing: tokens.TRACKING, 210 fontWeight: fontWeight.semiBold, 211 }, 212 'sm-bold': { 213 fontSize: 14, 214 letterSpacing: tokens.TRACKING, 215 fontWeight: fontWeight.semiBold, 216 }, 217 'sm-heavy': { 218 fontSize: 14, 219 letterSpacing: tokens.TRACKING, 220 fontWeight: fontWeight.bold, 221 }, 222 'xs-thin': { 223 fontSize: 13, 224 letterSpacing: tokens.TRACKING, 225 fontWeight: fontWeight.normal, 226 }, 227 xs: { 228 fontSize: 13, 229 letterSpacing: tokens.TRACKING, 230 fontWeight: fontWeight.normal, 231 }, 232 'xs-medium': { 233 fontSize: 13, 234 letterSpacing: tokens.TRACKING, 235 fontWeight: fontWeight.semiBold, 236 }, 237 'xs-bold': { 238 fontSize: 13, 239 letterSpacing: tokens.TRACKING, 240 fontWeight: fontWeight.semiBold, 241 }, 242 'xs-heavy': { 243 fontSize: 13, 244 letterSpacing: tokens.TRACKING, 245 fontWeight: fontWeight.bold, 246 }, 247 248 'title-2xl': { 249 fontSize: 34, 250 letterSpacing: tokens.TRACKING, 251 fontWeight: fontWeight.semiBold, 252 }, 253 'title-xl': { 254 fontSize: 28, 255 letterSpacing: tokens.TRACKING, 256 fontWeight: fontWeight.semiBold, 257 }, 258 'title-lg': { 259 fontSize: 22, 260 fontWeight: fontWeight.semiBold, 261 }, 262 title: { 263 fontWeight: fontWeight.semiBold, 264 fontSize: 20, 265 letterSpacing: tokens.TRACKING, 266 }, 267 'title-sm': { 268 fontWeight: fontWeight.semiBold, 269 fontSize: 17, 270 letterSpacing: tokens.TRACKING, 271 }, 272 'post-text': { 273 fontSize: 16, 274 letterSpacing: tokens.TRACKING, 275 fontWeight: fontWeight.normal, 276 }, 277 'post-text-lg': { 278 fontSize: 20, 279 letterSpacing: tokens.TRACKING, 280 fontWeight: fontWeight.normal, 281 }, 282 'button-lg': { 283 fontWeight: fontWeight.semiBold, 284 fontSize: 18, 285 letterSpacing: tokens.TRACKING, 286 }, 287 button: { 288 fontWeight: fontWeight.semiBold, 289 fontSize: 14, 290 letterSpacing: tokens.TRACKING, 291 }, 292 mono: { 293 fontSize: 14, 294 fontFamily: Platform.OS === 'android' ? 'monospace' : 'Courier New', 295 }, 296 }, 297}) 298 299export const darkTheme = ({ 300 lightPalette, 301 darkPalette, 302}: { 303 lightPalette: Palette 304 darkPalette: Palette 305}): Theme => ({ 306 ...defaultTheme({lightPalette, darkPalette}), 307 colorScheme: 'dark', 308 palette: { 309 ...defaultTheme({lightPalette, darkPalette}).palette, 310 default: { 311 background: darkPalette.contrast_0, 312 backgroundLight: darkPalette.contrast_25, 313 text: darkPalette.white, 314 textLight: darkPalette.contrast_600, 315 textInverted: darkPalette.black, 316 link: darkPalette.primary_500, 317 border: darkPalette.contrast_100, 318 borderDark: darkPalette.contrast_200, 319 icon: darkPalette.contrast_500, 320 321 // non-standard 322 textVeryLight: darkPalette.contrast_400, 323 replyLine: darkPalette.contrast_200, 324 replyLineDot: darkPalette.contrast_200, 325 unreadNotifBg: darkPalette.primary_25, 326 unreadNotifBorder: darkPalette.primary_100, 327 postCtrl: darkPalette.contrast_500, 328 brandText: darkPalette.primary_500, 329 emptyStateIcon: darkPalette.contrast_300, 330 borderLinkHover: darkPalette.contrast_300, 331 }, 332 primary: { 333 ...defaultTheme({lightPalette, darkPalette}).palette.primary, 334 textInverted: colors.blue2, 335 }, 336 secondary: { 337 ...defaultTheme({lightPalette, darkPalette}).palette.secondary, 338 textInverted: colors.green2, 339 }, 340 inverted: { 341 background: darkPalette.white, 342 backgroundLight: lightPalette.contrast_50, 343 text: lightPalette.black, 344 textLight: lightPalette.contrast_700, 345 textInverted: darkPalette.white, 346 link: lightPalette.primary_500, 347 border: lightPalette.contrast_100, 348 borderDark: lightPalette.contrast_200, 349 icon: lightPalette.contrast_500, 350 }, 351 }, 352}) 353 354export const dimTheme = ({ 355 lightPalette, 356 darkPalette, 357 dimPalette, 358}: { 359 lightPalette: Palette 360 darkPalette: Palette 361 dimPalette: Palette 362}): Theme => ({ 363 ...darkTheme({lightPalette, darkPalette}), 364 palette: { 365 ...darkTheme({lightPalette, darkPalette}).palette, 366 default: { 367 ...darkTheme({lightPalette, darkPalette}).palette.default, 368 background: dimPalette.contrast_0, 369 backgroundLight: dimPalette.contrast_25, 370 text: dimPalette.white, 371 textLight: dimPalette.contrast_700, 372 textInverted: dimPalette.black, 373 link: dimPalette.primary_500, 374 border: dimPalette.contrast_100, 375 borderDark: dimPalette.contrast_200, 376 icon: dimPalette.contrast_500, 377 378 // non-standard 379 textVeryLight: dimPalette.contrast_400, 380 replyLine: dimPalette.contrast_200, 381 replyLineDot: dimPalette.contrast_200, 382 unreadNotifBg: dimPalette.primary_25, 383 unreadNotifBorder: dimPalette.primary_100, 384 postCtrl: dimPalette.contrast_500, 385 brandText: dimPalette.primary_500, 386 emptyStateIcon: dimPalette.contrast_300, 387 borderLinkHover: dimPalette.contrast_300, 388 }, 389 }, 390})