diff --git a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte index 0e8889f6..770dae65 100644 --- a/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte +++ b/src/routes/events/[event_id]/(badges)/badges/[badge_id]/ae_comp__badge_print_controls.svelte @@ -8,7 +8,8 @@ * Access levels: * Basic authenticated → can edit professional_title_override, affiliations_override, * location_override only; all fields have font controls. - * Trusted / Admin → can edit all fields (same scope as Badge Review page). + * Trusted (no edit mode) → can also edit full_name_override without enabling edit mode. + * Trusted / Admin + edit mode → can edit all fields (same scope as Badge Review page). * * Font sizes flow back to the parent via $bindable() props so the badge render * (ae_comp__badge_obj_view.svelte) stays in sync without prop-drilling through @@ -175,12 +176,16 @@ function field_shown(field: string): boolean { /** * Can the current user edit this field? * - No authenticated_access → never (display only). - * - trusted + edit_mode → always. + * - trusted + edit_mode → always (all fields). + * - trusted (no edit_mode) → name always editable; other fields follow auth_editable list. * - authenticated only → field must be in template's auth_editable list (or defaults). */ function field_editable(field: string): boolean { if (!is_auth) return false; if (is_trusted && is_global_edit_mode) return true; + // Trusted staff can fix a name without enabling full edit mode — + // same visibility as title/affiliations but scoped to trusted only. + if (is_trusted && field === 'name') return true; const auth_editable = template_controls_cfg?.auth_editable ?? DEFAULT_AUTH_EDITABLE; return auth_editable.includes(field);