Backend (Go 1.25 / Wails v2): - QSO storage on SQLite (modernc) with embedded migrations (0001..0005) - Streaming ADIF import (batch insert) + WorkedBefore per callsign and DXCC - Callsign lookup with QRZ.com + HamQTH providers (primary/failsafe routing) and SQLite-backed TTL cache - DXCC resolver from cty.dat (auto-download, longest-prefix-match) - Multi-profile operator identities (home/portable/SOTA/contest) — every QSO stamps MY_* from the active profile - CAT control via OmniRig COM on a single OS-locked goroutine, with bidirectional sync (freq/mode/band/split/VFOs) and Rig1/Rig2 hot-swap - Settings store (key/value), CAT debug log at %APPDATA%/HamLog/cat.log Frontend (React 18 + TypeScript + Tailwind v4 + shadcn-style): - Single-row entry strip with CAT-aware band/mode/freq, RST, Start/End UTC, per-field locks (band/mode/freq/start/end) for backdated QSOs - Topbar: live freq (MHz.kHz.Hz dotted), live UTC, band/mode/SPLIT badges, CAT pill with rig selector and clickable Azimuth pill (rotor TODO) - Settings tree: Profiles (Log4OM-style manager), Station Information (edits the active profile), unified Callsign Lookup with Test buttons, Bands/Modes lists, CAT - Worked-before matrix (band × mode × class) with new-DXCC highlighting - ADIF import from menu + Maintenance > Refresh cty.dat Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
16 lines
583 B
TypeScript
16 lines
583 B
TypeScript
import * as React from 'react';
|
|
import { cn } from '@/lib/utils';
|
|
|
|
// Minimal scroll-area wrapper — Radix has a fancier version, but native
|
|
// overflow with our styled scrollbar is good enough for the logbook table.
|
|
export interface ScrollAreaProps extends React.HTMLAttributes<HTMLDivElement> {}
|
|
|
|
export const ScrollArea = React.forwardRef<HTMLDivElement, ScrollAreaProps>(
|
|
({ className, children, ...props }, ref) => (
|
|
<div ref={ref} className={cn('relative overflow-auto', className)} {...props}>
|
|
{children}
|
|
</div>
|
|
),
|
|
);
|
|
ScrollArea.displayName = 'ScrollArea';
|