Conversation
added 4 commits
December 7, 2025 21:48
- Make url optional (nil = folder, String = favorite) - Add parentID for hierarchy (nil = root level) - Add order property for sorting - Add isFolder computed property - Update FormatGenerator to filter folders - Update ContentView to handle optional url - Only export favorites (not folders) for now Part of #4
- Create FolderRowView component (yellow folder icon) - Add DisclosureGroup for collapsible folders - Show root level items vs. children - Sort by order property - Filter and display hierarchy correctly - Indent child favorites under folders Part of #4
- Add addFolder() method in ViewModel - Add 'Add Folder' button in Toolbar - Keyboard shortcut ⌘⇧N for adding folders - Folder created with url = nil and default name - Support parentID parameter in addFavorite() for future use - Delete works via existing removeFavorite() method Part of #4
- Add folder hierarchy support (parentID, isFolder, order fields) - Implement folder UI with DisclosureGroup - Add drag & drop for reordering and moving favorites - Generate JSON/Plist with children arrays for folders - Move TopLevel Name to Settings (CMD+,) - Fix Plist format (children before name) - Improve UI consistency for section headers Closes #4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📁 Folder Support Implementation
Closes #4
✅ Implemented Features
1. Data Model & Persistence
parentID: UUID?- Hierarchical structure (nil = root level)isFolder: Bool- Distinguish folders from favoritesorder: Int- Sorting within the same level2. User Interface
DisclosureGroup(collapsible)3. Drag & Drop
4. Export (JSON & Plist)
{ "name": "Work Links", "children": [ { "name": "GitHub", "url": "https://github.com" } ] }childrenbeforenamein Plist)orderfield for consistent output5. UX Improvements
📝 Changes Overview
Modified Files:
Favorite.swift- Data model with hierarchy fieldsFavoritesViewModel.swift- Folder management & drag & drop logicContentView.swift- Drag & drop UI implementationFolderRowView.swift- Folder display componentFormatGenerator.swift- JSON/Plist generation with children arraysSettingsView.swift- TopLevel Name configurationAppKitTextField.swift- Drag & drop protection (not needed after Settings move)🧪 Testing
Tested Scenarios:
📦 Version
This PR prepares for v1.1.0 release (MINOR version bump - new features, backward compatible)
📸 Screenshots
Main View with Folders:
Settings:
Ready for review and merge into
main! 🚀