fix(badges): cancel edit state on field switch, not just on explicit cancel
toggle_field only changed active_field — it never called cancel_field for the previously open field. Unsaved typed values stayed in edit_full_name_override etc., so reopening a field would show the stale typed value and re-apply it to the badge preview, even though the user had already moved on. New logic: capture was_open, always call cancel_field for the current field (resets edit vars + sets active_field = null), then open the new field if it wasn't the one being closed. Closing a field by re-clicking its pencil now also discards unsaved state, consistent with the explicit [X] button behavior. Also: add global placeholder CSS fix to TODO__Agents.md (scoped workaround already in ae_comp__badge_print_controls; long-term fix belongs in app.css or theme file). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -145,6 +145,26 @@ functionality, but pollutes the console and may cause unhandled promise rejectio
|
||||
- **Badge print controls UX polish:** Scott has improvements in mind — TBD next session.
|
||||
File: `ae_comp__badge_print_controls.svelte`.
|
||||
|
||||
### [CSS] Global placeholder text color — too dark in light mode
|
||||
Placeholder text inherits full input text color in light mode (Tailwind CSS default), making
|
||||
placeholders indistinguishable from filled-in values. Most visible in badge print controls
|
||||
where placeholders show the actual badge value (e.g. "John Smith").
|
||||
|
||||
Workaround: scoped `::placeholder` rule added to `ae_comp__badge_print_controls.svelte`
|
||||
(gray-400 light / gray-500 dark) — `commit 7733ef8`.
|
||||
|
||||
**Long-term fix:** Add a global rule to the main CSS (e.g. `src/app.css` or a theme file):
|
||||
```css
|
||||
::placeholder {
|
||||
color: #9ca3af; /* gray-400 */
|
||||
opacity: 1; /* overrides Firefox's 0.54 default */
|
||||
}
|
||||
.dark ::placeholder {
|
||||
color: #6b7280; /* gray-500 */
|
||||
}
|
||||
```
|
||||
Once the global rule is in place, remove the scoped workaround from the badge controls.
|
||||
|
||||
|
||||
|
||||
### [Leads] Exhibitor Lead Scanning — IN PROGRESS (demo-ready prep)
|
||||
|
||||
@@ -342,7 +342,19 @@ function font_size_reset(
|
||||
let active_field: string | null = $state(null);
|
||||
|
||||
function toggle_field(key: string) {
|
||||
active_field = active_field === key ? null : key;
|
||||
// Capture whether the caller is closing the field that's already open.
|
||||
const was_open = active_field === key;
|
||||
// Always cancel the current field before switching — discards any unsaved edit
|
||||
// state so stale typed values don't bleed into the badge preview after the
|
||||
// accordion closes. The explicit [X] button calls cancel_field directly;
|
||||
// clicking away to another field (or re-clicking the pencil) must do the same.
|
||||
if (active_field) {
|
||||
cancel_field(active_field); // resets edit vars + sets active_field = null
|
||||
}
|
||||
if (!was_open) {
|
||||
active_field = key; // open the new field
|
||||
}
|
||||
// If was_open: active_field stays null — the field is now closed.
|
||||
}
|
||||
|
||||
// --- Editable field state ---
|
||||
|
||||
Reference in New Issue
Block a user