- Replace all Jumble branding with Smesh throughout codebase - Add new Smesh logo images (light/dark themes) - Update Logo component to use PNG images with theme support - Update URLs to git.mleku.dev/mleku/smesh - Rename JumbleTranslate to SmeshTranslate - Update all i18n locale files with new branding - Add system theme detection CSS to prevent flash on load - Update PWA manifest, docker-compose, and config files 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
85 lines
2.2 KiB
TypeScript
85 lines
2.2 KiB
TypeScript
import { Label } from '@/components/ui/label'
|
|
import { Slider } from '@/components/ui/slider'
|
|
import { Switch } from '@/components/ui/switch'
|
|
import { StorageKey } from '@/constants'
|
|
import { Dispatch, SetStateAction, useEffect } from 'react'
|
|
import { useTranslation } from 'react-i18next'
|
|
|
|
export default function PostOptions({
|
|
posting,
|
|
show,
|
|
addClientTag,
|
|
setAddClientTag,
|
|
isNsfw,
|
|
setIsNsfw,
|
|
minPow,
|
|
setMinPow
|
|
}: {
|
|
posting: boolean
|
|
show: boolean
|
|
addClientTag: boolean
|
|
setAddClientTag: Dispatch<SetStateAction<boolean>>
|
|
isNsfw: boolean
|
|
setIsNsfw: Dispatch<SetStateAction<boolean>>
|
|
minPow: number
|
|
setMinPow: Dispatch<SetStateAction<number>>
|
|
}) {
|
|
const { t } = useTranslation()
|
|
|
|
useEffect(() => {
|
|
setAddClientTag(window.localStorage.getItem(StorageKey.ADD_CLIENT_TAG) === 'true')
|
|
}, [])
|
|
|
|
if (!show) return null
|
|
|
|
const onAddClientTagChange = (checked: boolean) => {
|
|
setAddClientTag(checked)
|
|
window.localStorage.setItem(StorageKey.ADD_CLIENT_TAG, checked.toString())
|
|
}
|
|
|
|
const onNsfwChange = (checked: boolean) => {
|
|
setIsNsfw(checked)
|
|
}
|
|
|
|
return (
|
|
<div className="space-y-4">
|
|
<div className="space-y-2">
|
|
<div className="flex items-center space-x-2">
|
|
<Label htmlFor="add-client-tag">{t('Add client tag')}</Label>
|
|
<Switch
|
|
id="add-client-tag"
|
|
checked={addClientTag}
|
|
onCheckedChange={onAddClientTagChange}
|
|
disabled={posting}
|
|
/>
|
|
</div>
|
|
<div className="text-muted-foreground text-xs">
|
|
{t('Show others this was sent via Smesh')}
|
|
</div>
|
|
</div>
|
|
|
|
<div className="flex items-center space-x-2">
|
|
<Label htmlFor="add-nsfw-tag">{t('NSFW')}</Label>
|
|
<Switch
|
|
id="add-nsfw-tag"
|
|
checked={isNsfw}
|
|
onCheckedChange={onNsfwChange}
|
|
disabled={posting}
|
|
/>
|
|
</div>
|
|
|
|
<div className="grid gap-4 pb-4">
|
|
<Label>{t('Proof of Work (difficulty {{minPow}})', { minPow })}</Label>
|
|
<Slider
|
|
defaultValue={[0]}
|
|
value={[minPow]}
|
|
onValueChange={([pow]) => setMinPow(pow)}
|
|
max={28}
|
|
step={1}
|
|
disabled={posting}
|
|
/>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|