chore(copy): em-dash sweep across user-facing JSX text + bump lint to error

Replaced 174 em-dashes (—) with " - " (space-hyphen-space) across 49
files in src/components + src/app. The em-dash reads as a tell-tale
"AI-generated" marker per the user's design feedback; hyphens with
spaces preserve the connector semantics without the AI tint.

Touched only lines outside pure-comment context (// /* * */). Code
comments, JSDoc, audit-log strings, structured logging strings, and
templates outside the lint scope retain their em-dashes for now —
they're not user-visible.

Also captured two remaining cases that used the `—` HTML entity
instead of the literal character (system-monitoring-dashboard,
interest-stage-picker) — replaced with a plain hyphen.

Bumped the existing `no-restricted-syntax` rule from `warn` → `error`
in eslint.config.mjs scoped to src/components/**/*.tsx +
src/app/**/*.tsx. New code reintroducing em-dashes in JSX text now
fails the lint gate.

Verified: tsc clean, vitest 1448/1448, eslint 0 em-dash warnings.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-05-21 20:02:58 +02:00
parent 292a8b5e4a
commit f0dbefcac2
59 changed files with 213 additions and 205 deletions

View File

@@ -245,7 +245,7 @@ function BulkArchiveWizardBody({ open, onOpenChange, clientIds, onSuccess }: Pro
</div>
</div>
<p className="text-xs text-muted-foreground">
This action is reversible restore individually from each archived client.
This action is reversible - restore individually from each archived client.
</p>
</div>
)}

View File

@@ -175,7 +175,7 @@ function BulkHardDeleteDialogBody({ onOpenChange, clientIds, onDeleted }: Props)
{stage === 'partial' && (
<div className="space-y-3 text-sm">
<div className="rounded-md border border-amber-300 bg-amber-50 p-3 text-amber-900">
{partialDeleted} of {clientIds.length} permanently deleted. {skipped.length} skipped
{partialDeleted} of {clientIds.length} permanently deleted. {skipped.length} skipped -
see below.
</div>
<div className="rounded-md border max-h-60 overflow-y-auto">

View File

@@ -278,7 +278,7 @@ function SmartArchiveDialogBody({
<DialogHeader>
<DialogTitle>Archive {clientName}</DialogTitle>
<DialogDescription>
Archive is reversible the client can be restored from the archived list. Decide what
Archive is reversible - the client can be restored from the archived list. Decide what
should happen to the relationships below before continuing.
</DialogDescription>
</DialogHeader>
@@ -314,7 +314,7 @@ function SmartArchiveDialogBody({
<CardHeader className="pb-2">
<CardTitle className="text-sm font-medium text-amber-900 flex items-center gap-2">
<AlertTriangle className="h-4 w-4" aria-hidden />
Late-stage interest confirmation required
Late-stage interest - confirmation required
</CardTitle>
</CardHeader>
<CardContent className="text-xs text-amber-900">
@@ -569,12 +569,12 @@ function SmartArchiveDialogBody({
</CardTitle>
</CardHeader>
<CardContent className="text-xs text-muted-foreground space-y-1">
<p>EOI documents retained for audit (always)</p>
{dossier.hasPortalUser && <p>Portal user deactivated (login revoked)</p>}
<p>EOI documents - retained for audit (always)</p>
{dossier.hasPortalUser && <p>Portal user - deactivated (login revoked)</p>}
{dossier.companies.length > 0 && (
<p>Company memberships end-dated to today (history preserved)</p>
<p>Company memberships - end-dated to today (history preserved)</p>
)}
<p>Notes, contacts, tags, addresses survive on the archived client</p>
<p>Notes, contacts, tags, addresses - survive on the archived client</p>
</CardContent>
</Card>

View File

@@ -163,7 +163,7 @@ function SmartRestoreDialogBody({ open, onOpenChange, clientId, clientName, onSu
<div key={r.id} className="flex items-start gap-2">
<span className="mt-0.5">{iconFor(r.kind)}</span>
<span>
<span className="font-medium">{r.label}</span> {r.reason}
<span className="font-medium">{r.label}</span> - {r.reason}
</span>
</div>
))}
@@ -217,7 +217,7 @@ function SmartRestoreDialogBody({ open, onOpenChange, clientId, clientName, onSu
<div key={r.id} className="flex items-start gap-2">
<span className="mt-0.5">{iconFor(r.kind)}</span>
<span>
<span className="font-medium">{r.label}</span> {r.reason}.{' '}
<span className="font-medium">{r.label}</span> - {r.reason}.{' '}
<span className="italic">{r.lockReason}</span>
</span>
</div>