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

@@ -231,10 +231,10 @@ export function CreateDocumentWizard({ portSlug }: CreateDocumentWizardProps) {
</SelectTrigger>
<SelectContent>
<SelectItem value="documenso-template">
Generated EOI rendered + signed externally
Generated EOI - rendered + signed externally
</SelectItem>
<SelectItem value="inapp">
Manual EOI rendered in CRM, sent for e-signature
Manual EOI - rendered in CRM, sent for e-signature
</SelectItem>
</SelectContent>
</Select>

View File

@@ -133,7 +133,7 @@ export function EoiCancelDialog({ documentId, signers, open, onOpenChange }: Eoi
))}
</ul>
<p className="text-xs italic text-muted-foreground">
Leave all unchecked to cancel silently no emails will be sent.
Leave all unchecked to cancel silently - no emails will be sent.
</p>
</div>
)}

View File

@@ -262,7 +262,7 @@ export function EoiGenerateDialog({
const persistMissingFields = async (): Promise<void> => {
if (!clientId) {
toastError(new Error('Client ID missing refresh the page.'));
toastError(new Error('Client ID missing - refresh the page.'));
return;
}
setFixSaving(true);
@@ -363,7 +363,7 @@ export function EoiGenerateDialog({
{
key: 'dimensions',
label: `Dimensions (L × W × D, ${effectiveDimensionUnit})`,
value: ctx.yacht ? dimensionsForRender.map((v) => v ?? '').join(' × ') : null,
value: ctx.yacht ? dimensionsForRender.map((v) => v ?? ' - ').join(' × ') : null,
},
{
key: 'berth',
@@ -481,7 +481,7 @@ export function EoiGenerateDialog({
Generate Expression of Interest
</SheetTitle>
<SheetDescription>
Review the values that will be auto-filled. Edit anything inline changes save back to
Review the values that will be auto-filled. Edit anything inline - changes save back to
the client / interest record automatically. The EOI is generated once everything looks
right.
</SheetDescription>
@@ -497,7 +497,7 @@ export function EoiGenerateDialog({
</SelectTrigger>
<SelectContent>
<SelectItem value={DOCUMENSO_TEMPLATE_VALUE}>
Standard EOI sent for e-signature (recommended)
Standard EOI - sent for e-signature (recommended)
</SelectItem>
{inAppTemplates.map((t) => (
<SelectItem key={t.id} value={t.id}>
@@ -555,7 +555,7 @@ export function EoiGenerateDialog({
<div className="space-y-1 border-t pt-2">
<div className="flex items-center justify-between">
<p className="text-[10px] font-semibold uppercase tracking-wide text-muted-foreground">
Optional (Section 3 left blank if absent)
Optional (Section 3 - left blank if absent)
</p>
{ctx.yacht ? (
<div className="inline-flex rounded-md border bg-muted/30 p-0.5 text-[11px]">
@@ -662,7 +662,7 @@ export function EoiGenerateDialog({
Missing required client details
</p>
<p className="text-[11px] text-amber-800/80">
Fill the fields below they&apos;ll be saved to the client&apos;s record before
Fill the fields below - they&apos;ll be saved to the client&apos;s record before
the EOI renders.
</p>
</div>
@@ -804,7 +804,7 @@ export function EoiGenerateDialog({
</SheetFooter>
</SheetContent>
{/* Phase 3c nested yacht-spawn Sheet. Pre-selects the linked
{/* Phase 3c - nested yacht-spawn Sheet. Pre-selects the linked
client as owner so the rep only types the yacht-specific
fields. After save, PATCH the interest with the new yachtId so
the EOI's yacht block populates without a manual re-link. */}
@@ -917,7 +917,9 @@ function PreviewRow({
)
) : (
<>
<span className="flex-1">{value ?? (missing ? 'Missing — required' : 'Not set')}</span>
<span className="flex-1">
{value ?? (missing ? 'Missing - required' : 'Not set')}
</span>
{edit ? (
<button
type="button"
@@ -1004,7 +1006,7 @@ function OverridableContactField({
)}
>
<span className="flex-1">
{effective ?? (missing ? 'Missing required' : 'Not set')}
{effective ?? (missing ? 'Missing - required' : 'Not set')}
{override?.value != null ? (
<span className="ml-1 inline-flex items-center rounded bg-amber-100 px-1 text-[10px] font-medium text-amber-800">
[EOI]
@@ -1265,7 +1267,7 @@ function OverridableAddressField({
)}
>
<span className="flex-1">
{effectiveSummary ?? (missing ? 'Missing required' : 'Not set')}
{effectiveSummary ?? (missing ? 'Missing - required' : 'Not set')}
{override ? (
<span className="ml-1 inline-flex items-center rounded bg-amber-100 px-1 text-[10px] font-medium text-amber-800">
[EOI]

View File

@@ -73,7 +73,7 @@ export function NewDocumentMenu({
<div className="flex flex-col">
<span>Upload file</span>
<span className="text-xs text-muted-foreground">
Drop or browse stored in the current folder
Drop or browse - stored in the current folder
</span>
</div>
</DropdownMenuItem>
@@ -83,7 +83,7 @@ export function NewDocumentMenu({
<div className="flex flex-col">
<span>Generate document for signing</span>
<span className="text-xs text-muted-foreground">
EOI, contract, or custom sent for e-signature
EOI, contract, or custom - sent for e-signature
</span>
</div>
</Link>