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:
@@ -94,7 +94,7 @@ const KNOWN_SETTINGS: Array<{
|
||||
key: 'default_new_interest_owner',
|
||||
label: 'Default New-Interest Owner',
|
||||
description:
|
||||
'User ID to auto-assign as the deal owner when a new interest is created. Stored as { "userId": "..." }. Leave blank to have new interests unassigned by default — the rep can pick an owner from the interest detail header.',
|
||||
'User ID to auto-assign as the deal owner when a new interest is created. Stored as { "userId": "..." }. Leave blank to have new interests unassigned by default - the rep can pick an owner from the interest detail header.',
|
||||
type: 'json',
|
||||
defaultValue: { userId: null },
|
||||
},
|
||||
@@ -136,7 +136,7 @@ const KNOWN_SETTINGS: Array<{
|
||||
// ─── Berth recommender (src/lib/services/berth-recommender.service.ts) ──────
|
||||
{
|
||||
key: 'recommender_max_oversize_pct',
|
||||
label: 'Recommender — max oversize %',
|
||||
label: 'Recommender - max oversize %',
|
||||
description:
|
||||
'Cap on how much larger a berth can be than the desired length/width/draft before it stops being suggested. Default 30.',
|
||||
type: 'number',
|
||||
@@ -144,35 +144,35 @@ const KNOWN_SETTINGS: Array<{
|
||||
},
|
||||
{
|
||||
key: 'recommender_top_n_default',
|
||||
label: 'Recommender — default result count',
|
||||
label: 'Recommender - default result count',
|
||||
description: 'Default number of berth recommendations returned per request. Default 8.',
|
||||
type: 'number',
|
||||
defaultValue: 8,
|
||||
},
|
||||
{
|
||||
key: 'fallthrough_policy',
|
||||
label: 'Recommender — fall-through policy',
|
||||
label: 'Recommender - fall-through policy',
|
||||
description: 'How berths re-enter the recommender after a lost deal.',
|
||||
type: 'select',
|
||||
defaultValue: 'immediate_with_heat',
|
||||
options: [
|
||||
{
|
||||
value: 'immediate_with_heat',
|
||||
label: 'Immediate (with heat boost) — surface again right away',
|
||||
label: 'Immediate (with heat boost) - surface again right away',
|
||||
},
|
||||
{
|
||||
value: 'cooldown',
|
||||
label: 'Cooldown — wait N days (see below)',
|
||||
label: 'Cooldown - wait N days (see below)',
|
||||
},
|
||||
{
|
||||
value: 'never_auto_recommend',
|
||||
label: 'Never — only re-surface via manual rep search',
|
||||
label: 'Never - only re-surface via manual rep search',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'fallthrough_cooldown_days',
|
||||
label: 'Recommender — fall-through cooldown (days)',
|
||||
label: 'Recommender - fall-through cooldown (days)',
|
||||
description:
|
||||
'Days a berth stays out of the recommender after a lost deal when the policy is `cooldown`. Default 30.',
|
||||
type: 'number',
|
||||
@@ -180,14 +180,14 @@ const KNOWN_SETTINGS: Array<{
|
||||
},
|
||||
{
|
||||
key: 'heat_weight_recency',
|
||||
label: 'Heat weight — recency',
|
||||
label: 'Heat weight - recency',
|
||||
description: 'Weight given to how recently the prior interest fell through. Default 30.',
|
||||
type: 'number',
|
||||
defaultValue: 30,
|
||||
},
|
||||
{
|
||||
key: 'heat_weight_furthest_stage',
|
||||
label: 'Heat weight — furthest stage',
|
||||
label: 'Heat weight - furthest stage',
|
||||
description:
|
||||
'Weight given to how close the prior interest got to closing before falling through. Default 40.',
|
||||
type: 'number',
|
||||
@@ -195,7 +195,7 @@ const KNOWN_SETTINGS: Array<{
|
||||
},
|
||||
{
|
||||
key: 'heat_weight_interest_count',
|
||||
label: 'Heat weight — historical interest count',
|
||||
label: 'Heat weight - historical interest count',
|
||||
description:
|
||||
'Weight given to how often this berth has attracted interest historically. Default 15.',
|
||||
type: 'number',
|
||||
@@ -203,7 +203,7 @@ const KNOWN_SETTINGS: Array<{
|
||||
},
|
||||
{
|
||||
key: 'heat_weight_eoi_count',
|
||||
label: 'Heat weight — historical EOI count',
|
||||
label: 'Heat weight - historical EOI count',
|
||||
description:
|
||||
'Weight given to how often interest in this berth has reached EOI signing. Default 15.',
|
||||
type: 'number',
|
||||
@@ -211,7 +211,7 @@ const KNOWN_SETTINGS: Array<{
|
||||
},
|
||||
{
|
||||
key: 'tier_ladder_hide_late_stage',
|
||||
label: 'Recommender — hide late-stage tier',
|
||||
label: 'Recommender - hide late-stage tier',
|
||||
description:
|
||||
'Hide berths whose only active interests are late-stage (close to closing) from recommendations.',
|
||||
type: 'boolean',
|
||||
@@ -219,7 +219,7 @@ const KNOWN_SETTINGS: Array<{
|
||||
},
|
||||
{
|
||||
key: 'documents_show_expired_tab',
|
||||
label: 'Documents — show Expired tab',
|
||||
label: 'Documents - show Expired tab',
|
||||
description:
|
||||
'When off, the Expired tab on the documents hub is hidden. Use this when expired EOIs are noise that distracts reps from active deals.',
|
||||
type: 'boolean',
|
||||
@@ -227,12 +227,15 @@ const KNOWN_SETTINGS: Array<{
|
||||
},
|
||||
{
|
||||
key: 'berths_default_currency',
|
||||
label: 'Berths — default currency',
|
||||
label: 'Berths - default currency',
|
||||
description:
|
||||
'Currency applied to newly-created berths when none is specified on the form. Existing berths keep their per-row currency. Defaults to USD.',
|
||||
type: 'select',
|
||||
defaultValue: 'USD',
|
||||
options: SUPPORTED_CURRENCIES.map((c) => ({ value: c.code, label: `${c.code} — ${c.label}` })),
|
||||
options: SUPPORTED_CURRENCIES.map((c) => ({
|
||||
value: c.code,
|
||||
label: `${c.code} - ${c.label}`,
|
||||
})),
|
||||
},
|
||||
];
|
||||
|
||||
@@ -350,7 +353,7 @@ export function SettingsManager() {
|
||||
</CardContent>
|
||||
</Card>
|
||||
|
||||
{/* String + Select Settings — both render in the same card.
|
||||
{/* String + Select Settings - both render in the same card.
|
||||
'select' settings get a Select dropdown bound to setting.options;
|
||||
'string' settings get a free-text Input. */}
|
||||
{KNOWN_SETTINGS.some((s) => s.type === 'string' || s.type === 'select') && (
|
||||
@@ -526,7 +529,7 @@ export function SettingsManager() {
|
||||
this for one-off feature flags, integration secrets, or experimental tunables that the
|
||||
platform reads at runtime via{' '}
|
||||
<code className="text-xs">getSystemSetting(portId, key)</code>. Values can be JSON
|
||||
objects, plain strings, numbers, or booleans. Most reps will never need this section —
|
||||
objects, plain strings, numbers, or booleans. Most reps will never need this section -
|
||||
touch only if you know which key affects what.
|
||||
</CardDescription>
|
||||
</CardHeader>
|
||||
|
||||
Reference in New Issue
Block a user