feat(analytics): show form field labels in session replays (#1416)

* feat(analytics): show form field labels in session replays

Replays showed the sidebar after #1412 but form pages were still fully
masked, so you could not tell WHICH field a user was interacting with.
Tag the shared Label primitive (components/ui/label.tsx, used by every
form in the app) with data-ph-unmask: field labels are static i18n
chrome, and maskAllInputs keeps every typed value hidden.

The one Label whose text is user data, the user-defined dimension name
in LineDimensionFields, gets data-ph-mask, which wins even on the same
element because maskTextFn checks it first.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* fix(analytics): re-mask three Labels that render user data

Completing the audit the PR review asked for: a multiline sweep over
every Label child found three call sites whose label text is user
data, missed by the first single-line pass. Danger-zone confirm
labels interpolate the user's email (AccountDangerZone) and the
company name (CompanyDangerZone), and the periodisering auto-detect
row label is counterparty name + invoice number. All three now carry
data-ph-mask. Currency-code and row-count interpolations were
reviewed and left visible: categorical UI state, not books data.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Mattsson
2026-08-05 15:18:07 +02:00
committed by GitHub
co-authored by Claude Fable 5
parent d1c411ad6f
commit f633349c8d
6 changed files with 21 additions and 4 deletions
@@ -677,7 +677,9 @@ function AutoStep({
/>
<div className="flex-1 space-y-1.5">
<div className="flex items-center justify-between gap-2">
{/* data-ph-mask: source_label is counterparty name + invoice number */}
<Label
data-ph-mask=""
htmlFor={`auto-${key}`}
className="text-sm font-medium cursor-pointer select-none"
>