feat: Kapitänsmütze statt Text in Skipper-Signatur-Badge
Eigenes CaptainCap-Icon im Lucide-Stil; Tooltip und aria-label bleiben für Barrierefreiheit. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -947,6 +947,7 @@ html.scheme-dark .themed-select-option.is-selected {
|
|||||||
color: #86efac;
|
color: #86efac;
|
||||||
background: rgba(34, 197, 94, 0.12);
|
background: rgba(34, 197, 94, 0.12);
|
||||||
border: 1px solid rgba(34, 197, 94, 0.25);
|
border: 1px solid rgba(34, 197, 94, 0.25);
|
||||||
|
padding: 3px 7px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.entry-sign-badge--skipper.invalid {
|
.entry-sign-badge--skipper.invalid {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { useTranslation } from 'react-i18next'
|
import { useTranslation } from 'react-i18next'
|
||||||
import { AlertTriangle, Fingerprint } from 'lucide-react'
|
import { AlertTriangle } from 'lucide-react'
|
||||||
|
import CaptainCap from './icons/CaptainCap.tsx'
|
||||||
import type { SkipperSignStatus } from '../utils/signatures.js'
|
import type { SkipperSignStatus } from '../utils/signatures.js'
|
||||||
|
|
||||||
interface EntrySkipperSignBadgeProps {
|
interface EntrySkipperSignBadgeProps {
|
||||||
@@ -12,18 +13,18 @@ export default function EntrySkipperSignBadge({ status }: EntrySkipperSignBadgeP
|
|||||||
if (status === 'none') return null
|
if (status === 'none') return null
|
||||||
|
|
||||||
const isValid = status === 'valid'
|
const isValid = status === 'valid'
|
||||||
|
const label = isValid
|
||||||
|
? t('logs.sign_badge_skipper_title_valid')
|
||||||
|
: t('logs.sign_badge_skipper_title_invalid')
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<span
|
<span
|
||||||
className={`entry-sign-badge entry-sign-badge--skipper ${isValid ? 'valid' : 'invalid'}`}
|
className={`entry-sign-badge entry-sign-badge--skipper ${isValid ? 'valid' : 'invalid'}`}
|
||||||
title={
|
title={label}
|
||||||
isValid
|
aria-label={label}
|
||||||
? t('logs.sign_badge_skipper_title_valid')
|
|
||||||
: t('logs.sign_badge_skipper_title_invalid')
|
|
||||||
}
|
|
||||||
>
|
>
|
||||||
{isValid ? <Fingerprint size={12} /> : <AlertTriangle size={12} />}
|
{isValid ? <CaptainCap size={14} /> : <AlertTriangle size={12} />}
|
||||||
{isValid ? t('logs.sign_badge_skipper') : t('logs.sign_badge_skipper_invalid')}
|
{!isValid && t('logs.sign_badge_skipper_invalid')}
|
||||||
</span>
|
</span>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import type { SVGProps } from 'react'
|
||||||
|
|
||||||
|
interface CaptainCapProps extends SVGProps<SVGSVGElement> {
|
||||||
|
size?: number | string
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Skipper-/Kapitänsmütze im Lucide-Strichstil (nicht in lucide-react enthalten). */
|
||||||
|
export default function CaptainCap({ size = 24, ...props }: CaptainCapProps) {
|
||||||
|
return (
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width={size}
|
||||||
|
height={size}
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
fill="none"
|
||||||
|
stroke="currentColor"
|
||||||
|
strokeWidth={2}
|
||||||
|
strokeLinecap="round"
|
||||||
|
strokeLinejoin="round"
|
||||||
|
aria-hidden
|
||||||
|
{...props}
|
||||||
|
>
|
||||||
|
<path d="M5 11c0-3.5 3-6 7-6s7 2.5 7 6" />
|
||||||
|
<path d="M4 11h16" />
|
||||||
|
<path d="M4 11c0 2.5 3.2 4.5 8 4.5S20 13.5 20 11" />
|
||||||
|
<path d="M8 11h8" />
|
||||||
|
</svg>
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -141,7 +141,6 @@
|
|||||||
"sign_passkey_failed": "Passkey-Freigabe fehlgeschlagen",
|
"sign_passkey_failed": "Passkey-Freigabe fehlgeschlagen",
|
||||||
"sign_passkey_cancelled": "Passkey-Freigabe abgebrochen",
|
"sign_passkey_cancelled": "Passkey-Freigabe abgebrochen",
|
||||||
"sign_invalid": "Signatur ungültig — Inhalt wurde geändert",
|
"sign_invalid": "Signatur ungültig — Inhalt wurde geändert",
|
||||||
"sign_badge_skipper": "Skipper",
|
|
||||||
"sign_badge_skipper_invalid": "Ungültig",
|
"sign_badge_skipper_invalid": "Ungültig",
|
||||||
"sign_badge_skipper_title_valid": "Skipper hat freigegeben",
|
"sign_badge_skipper_title_valid": "Skipper hat freigegeben",
|
||||||
"sign_badge_skipper_title_invalid": "Skipper-Signatur ungültig — Inhalt wurde geändert",
|
"sign_badge_skipper_title_invalid": "Skipper-Signatur ungültig — Inhalt wurde geändert",
|
||||||
|
|||||||
@@ -141,7 +141,6 @@
|
|||||||
"sign_passkey_failed": "Passkey signing failed",
|
"sign_passkey_failed": "Passkey signing failed",
|
||||||
"sign_passkey_cancelled": "Passkey signing cancelled",
|
"sign_passkey_cancelled": "Passkey signing cancelled",
|
||||||
"sign_invalid": "Signature invalid — entry content changed",
|
"sign_invalid": "Signature invalid — entry content changed",
|
||||||
"sign_badge_skipper": "Skipper",
|
|
||||||
"sign_badge_skipper_invalid": "Invalid",
|
"sign_badge_skipper_invalid": "Invalid",
|
||||||
"sign_badge_skipper_title_valid": "Signed by skipper",
|
"sign_badge_skipper_title_valid": "Signed by skipper",
|
||||||
"sign_badge_skipper_title_invalid": "Skipper signature invalid — entry content changed",
|
"sign_badge_skipper_title_invalid": "Skipper signature invalid — entry content changed",
|
||||||
|
|||||||
Reference in New Issue
Block a user