Files
MD.ai/MarkdownViewer/ContentView.swift
0x8664b2 07b70455a3 Genesis
2025-06-20 09:06:01 -07:00

86 lines
2.9 KiB
Swift

import SwiftUI
import UniformTypeIdentifiers
import AppKit
struct ContentView: View {
@State private var selectedFileURL: URL?
@State private var markdownContent: String = ""
var body: some View {
NavigationSplitView {
VStack {
Button("Open Markdown File") {
openFile()
}
.padding()
Button("Test with Sample Content") {
markdownContent = "# Test\n\nThis is **test** content."
print("Set test content: \(markdownContent)")
}
.padding()
if let url = selectedFileURL {
Text("File: \(url.lastPathComponent)")
.foregroundColor(.secondary)
.font(.caption)
.truncationMode(.middle)
.padding(.horizontal)
}
Spacer()
}
.frame(minWidth: 200)
.navigationSplitViewColumnWidth(min: 200, ideal: 250)
} detail: {
if !markdownContent.isEmpty {
MarkdownRenderer(content: markdownContent)
.onAppear {
print("MarkdownRenderer appeared with content length: \(markdownContent.count)")
}
} else {
VStack {
Image(systemName: "doc.text")
.font(.system(size: 60))
.foregroundColor(.secondary)
Text("Select a markdown file to preview")
.foregroundColor(.secondary)
.padding()
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
}
}
.navigationTitle("Markdown Viewer")
}
private func openFile() {
let panel = NSOpenPanel()
panel.allowsMultipleSelection = false
panel.canChooseDirectories = false
panel.canChooseFiles = true
panel.allowedContentTypes = [UTType.plainText, UTType(filenameExtension: "md")!]
if panel.runModal() == .OK {
if let url = panel.url {
selectedFileURL = url
loadMarkdownFile(from: url)
}
}
}
private func loadMarkdownFile(from url: URL) {
do {
let content = try String(contentsOf: url, encoding: .utf8)
print("File loaded successfully, content length: \(content.count)")
print("First 100 characters: \(String(content.prefix(100)))")
markdownContent = content
} catch {
print("Error reading file: \(error)")
markdownContent = "Error loading file: \(error.localizedDescription)"
}
}
}
#Preview {
ContentView()
}