Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die README; an keiner Stelle Bedeutung, nur Zeichensetzung.
72 lines
2.4 KiB
TypeScript
72 lines
2.4 KiB
TypeScript
const STAMP_COLOR: Record<number, string> = {
|
|
0: 'var(--color-stamp-0)',
|
|
1: 'var(--color-stamp-1)',
|
|
2: 'var(--color-stamp-2)',
|
|
3: 'var(--color-stamp-3)',
|
|
4: 'var(--color-stamp-4)',
|
|
5: 'var(--color-stamp-5)',
|
|
}
|
|
|
|
export function stampColor(level: number): string {
|
|
return STAMP_COLOR[level] ?? STAMP_COLOR[0]!
|
|
}
|
|
|
|
/**
|
|
* Die Farbmarken, die aus der Datenbank kommen duerfen.
|
|
*
|
|
* `ClearanceLevelConfig.colorToken` und `PersonnelStatusTag.colorToken` sind
|
|
* Daten und im Adminbereich pflegbar. Sie landen als Name einer CSS-Variablen
|
|
* in einem `style`-Attribut, und was aus der Datenbank in ein Stilattribut
|
|
* geht, wird geprueft - nicht weil es heute jemand setzen koennte, sondern
|
|
* weil es morgen jemand koennen soll. Ein unbekannter Wert faellt auf die
|
|
* neutrale Marke zurueck, statt eine Variable zu erfinden, die es nicht gibt.
|
|
*/
|
|
export const COLOR_TOKENS = [
|
|
'stamp-0',
|
|
'stamp-1',
|
|
'stamp-2',
|
|
'stamp-3',
|
|
'stamp-4',
|
|
'stamp-5',
|
|
] as const
|
|
|
|
export type ColorToken = (typeof COLOR_TOKENS)[number]
|
|
|
|
export function colorVariable(token: string | null | undefined): string {
|
|
const erlaubt = (COLOR_TOKENS as readonly string[]).includes(token ?? '')
|
|
return `var(--color-${erlaubt ? token : 'stamp-0'})`
|
|
}
|
|
|
|
/**
|
|
* Stempelmarke oben rechts am Objekt. Der Stempelcharakter kommt aus dem
|
|
* schmalen Schnitt, der Rahmenlinie und der Farbe, nicht aus Grossbuchstaben.
|
|
* Die Stufe steht zusaetzlich als Text, nicht nur als Farbe.
|
|
*
|
|
* **Feste Breite.** Die Namen der Stufen sind unterschiedlich lang und im
|
|
* Adminbereich aenderbar; unterschiedlich breite Marken untereinander lesen
|
|
* sich als Unordnung, nicht als Unterschied. Ein zu langer Name wird gekuerzt,
|
|
* die Stufenziffer davor bleibt immer stehen - sie ist die eigentliche
|
|
* Auskunft.
|
|
*
|
|
* `name` kommt aus ClearanceLevelConfig und ist im Adminbereich aenderbar,
|
|
* deshalb wird er hereingereicht statt aus lib/i18n/de.ts gelesen.
|
|
*/
|
|
export function StampMark({ level, name }: { level: number; name: string }) {
|
|
return (
|
|
<span
|
|
className="stamp-mark"
|
|
style={{ borderColor: stampColor(level), color: stampColor(level) }}
|
|
>
|
|
<span aria-hidden className="font-mono">
|
|
{level}
|
|
</span>
|
|
<span className="stamp-name">{name}</span>
|
|
</span>
|
|
)
|
|
}
|
|
|
|
/** Die 3 px breite Klassifizierungskante links am Objekt. */
|
|
export function classificationEdgeStyle(level: number): React.CSSProperties {
|
|
return { borderLeft: `var(--spacing-edge) solid ${stampColor(level)}` }
|
|
}
|