# Iconmate TODO Roadmap
## Done in this pass
- [x] Enter submits add popup (when focused on Name).
- [x] Paste shortcut support across add popup fields (Cmd/Ctrl+V behavior).
- [x] Default name + filename inference from Iconify names and known URLs.
- [x] Parse Iconify URL patterns and icones.js.org URL patterns.
- [x] Add popup visual cleanup (reduced borders/lines, removed debug block).
- [x] Delete popup visual cleanup (simpler `y` / `n` flow, less instruction noise).
## Existing completed
- [x] Help popup: status instead of defaults.
- [x] Homepage: Up/Down during search while keeping focus.
- [x] `iconmate.jsonc` generation.
## Next high-priority slice
- [x] Rename flow UX
- [x] Add a lightweight rename action that only renames the file path export target.
- [x] Keep icon component alias unchanged and show a warning for alias rename in-editor.
- [x] Add explicit messaging to recommend IDE rename refactor for symbol-level rename.
- [x] Acceptance: rename updates file + `index.ts` export path safely.
- [x] Global system prefs (`~/.config/iconmate.jsonc` or `~/iconmate.jsonc`)
- [x] Confirm final search paths and precedence for macOS/Linux/Windows.
- [x] Implement robust loader with unknown-key warnings (non-fatal).
- [x] Add schema validation and friendly error output with file path context.
- [x] Acceptance: startup logs/source reflect applied global values.
- [x] `o` key to open selected icon
- [x] Add keybind in main list and shared opener support for Iconify search list integration.
- [x] Resolve viewer command from local -> global -> OS default.
- [x] Add `%filename%` token substitution and command escaping behavior.
- [x] Acceptance: selected icon opens in configured app/editor.
- [x] `svg_viewer_cmd` defaults and fallback behavior
- [x] macOS: Quick Look/open behavior.
- [x] Linux/Windows: browser/system default fallback.
- [x] Fallback to web preview when local command fails.
- [x] Acceptance: command works cross-platform with graceful fallback.
## Add-flow product direction
- [x] ~During add: allow icon discovery using Iconify API inside TUI~
- Prototype inline query input + paginated result list.
- Validate whether this beats copy/paste from icones.js.org.
- Decide final UX based on keystroke count and speed.
- [x] Dedicated icon search interface (TUI)
- [x] Launch from Home (`i`) instead of starting inside Add popup.
- [x] Build collection picker + icon view with `Tab` switching and Up/Down navigation.
- [x] Use `/collections` for collections and local client-side collection filtering.
- [x] Run debounced icon `/search` only while the Icons tab is active.
- [x] `Enter` on collection clears search input and opens collection-scoped icon list.
- [x] `Enter` on icon opens Add popup with icon/name/filename prefilled (no auto-submit).
- [x] `Ctrl+o` in Icons downloads to temp and opens preview with loading/status feedback.
- [x] Search as standalone CLI for AI/tooling
- Add machine-friendly command (JSON first).
- Keep deterministic outputs and stable field names.
- Acceptance: scriptable icon search with no interactive prompts.
## Notes
- Keep TUI minimal-first: less chrome, more keyboard speed.
- Prefer defaults inferred from icon source whenever possible.
---
- [x] Non-interactive delete mode
- [x] Flutter compatibility (`--preset flutter`, see `_docs/flutter-preset-plan.md`)
- [x] List scroll behavior better:
- [x] Keyboard
- Pressing down, Only start scrolling down when selected/cursor is on the last viewable element (I think current behavior).
- Pressing up, Only start scrolling up when the selected/cursor is already on the first viewable element. Currently the behavior is not like this. It changes the current selection and scrolls too (even if the item is still the last item).
- [x] Mouse
- Clicking a list item - just essentially skips cursor to select the item as the new selected/cursor. Shouldn't really imitate 'enter', it just changes the selection.
- Scrolling up or down - just scrolls the scroll value obviously. It doesnt change the current selection.
- [x] Formatting aware barrel files i.e. "./"; or "./" or './' or './'; or "./something.tsx" (for --react or --solid, etc stuff, if it's allowed in tsconfig), should be smart enough to replicate that formatting in js files.
- [x] The iconmate sync (CLI + read-only TUI dialog; see `_docs/iconmate-sync-plan.md`)
- [x] I noticed for flutter projects.. Doing `iconmate add` doesn't add it to the dart file so when I do `iconmate sync` I still get 'Would add records'
- [x] file naming defaults changed from `:` to `-` for better compatibility with most filesystems.