aa6aad652e
* thread preferences screen * minor tweaks * more spacing * replace gate with IS_INTERNAL * [Settings] Following feed prefs revamp (#5773) * gated new settings screen * Following feed prefs * Update src/screens/Settings/FollowingFeedPreferences.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * Update src/screens/Settings/FollowingFeedPreferences.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * replace pref following feed gate * Update src/screens/Settings/FollowingFeedPreferences.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * use "Experimental" as the header --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * [Settings] External media prefs revamp (#5774) * gated new settings screen * external media prefs revamp * replace gate ext media embeds * Update src/screens/Settings/ExternalMediaPreferences.tsx Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * add imports for translation * alternate list style on native --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * [Settings] Languages revamp (partial) (#5775) * language settings (lazy restyle) * replace gate * fix text determining flex space * [Settings] App passwords revamp (#5777) * rework app passwords screen * Apply surfdude's copy changes Thanks @surfdude29! Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * format * replace gate * use admonition for input error and animate --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * [Settings] Change handle dialog (#5781) * new change handle dialog * animations native only * overflow hidden on togglebutton animation * add a low-contrast border * extract out copybutton * finish change handle dialog * invalidate query on success * web fixes * error message for rate limit exceeded * typo * em dash! Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * another em dash Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * set maxwidth of suffixtext * Copy tweak Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com> * [Settings] Notifs settings revamp (#5884) * rename, move, and restyle notif settings * bold "experimental:" --------- Co-authored-by: surfdude29 <149612116+surfdude29@users.noreply.github.com>
122 lines
2.7 KiB
TypeScript
122 lines
2.7 KiB
TypeScript
import React from 'react'
|
|
import {StyleProp, View, ViewStyle} from 'react-native'
|
|
|
|
import {atoms as a, useBreakpoints, useTheme} from '#/alf'
|
|
import {CircleInfo_Stroke2_Corner0_Rounded as ErrorIcon} from '#/components/icons/CircleInfo'
|
|
import {Eye_Stroke2_Corner0_Rounded as InfoIcon} from '#/components/icons/Eye'
|
|
import {Leaf_Stroke2_Corner0_Rounded as TipIcon} from '#/components/icons/Leaf'
|
|
import {Warning_Stroke2_Corner0_Rounded as WarningIcon} from '#/components/icons/Warning'
|
|
import {Text as BaseText, TextProps} from '#/components/Typography'
|
|
|
|
export const colors = {
|
|
warning: {
|
|
light: '#DFBC00',
|
|
dark: '#BFAF1F',
|
|
},
|
|
}
|
|
|
|
type Context = {
|
|
type: 'info' | 'tip' | 'warning' | 'error'
|
|
}
|
|
|
|
const Context = React.createContext<Context>({
|
|
type: 'info',
|
|
})
|
|
|
|
export function Icon() {
|
|
const t = useTheme()
|
|
const {type} = React.useContext(Context)
|
|
const Icon = {
|
|
info: InfoIcon,
|
|
tip: TipIcon,
|
|
warning: WarningIcon,
|
|
error: ErrorIcon,
|
|
}[type]
|
|
const fill = {
|
|
info: t.atoms.text_contrast_medium.color,
|
|
tip: t.palette.primary_500,
|
|
warning: colors.warning.light,
|
|
error: t.palette.negative_500,
|
|
}[type]
|
|
return <Icon fill={fill} size="md" />
|
|
}
|
|
|
|
export function Text({
|
|
children,
|
|
style,
|
|
...rest
|
|
}: Pick<TextProps, 'children' | 'style'>) {
|
|
return (
|
|
<BaseText
|
|
{...rest}
|
|
style={[
|
|
a.flex_1,
|
|
a.text_sm,
|
|
a.leading_snug,
|
|
{
|
|
paddingTop: 1,
|
|
},
|
|
style,
|
|
]}>
|
|
{children}
|
|
</BaseText>
|
|
)
|
|
}
|
|
|
|
export function Row({children}: {children: React.ReactNode}) {
|
|
return <View style={[a.flex_row, a.gap_sm]}>{children}</View>
|
|
}
|
|
|
|
export function Outer({
|
|
children,
|
|
type = 'info',
|
|
style,
|
|
}: {
|
|
children: React.ReactNode
|
|
type?: Context['type']
|
|
style?: StyleProp<ViewStyle>
|
|
}) {
|
|
const t = useTheme()
|
|
const {gtMobile} = useBreakpoints()
|
|
const borderColor = {
|
|
info: t.atoms.border_contrast_low.borderColor,
|
|
tip: t.atoms.border_contrast_low.borderColor,
|
|
warning: t.atoms.border_contrast_low.borderColor,
|
|
error: t.atoms.border_contrast_low.borderColor,
|
|
}[type]
|
|
return (
|
|
<Context.Provider value={{type}}>
|
|
<View
|
|
style={[
|
|
gtMobile ? a.p_md : a.p_sm,
|
|
a.rounded_sm,
|
|
a.border,
|
|
t.atoms.bg_contrast_25,
|
|
{borderColor},
|
|
style,
|
|
]}>
|
|
{children}
|
|
</View>
|
|
</Context.Provider>
|
|
)
|
|
}
|
|
|
|
export function Admonition({
|
|
children,
|
|
type,
|
|
style,
|
|
}: {
|
|
children: TextProps['children']
|
|
type?: Context['type']
|
|
style?: StyleProp<ViewStyle>
|
|
}) {
|
|
return (
|
|
<Outer type={type} style={style}>
|
|
<Row>
|
|
<Icon />
|
|
<Text>{children}</Text>
|
|
</Row>
|
|
</Outer>
|
|
)
|
|
}
|