Settings Sheet
Modal sheet for app configuration. Opened via gear icon in ContentView.
Structure
NavigationStack with List containing:
Tags Section
- List of all tags
- Swipe to archive/delete
- “Add Tag” button opens the add-tag sheet
- While the tags file is unreadable (
AppState.tagsUnavailable): “Add Tag” is disabled, swipe actions and the context menu are not offered, and the footer reads “Tags can’t be added or changed until the tags file is readable again. See Storage problems below.” - While a month file or recovery file is unreadable (
AppState.tagRemovalBlockedMessage): the Delete swipe action is not offered, Delete in the context menu is disabled, and the footer reads, for example, “Tags can’t be deleted or merged while April 2026 can’t be read: hidden entries would keep a tag that no longer exists. See Storage problems below.” Archive and Unarchive stay available - A delete that is refused anyway (the file became unreadable after the last load) shows its reason as the sheet’s red error text
Data Section
- Import from HEY: File picker for CSV import
- Import from Toggl: File picker for a Toggl Track time entries CSV (see Import below)
- Export Format: menu (
exportFormatPicker) choosing the export’s layout: CSV (Minuta’s columns, the default) or Toggl (Toggl Track’s 13 columns). Not remembered between openings - Export to CSV / Export to Toggl (label follows the format): opens
ExportView(date range, Generate CSV, share sheet) for the chosen layout - Data folder: Current storage path
- Copy path: Copies folder path to clipboard
Storage problems Section
Shown only while AppState.storageWarnings is not empty, after the Data section. Lists every storage file the app could not read:
- Title: the month name (for example “April 2026”), “April 2026, entries kept separately” for a recovery file, or “Tags”
- Path below the data folder (for example
records/2026/04.automerge) and the reason - “The file could not be opened. Minuta tries again every minute.” for a file that could not be opened
- For a month file: “New entries for this month are kept separately.” or “No entries are kept separately for this month yet.”
- Copy Path: Copies the file’s full path to clipboard
Footer: “Minuta did not change these files. If a file is still syncing, wait for it to finish. If it is lost, move or delete it in Finder or Files; the entries kept separately then take its place.”
The banner in the main window opens this sheet. See 416-storage-warnings.
About Section
- App version and build number
Tag Management
Tags displayed with:
- Color indicator
- Name
- Archive status (grayed if archived)
Swipe actions:
- Archive/Unarchive
- Delete (with confirmation)
Import from HEY and Toggl
Both buttons share one flow (SettingsSheet.parseAndImport(_:format:)), with HEYImportService or TogglImportService (302-export).
HEY: format Start,End,Duration,Category,Notes; Category maps to 201-tag (auto-created), Notes to comment.
Toggl: Project maps to the tag (auto-created, empty = untagged), Description to comment; the other columns except User and Email are kept in the record’s metadata. A zero-length entry is imported one second long; a row ending before it starts or with an unreadable time is skipped.
- Shows the count of imported records and new tags, plus zero-length and skipped rows when there are any, or an error (“No entries found. Is it a Toggl CSV export?” for a file of the other format)
- Not available while the tags file is unreadable: the button shows “Import is not available while tags can’t be read: the imported entries would lose their categories. See Storage problems.” instead of the file picker
- Tags are created before any record; a tag that cannot be created stops the import instead of leaving its entries untagged
- Records are written with
TimeTrackingService.restoreRecord(_:), which stores a record that is not in storage;updateRecordis for existing records and is refused while a month file is unreadable
Related
- 402-ios - Parent view
- 403-app-state - State management
- 404-storage-location - Folder selection
- 302-export - Export service
- 416-storage-warnings - Banner and Storage problems section