From 589e0b9b6a5e5a6a3a3fabbdaefd6e031afb372c Mon Sep 17 00:00:00 2001 From: rouggy Date: Sat, 1 Aug 2026 01:22:35 +0200 Subject: [PATCH] style(details): size the Info tab fields to their contents MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Six equal columns gave a US county name the same width as a two-digit CQ zone: the county truncated while the zones, the prefix and the DXCC number sat mostly empty. The row is twelve columns now, spans set per field. The bearing and the two distances are read-only and never exceed "12345 km", so they move to a flex row at a fixed width and the address — the one field here that was never wide enough — takes the remainder. --- changelog.json | 6 +- frontend/src/components/DetailsPanel.tsx | 95 ++++++++++++++---------- internal/award/catalog/dld.json | 7 +- 3 files changed, 65 insertions(+), 43 deletions(-) diff --git a/changelog.json b/changelog.json index 7585532..53c5b05 100644 --- a/changelog.json +++ b/changelog.json @@ -8,7 +8,8 @@ "A reference you assign by hand now replaces what the matcher found instead of being added to it, so a correction survives the next recompute.", "Awards: an award can be marked one reference per QSO. When several references then match the same contact it keeps none and lists them, so you pick — a contact does not silently get the wrong DOK. Off by default, so an n-fer POTA activation still counts every park.", "Dark themes: the calendar icon of date and date-time fields is visible again.", - "Live award detection now sees the QTH, name, country, comment, note and grid you typed, not just the looked-up address — an award matching on the town stayed silent until the QSO was logged." + "Live award detection now sees the QTH, name, country, comment, note and grid you typed, not just the looked-up address — an award matching on the town stayed silent until the QSO was logged.", + "Info (F2) panel: the fields are sized for what they hold — a wider county, narrower prefix and zones, and the address takes the space left by the bearing and distances." ], "fr": [ "Le CAT série ne met plus la radio en émission par le seul fait de se connecter : DTR et RTS sont abaissés sur Xiegu, Yaesu et Kenwood comme ils l'étaient déjà sur Icom — un Xiegu G90 derrière un DE-19 partait en émission et y restait.", @@ -16,7 +17,8 @@ "Une référence que vous affectez à la main remplace désormais ce que la détection avait trouvé au lieu de s'y ajouter : une correction survit au recalcul suivant.", "Diplômes : un diplôme peut être marqué une seule référence par QSO. Si plusieurs références correspondent alors au même contact, aucune n’est retenue et elles sont listées pour que vous choisissiez — un contact ne reçoit plus silencieusement le mauvais DOK. Désactivé par défaut, donc une activation POTA n-fer compte toujours tous les parcs.", "Thèmes sombres : l’icône calendrier des champs date et date-heure est de nouveau visible.", - "La détection des diplômes en direct voit maintenant le QTH, le nom, le pays, le commentaire, la note et le locator saisis, et plus seulement l’adresse issue de la recherche — un diplôme qui matche sur la ville restait muet jusqu’à l’enregistrement du QSO." + "La détection des diplômes en direct voit maintenant le QTH, le nom, le pays, le commentaire, la note et le locator saisis, et plus seulement l’adresse issue de la recherche — un diplôme qui matche sur la ville restait muet jusqu’à l’enregistrement du QSO.", + "Panneau Info (F2) : les champs sont dimensionnés selon leur contenu — comté plus large, préfixe et zones plus étroits, et l’adresse récupère la place laissée par l’azimut et les distances." ] }, { diff --git a/frontend/src/components/DetailsPanel.tsx b/frontend/src/components/DetailsPanel.tsx index 96603b2..3bc547e 100644 --- a/frontend/src/components/DetailsPanel.tsx +++ b/frontend/src/components/DetailsPanel.tsx @@ -122,9 +122,17 @@ function numOrUndef(v: string): number | undefined { } // Compact field helper to keep the JSX dense. -function Field({ label, span = 1, children }: { label: string; span?: 1 | 2 | 3 | 4 | 6; children: React.ReactNode }) { +// Written out rather than built as `col-span-${n}`: Tailwind scans for literal +// class names, so an interpolated one is never emitted. +const SPAN_CLASS: Record = { + 1: '', 2: 'col-span-2', 3: 'col-span-3', 4: 'col-span-4', 5: 'col-span-5', + 6: 'col-span-6', 7: 'col-span-7', 8: 'col-span-8', 9: 'col-span-9', + 10: 'col-span-10', 11: 'col-span-11', 12: 'col-span-12', +}; + +function Field({ label, span = 1, className, children }: { label: string; span?: number; className?: string; children: React.ReactNode }) { return ( -
+
{children}
@@ -243,14 +251,18 @@ export function DetailsPanel({ callsign, prefix, operatorGrid, remoteGrid, qth, )} {open === 'info' && ( -
- +
+ {/* Twelve columns, not six: the fields hold very different things. A US + county name is long, a CQ zone is two digits — on an even six-column + grid they were the same width, so the county truncated while the + zones sat mostly empty. */} + onChange({ state: e.target.value })} /> - + onChange({ cnty: e.target.value })} /> - + @@ -264,7 +276,7 @@ export function DetailsPanel({ callsign, prefix, operatorGrid, remoteGrid, qth, {/* DXCC # closes the top row (next to the zones); Continent and Azimuth SP live in the main entry strip / bandeau. The long-path bearing and distances move to the row below. */} - + - - - - - - - - - - - onChange({ address: e.target.value })} /> - - + {/* The bearing and the two distances are read-only and hold at most + "12345 km", so they take a fixed width and the address — the one + field here that is never wide enough — gets everything left over. */} +
+ + + + + + + + + + + onChange({ address: e.target.value })} /> + +
+ onChange({ qsl_msg: e.target.value })} /> - + onChange({ qsl_via: e.target.value })} />
diff --git a/internal/award/catalog/dld.json b/internal/award/catalog/dld.json index b4f5667..0582984 100644 --- a/internal/award/catalog/dld.json +++ b/internal/award/catalog/dld.json @@ -12,11 +12,14 @@ "type": "QSOFIELDS", "field": "address", "match_by": "description", + "exact_match": true, "pattern": "", + "one_ref_per_qso": true, "or_rules": [ { "field": "qth", - "match_by": "description" + "match_by": "description", + "exact_match": true } ], "dxcc_filter": [ @@ -34,7 +37,7 @@ ], "total": 0, "builtin": true, - "version": 1 + "version": 2 }, "references": [ {