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.
|
- **Badge print controls UX polish:** Scott has improvements in mind — TBD next session.
|
||||||
File: `ae_comp__badge_print_controls.svelte`.
|
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)
|
### [Leads] Exhibitor Lead Scanning — IN PROGRESS (demo-ready prep)
|
||||||
|
|||||||
@@ -342,7 +342,19 @@ function font_size_reset(
|
|||||||
let active_field: string | null = $state(null);
|
let active_field: string | null = $state(null);
|
||||||
|
|
||||||
function toggle_field(key: string) {
|
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 ---
|
// --- Editable field state ---
|
||||||
|
|||||||
Reference in New Issue
Block a user