fix(260928-ujj): Biome-Formatierung der mit Design Mosaik eingebrachten Dateien
- Nur Formatierung und Importreihenfolge, keine Verhaltensaenderung - Betrifft ausschliesslich Befunde, die der Merge neu eingebracht hat Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -113,11 +113,7 @@ export function DeleteGroupDialog({ group, onClose, onDeleted }: DeleteGroupDial
|
||||
)}
|
||||
|
||||
<div className="flex justify-end gap-3">
|
||||
<button
|
||||
type="button"
|
||||
onClick={onClose}
|
||||
className="btn btn-secondary"
|
||||
>
|
||||
<button type="button" onClick={onClose} className="btn btn-secondary">
|
||||
{tCommon('cancel')}
|
||||
</button>
|
||||
<button
|
||||
|
||||
@@ -249,11 +249,7 @@ export function GroupMembersModal({ group, onClose, onChanged }: GroupMembersMod
|
||||
)}
|
||||
|
||||
<div className="flex justify-between items-center gap-3">
|
||||
<button
|
||||
type="button"
|
||||
onClick={onClose}
|
||||
className="btn btn-secondary"
|
||||
>
|
||||
<button type="button" onClick={onClose} className="btn btn-secondary">
|
||||
{tCommon('close')}
|
||||
</button>
|
||||
<button
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { getTranslations } from 'next-intl/server';
|
||||
import { PageHeader } from '@/components/layout/page-header';
|
||||
import { ChangelogView } from '@/components/changelog/changelog-view';
|
||||
import { PageHeader } from '@/components/layout/page-header';
|
||||
import { appVersion } from '@/lib/app-version';
|
||||
import { changelogMarkdown, filterChangelogForChannel } from '@/lib/changelog';
|
||||
|
||||
|
||||
@@ -116,11 +116,7 @@ export default function ProxmoxSettingsPage() {
|
||||
<div className="flex items-center justify-between">
|
||||
<h1 className="text-2xl font-semibold tracking-tight">{t('settings.title')}</h1>
|
||||
{editingId === null && (
|
||||
<button
|
||||
type="button"
|
||||
onClick={() => setEditingId('new')}
|
||||
className="btn btn-primary"
|
||||
>
|
||||
<button type="button" onClick={() => setEditingId('new')} className="btn btn-primary">
|
||||
{t('settings.addServer')}
|
||||
</button>
|
||||
)}
|
||||
|
||||
@@ -112,11 +112,7 @@ export function BugReportDialog({ screenshot, isAdmin, onClose }: BugReportDialo
|
||||
<>
|
||||
<p className="text-sm text-foreground mb-4">{t('sent')}</p>
|
||||
<div className="flex justify-end">
|
||||
<button
|
||||
type="button"
|
||||
onClick={onClose}
|
||||
className="btn btn-primary"
|
||||
>
|
||||
<button type="button" onClick={onClose} className="btn btn-primary">
|
||||
{t('close')}
|
||||
</button>
|
||||
</div>
|
||||
@@ -179,12 +175,7 @@ export function BugReportDialog({ screenshot, isAdmin, onClose }: BugReportDialo
|
||||
)}
|
||||
|
||||
<div className="mt-4 flex justify-end gap-3">
|
||||
<button
|
||||
type="button"
|
||||
onClick={onClose}
|
||||
disabled={busy}
|
||||
className="btn btn-secondary"
|
||||
>
|
||||
<button type="button" onClick={onClose} disabled={busy} className="btn btn-secondary">
|
||||
{t('cancel')}
|
||||
</button>
|
||||
<button
|
||||
|
||||
@@ -13,7 +13,10 @@ export function greetingPeriod(date: Date): 'morning' | 'day' | 'evening' {
|
||||
}
|
||||
|
||||
/** Vorname aus dem Anzeigenamen (erstes Wort), sonst der Benutzername. */
|
||||
export function greetingName(displayName: string | null | undefined, username: string | undefined): string {
|
||||
export function greetingName(
|
||||
displayName: string | null | undefined,
|
||||
username: string | undefined,
|
||||
): string {
|
||||
const first = displayName?.trim().split(/\s+/)[0];
|
||||
return first || username || '';
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
'use client';
|
||||
|
||||
import { WidgetIcon } from './widget-icon';
|
||||
import Link from 'next/link';
|
||||
import { useLocale, useTranslations } from 'next-intl';
|
||||
import { type ChangeEvent, type ReactNode, useEffect, useMemo, useRef, useState } from 'react';
|
||||
@@ -30,6 +29,7 @@ import {
|
||||
selectServers,
|
||||
widgetKeyFigure,
|
||||
} from './proxmox-widget-model';
|
||||
import { WidgetIcon } from './widget-icon';
|
||||
|
||||
/** Minutentakt: so oft liest die Kachel das Zwischenlager neu. */
|
||||
const REFRESH_MS = 60_000;
|
||||
|
||||
@@ -20,7 +20,9 @@ const PATHS: Record<string, ReactNode> = {
|
||||
<path d="M14 2v4a2 2 0 0 0 2 2h4M10 13h6M10 17h6M8 13h.01M8 17h.01" />
|
||||
</>
|
||||
),
|
||||
favorites: <path d="m12 2 3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" />,
|
||||
favorites: (
|
||||
<path d="m12 2 3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" />
|
||||
),
|
||||
clock: (
|
||||
<>
|
||||
<circle cx="12" cy="12" r="10" />
|
||||
@@ -67,7 +69,13 @@ const PATHS: Record<string, ReactNode> = {
|
||||
),
|
||||
};
|
||||
|
||||
export function WidgetIcon({ type, variant = 'chip' }: { type: string; variant?: 'chip' | 'plain' }) {
|
||||
export function WidgetIcon({
|
||||
type,
|
||||
variant = 'chip',
|
||||
}: {
|
||||
type: string;
|
||||
variant?: 'chip' | 'plain';
|
||||
}) {
|
||||
const paths = PATHS[type];
|
||||
if (!paths) return null;
|
||||
const svg = (
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
import type { CSSProperties } from 'react';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import type { CSSProperties } from 'react';
|
||||
import { WIDGET_REGISTRY, type WidgetType } from '../widget-registry';
|
||||
import { WidgetIcon } from './widget-icon';
|
||||
|
||||
|
||||
@@ -16,7 +16,13 @@ interface PageHeaderProps {
|
||||
* 24/32 px halbfett, optionale Beschreibung 14 px gedaempft, Aktionen rechts.
|
||||
* Modulseiten tragen ihre App-Kachel (36 px) links vom Titel.
|
||||
*/
|
||||
export function PageHeader({ title, description, actions, moduleSlug, className = '' }: PageHeaderProps) {
|
||||
export function PageHeader({
|
||||
title,
|
||||
description,
|
||||
actions,
|
||||
moduleSlug,
|
||||
className = '',
|
||||
}: PageHeaderProps) {
|
||||
return (
|
||||
<div className={`flex flex-wrap items-start justify-between gap-x-6 gap-y-3 ${className}`}>
|
||||
<div className="flex min-w-0 items-center gap-3">
|
||||
|
||||
@@ -212,11 +212,7 @@ export function ReleaseNoticeDialog({ notice, onClose }: ReleaseNoticeDialogProp
|
||||
>
|
||||
{t('showAll')}
|
||||
</Link>
|
||||
<button
|
||||
type="button"
|
||||
onClick={close}
|
||||
className="btn btn-primary"
|
||||
>
|
||||
<button type="button" onClick={close} className="btn btn-primary">
|
||||
{t('confirm')}
|
||||
</button>
|
||||
</div>
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
import { describe, expect, it } from 'vitest';
|
||||
import { DARK_ON_ACCENT, LIGHT_ON_ACCENT, normalizeHexColor, readableOnAccent, relativeLuminance } from './color';
|
||||
import {
|
||||
DARK_ON_ACCENT,
|
||||
LIGHT_ON_ACCENT,
|
||||
normalizeHexColor,
|
||||
readableOnAccent,
|
||||
relativeLuminance,
|
||||
} from './color';
|
||||
|
||||
/**
|
||||
* color.test — Normalisierung der Hex-Eingabe der Akzentfarbe
|
||||
@@ -61,7 +67,15 @@ describe('readableOnAccent (Design „Mosaik“)', () => {
|
||||
});
|
||||
|
||||
it('haelt fuer eine Reihe von Akzenten mindestens 3:1 (Symbol auf der Kachel)', () => {
|
||||
for (const accent of ['#ffed00', '#123456', '#e11d48', '#0ea5e9', '#16a34a', '#777777', '#f97316']) {
|
||||
for (const accent of [
|
||||
'#ffed00',
|
||||
'#123456',
|
||||
'#e11d48',
|
||||
'#0ea5e9',
|
||||
'#16a34a',
|
||||
'#777777',
|
||||
'#f97316',
|
||||
]) {
|
||||
expect(contrast(accent, readableOnAccent(accent))).toBeGreaterThanOrEqual(3);
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user