Bladeren bron

Add premium sidebar CTA and center launch window.

Improve the main window UI by adding a compact Get Premium button pinned to the sidebar bottom and ensuring the app window opens centered on screen at launch.

Made-with: Cursor
huzaifahayat12 3 maanden geleden
bovenliggende
commit
e703c8a761
1 gewijzigde bestanden met toevoegingen van 48 en 1 verwijderingen
  1. 48 1
      meetings_app/ViewController.swift

+ 48 - 1
meetings_app/ViewController.swift

@@ -96,6 +96,7 @@ final class ViewController: NSViewController {
             var newFrame = window.frame
             newFrame.size = frameSize
             window.setFrame(newFrame, display: true)
+            window.center()
 
             window.minSize = window.frameRect(forContentRect: NSRect(origin: .zero, size: self.launchMinContentSize)).size
             self.installCenteredTitleIfNeeded(on: window)
@@ -156,6 +157,10 @@ private extension ViewController {
         updateTabAppearance()
     }
 
+    @objc private func premiumButtonClicked(_ sender: NSClickGestureRecognizer) {
+        showSimpleAlert(title: "Get Premium", message: "Premium features coming soon.")
+    }
+
     private func showSidebarPage(_ page: SidebarPage) {
         selectedSidebarPage = page
         updateSidebarAppearance()
@@ -374,8 +379,11 @@ private extension ViewController {
         menuStack.addArrangedSubview(settingsRow)
         sidebarRowViews[.settings] = settingsRow
 
+        let premiumButton = sidebarPremiumButton()
+
         sidebar.addSubview(titleRow)
         sidebar.addSubview(menuStack)
+        sidebar.addSubview(premiumButton)
 
         NSLayoutConstraint.activate([
             titleRow.leadingAnchor.constraint(equalTo: sidebar.leadingAnchor, constant: 16),
@@ -384,7 +392,12 @@ private extension ViewController {
 
             menuStack.leadingAnchor.constraint(equalTo: sidebar.leadingAnchor, constant: 12),
             menuStack.trailingAnchor.constraint(equalTo: sidebar.trailingAnchor, constant: -12),
-            menuStack.topAnchor.constraint(equalTo: titleRow.bottomAnchor, constant: 20)
+            menuStack.topAnchor.constraint(equalTo: titleRow.bottomAnchor, constant: 20),
+            menuStack.bottomAnchor.constraint(lessThanOrEqualTo: premiumButton.topAnchor, constant: -16),
+
+            premiumButton.leadingAnchor.constraint(equalTo: sidebar.leadingAnchor, constant: 12),
+            premiumButton.trailingAnchor.constraint(equalTo: sidebar.trailingAnchor, constant: -12),
+            premiumButton.bottomAnchor.constraint(equalTo: sidebar.bottomAnchor, constant: -14)
         ])
 
         for subview in menuStack.arrangedSubviews {
@@ -394,6 +407,40 @@ private extension ViewController {
         return sidebar
     }
 
+    func sidebarPremiumButton() -> NSView {
+        let button = HoverTrackingView()
+        button.translatesAutoresizingMaskIntoConstraints = false
+        button.wantsLayer = true
+        button.layer?.cornerRadius = 17
+        button.layer?.backgroundColor = palette.primaryBlue.cgColor
+        button.heightAnchor.constraint(equalToConstant: 34).isActive = true
+        styleSurface(button, borderColor: palette.primaryBlueBorder, borderWidth: 1, shadow: false)
+
+        let icon = textLabel("★", font: NSFont.systemFont(ofSize: 12, weight: .semibold), color: .white)
+        let title = textLabel("Get Premium", font: NSFont.systemFont(ofSize: 14, weight: .semibold), color: .white)
+        button.addSubview(icon)
+        button.addSubview(title)
+
+        NSLayoutConstraint.activate([
+            icon.leadingAnchor.constraint(equalTo: button.leadingAnchor, constant: 12),
+            icon.centerYAnchor.constraint(equalTo: button.centerYAnchor),
+            title.leadingAnchor.constraint(equalTo: icon.trailingAnchor, constant: 8),
+            title.centerYAnchor.constraint(equalTo: button.centerYAnchor),
+            title.trailingAnchor.constraint(lessThanOrEqualTo: button.trailingAnchor, constant: -12)
+        ])
+
+        let baseColor = palette.primaryBlue
+        let hoverColor = baseColor.blended(withFraction: 0.10, of: NSColor.white) ?? baseColor
+        button.onHoverChanged = { hovering in
+            button.layer?.backgroundColor = (hovering ? hoverColor : baseColor).cgColor
+        }
+        button.onHoverChanged?(false)
+
+        let click = NSClickGestureRecognizer(target: self, action: #selector(premiumButtonClicked(_:)))
+        button.addGestureRecognizer(click)
+        return button
+    }
+
     func makeMainPanel() -> NSView {
         let panel = NSView()
         panel.translatesAutoresizingMaskIntoConstraints = false