diff --git a/package.json b/package.json index 3b029360..f0646a22 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "pubsq", + "name": "bsky.app", "version": "0.0.1", "private": true, "scripts": { diff --git a/src/view/com/profile/ProfileHeader.tsx b/src/view/com/profile/ProfileHeader.tsx index e2ed4390..dfd8d3c2 100644 --- a/src/view/com/profile/ProfileHeader.tsx +++ b/src/view/com/profile/ProfileHeader.tsx @@ -14,7 +14,8 @@ import {ProfileViewModel} from '../../../state/models/profile-view' import {useStores} from '../../../state' import {EditProfileModel} from '../../../state/models/shell' import {pluralize} from '../../lib/strings' -import {s, gradients, colors} from '../../lib/styles' +import {s, colors} from '../../lib/styles' +import {getGradient} from '../../lib/asset-gen' import Toast from '../util/Toast' import {UserAvatar} from '../util/UserAvatar' import {UserBanner} from '../util/UserBanner' @@ -80,6 +81,7 @@ export const ProfileHeader = observer(function ProfileHeader({ // loaded // = + const gradient = getGradient(view.handle) const isMe = store.me.did === view.did return ( @@ -120,7 +122,7 @@ export const ProfileHeader = observer(function ProfileHeader({ ) : ( diff --git a/src/view/com/util/UserAvatar.tsx b/src/view/com/util/UserAvatar.tsx index 8699bcd3..2385316f 100644 --- a/src/view/com/util/UserAvatar.tsx +++ b/src/view/com/util/UserAvatar.tsx @@ -1,13 +1,6 @@ import React from 'react' import Svg, {Circle, Text, Defs, LinearGradient, Stop} from 'react-native-svg' -import {colors} from '../../lib/styles' - -const GRADIENTS = [ - [colors.pink3, colors.purple3], - [colors.purple3, colors.blue3], - [colors.blue3, colors.green3], - [colors.red3, colors.pink3], -] +import {getGradient} from '../../lib/asset-gen' export function UserAvatar({ size, @@ -42,11 +35,6 @@ export function UserAvatar({ ) } -export function getGradient(handle: string): string[] { - const gi = cyrb53(handle) % GRADIENTS.length - return GRADIENTS[gi] -} - function getInitials(str: string): string { const tokens = str .split(' ') @@ -60,24 +48,3 @@ function getInitials(str: string): string { } return 'X' } - -// deterministic string->hash -// https://stackoverflow.com/a/52171480 -function cyrb53(str: string, seed = 0): number { - let h1 = 0xdeadbeef ^ seed, - h2 = 0x41c6ce57 ^ seed - for (let i = 0, ch; i < str.length; i++) { - ch = str.charCodeAt(i) - h1 = Math.imul(h1 ^ ch, 2654435761) - h2 = Math.imul(h2 ^ ch, 1597334677) - } - - h1 = - Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ - Math.imul(h2 ^ (h2 >>> 13), 3266489909) - h2 = - Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ - Math.imul(h1 ^ (h1 >>> 13), 3266489909) - - return 4294967296 * (2097151 & h2) + (h1 >>> 0) -} diff --git a/src/view/com/util/UserBanner.tsx b/src/view/com/util/UserBanner.tsx index d3be5d2c..6c886897 100644 --- a/src/view/com/util/UserBanner.tsx +++ b/src/view/com/util/UserBanner.tsx @@ -1,6 +1,6 @@ import React from 'react' import Svg, {Rect, Defs, LinearGradient, Stop} from 'react-native-svg' -import {getGradient} from './UserAvatar' +import {getGradient} from '../../lib/asset-gen' export function UserBanner({handle}: {handle: string}) { const gradient = getGradient(handle) @@ -12,8 +12,8 @@ export function UserBanner({handle}: {handle: string}) { - - + + diff --git a/src/view/lib/asset-gen.ts b/src/view/lib/asset-gen.ts new file mode 100644 index 00000000..6dbce251 --- /dev/null +++ b/src/view/lib/asset-gen.ts @@ -0,0 +1,34 @@ +import {colors} from './styles' + +const GRADIENTS = [ + [colors.pink3, colors.purple3], + [colors.purple3, colors.blue3], + [colors.blue3, colors.green3], + [colors.red3, colors.pink3], +] + +export function getGradient(handle: string): string[] { + const gi = cyrb53(handle) % GRADIENTS.length + return GRADIENTS[gi] +} + +// deterministic string->hash +// https://stackoverflow.com/a/52171480 +function cyrb53(str: string, seed = 0): number { + let h1 = 0xdeadbeef ^ seed, + h2 = 0x41c6ce57 ^ seed + for (let i = 0, ch; i < str.length; i++) { + ch = str.charCodeAt(i) + h1 = Math.imul(h1 ^ ch, 2654435761) + h2 = Math.imul(h2 ^ ch, 1597334677) + } + + h1 = + Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ + Math.imul(h2 ^ (h2 >>> 13), 3266489909) + h2 = + Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ + Math.imul(h1 ^ (h1 >>> 13), 3266489909) + + return 4294967296 * (2097151 & h2) + (h1 >>> 0) +}