Commit graph

29 commits

Author SHA1 Message Date
h3p
0945b23b01 Improve editor UX across iOS, iPadOS, and macOS
iOS
- Keep compact, phone-appropriate toolbar behavior
- Improve toolbar/menu responsiveness and action access consistency
- Include mobile editor parity fixes (syntax highlighting and line-number visibility)

iPadOS
- Make toolbar width adaptive to device/screen size
- Keep toolbar height compact (matching iPhone-style vertical density)
- Distribute toolbar controls across available width
- Promote key overflow actions to visible toolbar buttons when space allows
  (open/save, sidebar toggles, find/replace, wrap, completion), with overflow fallback
- Use active UIWindowScene screen bounds for width calculation (deprecation-safe)

macOS
- Keep full toolbar + menubar action coverage aligned
- Preserve desktop toolbar behavior while iOS/iPadOS layouts diverge
- Retain platform-specific toolbar/menu polish without regressions
2026-02-07 11:51:52 +01:00
h3p
16c12e74bc `feat(editor): add tab strip with unsaved-close flow and refine sidebar/window controls
- Add open-file tab strip below toolbar with tab selection and close buttons
- Track per-tab dirty state in TabData (`isDirty`)
- Mark tabs dirty on content change and clear dirty flag on successful save/save as
- Add close-confirmation dialog for unsaved tabs:
  - Save
  - Don't Save
  - Cancel
- Implement close helpers in ContentView actions:
  - requestCloseTab
  - saveAndClosePendingTab
  - discardAndClosePendingTab
- Keep tab open when Save As is cancelled
- Fix left sidebar toolbar icon to always use left-sidebar symbol
- Keep right sidebar toggle separate and unchanged
- Continue using blank-window toolbar action for new windows`
2026-02-06 20:20:03 +01:00
h3p
2371c48bf1 refactor(editor): split ContentView and improve window/sidebar/search UX
- Split large ContentView into focused files:
  - ContentView+Toolbar.swift
  - ContentView+Actions.swift
  - EditorTextView.swift
  - SyntaxHighlighting.swift
  - SidebarViews.swift
  - PanelsAndHelpers.swift
- Fix markdown highlighting over-coloring by tightening markdown regex patterns
- Add true blank-window flow:
  - New Window scene with isolated EditorViewModel
  - Wire Cmd+N/system New to open blank window
  - Add toolbar New Window button
- Add right-side project structure panel:
  - Default disabled
  - Open Folder + recursive folder tree browsing
  - Open file from tree and refresh tree actions
- Add toolbar toggle for right project structure sidebar
- Upgrade find/replace:
  - Regex mode
  - Case-sensitive mode
  - Find Next / Replace / Replace All status feedback
