diff --git a/Packages/ZettelKit/Package.swift b/Packages/ZettelKit/Package.swift
index 8fb411f..58243cb 100644
--- a/Packages/ZettelKit/Package.swift
+++ b/Packages/ZettelKit/Package.swift
@@ -5,7 +5,7 @@ import PackageDescription
let package = Package(
name: "ZettelKit",
platforms: [
- .macOS(.v26),
+ .macOS(.v15),
.iOS(.v26)
],
products: [
diff --git a/Zettel.xcodeproj/project.pbxproj b/Zettel.xcodeproj/project.pbxproj
index cc548db..f66457d 100644
--- a/Zettel.xcodeproj/project.pbxproj
+++ b/Zettel.xcodeproj/project.pbxproj
@@ -254,7 +254,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 26.0;
+ MACOSX_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.2;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "";
@@ -496,7 +496,7 @@
"$(inherited)",
"@executable_path/../Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 26.0;
+ MACOSX_DEPLOYMENT_TARGET = 15.0;
MARKETING_VERSION = 1.2;
PRODUCT_BUNDLE_IDENTIFIER = "";
PRODUCT_NAME = Zettel;
diff --git a/ZettelMac/Info.plist b/ZettelMac/Info.plist
index 7203bbf..83e786c 100644
--- a/ZettelMac/Info.plist
+++ b/ZettelMac/Info.plist
@@ -24,7 +24,7 @@
LSMinimumSystemVersion
- 26.0
+ 15.0
ITSAppUsesNonExemptEncryption
diff --git a/ZettelMac/Preferences/MacDockIconPreference.swift b/ZettelMac/Preferences/MacDockIconPreference.swift
index 267db5a..aba6d03 100644
--- a/ZettelMac/Preferences/MacDockIconPreference.swift
+++ b/ZettelMac/Preferences/MacDockIconPreference.swift
@@ -36,7 +36,7 @@ enum MacDockIconPreference {
let activationPolicy: NSApplication.ActivationPolicy = shouldHide ? .accessory : .regular
let didSet = NSApplication.shared.setActivationPolicy(activationPolicy)
if !didSet {
- let currentIsHidden = NSApplication.shared.activationPolicy == .accessory
+ let currentIsHidden = NSApplication.shared.activationPolicy() == .accessory
UserDefaults.standard.set(currentIsHidden, forKey: storageKey)
}
}
diff --git a/ZettelMac/Views/TagAutocompletePanel.swift b/ZettelMac/Views/TagAutocompletePanel.swift
index 9dde9e9..a541edf 100644
--- a/ZettelMac/Views/TagAutocompletePanel.swift
+++ b/ZettelMac/Views/TagAutocompletePanel.swift
@@ -99,7 +99,7 @@ struct TagSuggestionsView: View {
}
}
.padding(.vertical, 4)
- .glassEffect(in: .rect(cornerRadius: 10))
+ .modifier(GlassEffectFallback(cornerRadius: 10))
// No SwiftUI shadow — NSHostingView clips it to a hard rect.
// p.hasShadow = true on the NSPanel gives the correct shaped shadow.
}
@@ -157,6 +157,21 @@ private struct TagSuggestionRow: View {
}
}
+// MARK: - Glass Effect Fallback
+
+/// Applies `.glassEffect` on macOS 26+, falls back to `.background(.ultraThinMaterial)` on earlier versions.
+private struct GlassEffectFallback: ViewModifier {
+ let cornerRadius: CGFloat
+
+ func body(content: Content) -> some View {
+ if #available(macOS 26, *) {
+ content.glassEffect(in: .rect(cornerRadius: cornerRadius))
+ } else {
+ content.background(.ultraThinMaterial, in: .rect(cornerRadius: cornerRadius))
+ }
+ }
+}
+
// MARK: - Controller
/// Manages the floating `NSPanel` that hosts `TagSuggestionsView`.
diff --git a/ZettelMac/Window/ZettelWindowManager.swift b/ZettelMac/Window/ZettelWindowManager.swift
index b9efd58..48be4e7 100644
--- a/ZettelMac/Window/ZettelWindowManager.swift
+++ b/ZettelMac/Window/ZettelWindowManager.swift
@@ -215,9 +215,11 @@ final class ZettelWindowManager: NSObject, ObservableObject {
panel.titlebarAppearsTransparent = true
panel.titleVisibility = .hidden
- // Transparent background for Liquid Glass
- panel.isOpaque = false
- panel.backgroundColor = .clear
+ // Transparent background for Liquid Glass (macOS 26+)
+ if #available(macOS 26, *) {
+ panel.isOpaque = false
+ panel.backgroundColor = .clear
+ }
// Set min size
panel.minSize = NSSize(width: 420, height: 380)