- Apply translucent window background behavior consistently across windows and side panels
- Resolve post-refactor access-control/build issues:
  - Expose cross-file ContentView action methods
  - Expose NSRange.toOptional() for action extensions`
2026-02-06 19:59:53 +01:00
h3p
38e5911220 Fix line number ruler scrolling and translucency
- Move LineNumberRulerView into its own file
- Fix line number updates while scrolling
- Preserve window translucency by avoiding opaque ruler drawing
- Remove unused textContainer binding
2026-02-06 17:06:34 +01:00
h3p
77b402044f Improve editor behavior and UI options
- Fix Swift code being misclassified as C# by unifying language detection
- Remove conflicting AI-based language detection on paste
- Route paste, open, and edit events through LanguageDetector
- Add toggle for translucent editor background
- Persist translucency preference across sessions
- Minor cleanup of conflicting or redundant editor logic
2026-02-06 14:29:34 +01:00
h3p
94493cb498 Improve AppleFM Foundation Models integration and fix streaming issues
• Add robust availability checks for Apple Intelligence (iOS 18 / macOS 15) before using system language model
• Implement health check via LanguageModelSession to validate model responsiveness (“ping” -> “pong”)
• Provide synchronous completion API appleFMComplete(prompt:) returning model response text
• Implement streaming completion API appleFMStream(prompt:) that yields incremental deltas
• Fix optional handling in streaming: unwrap partial.content.text safely and remove force unwraps
• Correct delta computation using unwrapped current string and maintain last state
• Add graceful fallback to single-shot completion if streaming fails
• Provide stubbed implementations when USE_FOUNDATION_MODELS is disabled to ensure build stability across configs
2026-02-05 22:30:21 +01:00
h3p
c141478814 feat(ui): remove custom hover popovers and rely on native macOS tooltips
• Remove HoverPopoverModifier and all .hoverPopover usages from toolbar
• Use .help(...) for OS-native tooltips on all toolbar items
• Ensure help strings are complete and descriptive (e.g., “Find & Replace”)
• Keep click-driven AI Model popover intact; only hover tooltips removed
• Prevents first-click dismissal behavior and avoids duplicate tooltips
2026-02-04 17:48:50 +01:00
h3p
d500380fb1 Add broad language support + Find/Replace panel; minor helpers
Languages:
- Extend picker, detection, TOC, and syntax highlighting for:
  swift, python, javascript, typescript, java, kotlin, go, ruby, rust, sql,
  html, css, c, cpp, objective-c, json, xml, yaml, toml, ini, markdown,
  bash, zsh, powershell, plain

Editor:
- Add Find/Replace sheet with Find Next, Replace, Replace All
- New toolbar button (magnifying glass) to open Find/Replace
- Implement find/replace helpers operating on the active NSTextView
- Small NSRange helper for cleaner optional handling

Syntax highlighting:
- Add lightweight regex patterns for Java, Kotlin, Go, Ruby, Rust, TypeScript,
  Objective‑C, SQL, XML, YAML, TOML, INI
- Keep performance-friendly patterns consistent with existing approach

TOC:
- Add TOC generation for Java, Kotlin, Go, Ruby, Rust, TypeScript, Objective‑C

Detection:
- Extend heuristics for XML, YAML, TOML/INI, SQL, Go, Java, Kotlin, TypeScript,
  Ruby, Rust, Objective‑C, INI

Testing:
- Verify language picker shows all new entries and switching updates highlighting
- Paste snippets of each language; ensure heuristics pick a sensible default
- Open Find/Replace; test Find Next, Replace, Replace All; verify selection/scroll
- Check large files still perform acceptably with lightweight patterns
2026-02-04 16:21:56 +01:00
h3p
09d6b8f435 Implement Grok and Gemini for inline code completion; fix exhaustive switch
- Wire up Grok (xAI) and Gemini (Google) API calls inside generateModelCompletion(...)
  - Grok: POST https://api.x.ai/v1/chat/completions with OpenAI-style messages
  - Gemini: POST v1beta/models/<model>:generateContent with contents/parts payload
  - Reuse existing prompt and sanitizeCompletion(_:) to keep output concise
  - Respect missing/empty tokens by short‑circuiting to no-op
- Ensure these providers are only used by inline completion, already gated by isAutoCompletionEnabled

- AIClientFactory: make switch exhaustive by adding `.anthropic` case (returns nil for now)
  - Anthropic is handled directly in ContentView’s inline completion path

Notes:
- No changes to other features or UI flows
- OpenAI and Anthropic implementations remain as previously added
- Gemini model used: gemini-1.5-flash-latest
- Grok model used: grok-2-latest

Testing:
- Toggle code completion with the toolbar button; when disabled, no API calls occur
- With tokens set, select Grok/Gemini and type to trigger suggestions
- Verify suggestions insert without duplication and are trimmed via sanitizeCompletion
- Build to confirm AIClientFactory switch error is resolved
2026-02-04 14:11:28 +01:00
h3p
39189c3bb6 Fix API Settings sheet clipping and improve layout
- Remove hard-coded sheet width so content can size naturally
- Add padding and a sensible minimum width to APISupportSettingsView
- Make SecureField inputs expand horizontally to avoid text truncation
- Use SwiftUI’s @Environment(\.dismiss) to close the sheet properly
- Keep existing bindings and persistence behavior intact

UI/UX:
- Prevents cut-off placeholders and clipped fields
- Improves readability and touch targets with consistent padding
- Updated App Icon for Dark & Light mode

Testing:
- Open API Settings sheet and verify all three fields are fully visible
- Resize window; fields should remain legible and expand as expected
- Press “Close” to confirm the sheet dismisses without warnings
2026-02-04 13:15:33 +01:00
h3p
e86c1cbee5 ContentView: Delay hover popovers and auto-detect language on drag-and-drop
- Increased toolbar hover popover delay to 1.0s for all controls to reduce accidental popups.
- Trigger language detection after drag-and-drop by posting `.pastedText` with the dropped file contents from `AcceptingTextView.performDragOperation(_:)`.
- Reuse existing `.onReceive(.pastedText)` pipeline to detect and set `currentLanguageBinding` (e.g., switching to "python" when dropping a .py file).
- Left the `hoverPopover` modifier default delay unchanged; only call sites were updated.

Testing:
- Hover over toolbar buttons and confirm popovers appear after ~1s.
- Drag a Python file into the editor and verify the syntax highlighter switches to Python automatically.
2026-01-25 20:02:59 +01:00
h3pdesign
e0f02e0e1b Minor comment edits 2026-01-25 14:29:46 +01:00
h3pdesign
804c4e62ed minor fixes to NSTextView 2026-01-25 14:06:31 +01:00
h3pdesign
e4bf47fa08 Further changes to Complete rework of the AI selector. Added OpenAI and Gemini. Drag & Drop files to App Window. Added Tooltips on hover for the Toolbar. Added clean window button. Added AI Model API settings. 2026-01-25 13:46:33 +01:00
h3pdesign
9183d941e3 Removed top comment 2026-01-23 14:43:59 +01:00
h3pdesign
ed2ee4cfe8 added bash and zsh as langauge, added function for opening all files 2026-01-23 12:49:52 +01:00
Rodric Krogh
05c7677443 Fixed line numbering 2026-01-21 00:46:04 +01:00
Rodric Krogh
70cfffaafc added autimatic language selection with Apple fm model 2026-01-17 13:04:11 +01:00
Rodric Krogh
68bb656f1e Fixed language selctor for syntax highlighting. Fixed focus for textview on paste 2026-01-17 12:36:31 +01:00
Rodric Krogh
a21b27466d UI changes. Fixed Sidebar 2026-01-17 12:25:50 +01:00
Rodric Krogh
881fcf6332 app-adjustments for textfield 2026-01-15 19:02:41 +01:00
Rodric Krogh
39ce3f3443 Adjustments for the rewrite code. Text field adjustments 2026-01-15 18:48:06 +01:00
Rodric Krogh
c509d31a27 Adjustments for the rewrite code 2025-09-25 11:01:45 +02:00
Rodric Krogh
0faaff61cb Adjustments to tabbar approach and syntax highlighting of text code 2025-08-27 13:34:59 +02:00
Rodric Krogh
9190efbbda New approach for Tabbar. Still Xcode Beta Issues for build Universal app 2025-08-27 13:33:45 +02:00
Rodric Krogh
2e8b3703b9 Included sidebar with tabel of contents. moved tabbar to the top 2025-08-26 19:25:39 +02:00
Rodric Krogh
b353a09064 Changes to the Sidebar. And Fixing Errors in main window 2025-08-26 13:22:53 +02:00
Rodric Krogh
d3bd921823 First build 2025-08-26 11:49:52 +02:00
Rodric Krogh
ab543db75b Initial Commit 2025-08-25 09:39:12 +02:00