|
@@ -2678,6 +2678,11 @@ private extension ViewController {
|
|
2678
|
contentStack.addArrangedSubview(topRow)
|
2678
|
contentStack.addArrangedSubview(topRow)
|
|
2679
|
topRow.widthAnchor.constraint(equalTo: contentStack.widthAnchor).isActive = true
|
2679
|
topRow.widthAnchor.constraint(equalTo: contentStack.widthAnchor).isActive = true
|
|
2680
|
|
2680
|
|
|
|
|
2681
|
+ let heroTopSpacer = NSView()
|
|
|
|
2682
|
+ heroTopSpacer.translatesAutoresizingMaskIntoConstraints = false
|
|
|
|
2683
|
+ heroTopSpacer.heightAnchor.constraint(equalToConstant: 18).isActive = true
|
|
|
|
2684
|
+ contentStack.addArrangedSubview(heroTopSpacer)
|
|
|
|
2685
|
+
|
|
2681
|
let hero = roundedContainer(cornerRadius: 16, color: palette.sectionCard)
|
2686
|
let hero = roundedContainer(cornerRadius: 16, color: palette.sectionCard)
|
|
2682
|
hero.translatesAutoresizingMaskIntoConstraints = false
|
2687
|
hero.translatesAutoresizingMaskIntoConstraints = false
|
|
2683
|
styleSurface(hero, borderColor: palette.inputBorder, borderWidth: 1, shadow: false)
|
2688
|
styleSurface(hero, borderColor: palette.inputBorder, borderWidth: 1, shadow: false)
|
|
@@ -2705,6 +2710,11 @@ private extension ViewController {
|
|
2705
|
heroSubtitle.bottomAnchor.constraint(equalTo: hero.bottomAnchor, constant: -16)
|
2710
|
heroSubtitle.bottomAnchor.constraint(equalTo: hero.bottomAnchor, constant: -16)
|
|
2706
|
])
|
2711
|
])
|
|
2707
|
|
2712
|
|
|
|
|
2713
|
+ let benefitsTopSpacer = NSView()
|
|
|
|
2714
|
+ benefitsTopSpacer.translatesAutoresizingMaskIntoConstraints = false
|
|
|
|
2715
|
+ benefitsTopSpacer.heightAnchor.constraint(equalToConstant: 40).isActive = true
|
|
|
|
2716
|
+ contentStack.addArrangedSubview(benefitsTopSpacer)
|
|
|
|
2717
|
+
|
|
2708
|
let benefitsRow = NSStackView()
|
2718
|
let benefitsRow = NSStackView()
|
|
2709
|
benefitsRow.translatesAutoresizingMaskIntoConstraints = false
|
2719
|
benefitsRow.translatesAutoresizingMaskIntoConstraints = false
|
|
2710
|
benefitsRow.orientation = .horizontal
|
2720
|
benefitsRow.orientation = .horizontal
|
|
@@ -2720,9 +2730,7 @@ private extension ViewController {
|
|
2720
|
|
2730
|
|
|
2721
|
let midTopSpacer = NSView()
|
2731
|
let midTopSpacer = NSView()
|
|
2722
|
midTopSpacer.translatesAutoresizingMaskIntoConstraints = false
|
2732
|
midTopSpacer.translatesAutoresizingMaskIntoConstraints = false
|
|
2723
|
- midTopSpacer.setContentHuggingPriority(.defaultLow, for: .vertical)
|
|
|
|
2724
|
- midTopSpacer.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
|
|
|
|
2725
|
- midTopSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: 8).isActive = true
|
|
|
|
|
|
2733
|
+ midTopSpacer.heightAnchor.constraint(equalToConstant: 6).isActive = true
|
|
2726
|
contentStack.addArrangedSubview(midTopSpacer)
|
2734
|
contentStack.addArrangedSubview(midTopSpacer)
|
|
2727
|
|
2735
|
|
|
2728
|
let plansRow = NSStackView()
|
2736
|
let plansRow = NSStackView()
|
|
@@ -2778,9 +2786,7 @@ private extension ViewController {
|
|
2778
|
|
2786
|
|
|
2779
|
let midBottomSpacer = NSView()
|
2787
|
let midBottomSpacer = NSView()
|
|
2780
|
midBottomSpacer.translatesAutoresizingMaskIntoConstraints = false
|
2788
|
midBottomSpacer.translatesAutoresizingMaskIntoConstraints = false
|
|
2781
|
- midBottomSpacer.setContentHuggingPriority(.defaultLow, for: .vertical)
|
|
|
|
2782
|
- midBottomSpacer.setContentCompressionResistancePriority(.defaultLow, for: .vertical)
|
|
|
|
2783
|
- midBottomSpacer.heightAnchor.constraint(greaterThanOrEqualToConstant: 18).isActive = true
|
|
|
|
|
|
2789
|
+ midBottomSpacer.heightAnchor.constraint(equalToConstant: 8).isActive = true
|
|
2784
|
contentStack.addArrangedSubview(midBottomSpacer)
|
2790
|
contentStack.addArrangedSubview(midBottomSpacer)
|
|
2785
|
|
2791
|
|
|
2786
|
let offer = textLabel(paywallOfferText(for: selectedPremiumPlan), font: NSFont.systemFont(ofSize: 13, weight: .semibold), color: palette.textPrimary)
|
2792
|
let offer = textLabel(paywallOfferText(for: selectedPremiumPlan), font: NSFont.systemFont(ofSize: 13, weight: .semibold), color: palette.textPrimary)
|
|
@@ -2841,7 +2847,6 @@ private extension ViewController {
|
|
2841
|
footerTopSpacer.translatesAutoresizingMaskIntoConstraints = false
|
2847
|
footerTopSpacer.translatesAutoresizingMaskIntoConstraints = false
|
|
2842
|
contentStack.addArrangedSubview(footerTopSpacer)
|
2848
|
contentStack.addArrangedSubview(footerTopSpacer)
|
|
2843
|
footerTopSpacer.heightAnchor.constraint(equalToConstant: 4).isActive = true
|
2849
|
footerTopSpacer.heightAnchor.constraint(equalToConstant: 4).isActive = true
|
|
2844
|
- midTopSpacer.heightAnchor.constraint(equalTo: midBottomSpacer.heightAnchor).isActive = true
|
|
|
|
2845
|
|
2850
|
|
|
2846
|
let footer = paywallFooterLinks()
|
2851
|
let footer = paywallFooterLinks()
|
|
2847
|
contentStack.addArrangedSubview(footer)
|
2852
|
contentStack.addArrangedSubview(footer)
|
|
@@ -2850,7 +2855,7 @@ private extension ViewController {
|
|
2850
|
NSLayoutConstraint.activate([
|
2855
|
NSLayoutConstraint.activate([
|
|
2851
|
contentStack.centerXAnchor.constraint(equalTo: panel.centerXAnchor),
|
2856
|
contentStack.centerXAnchor.constraint(equalTo: panel.centerXAnchor),
|
|
2852
|
contentStack.widthAnchor.constraint(equalToConstant: paywallLayoutWidth),
|
2857
|
contentStack.widthAnchor.constraint(equalToConstant: paywallLayoutWidth),
|
|
2853
|
- contentStack.topAnchor.constraint(equalTo: panel.topAnchor, constant: 30),
|
|
|
|
|
|
2858
|
+ contentStack.topAnchor.constraint(equalTo: panel.topAnchor, constant: 52),
|
|
2854
|
contentStack.bottomAnchor.constraint(equalTo: panel.bottomAnchor, constant: -10)
|
2859
|
contentStack.bottomAnchor.constraint(equalTo: panel.bottomAnchor, constant: -10)
|
|
2855
|
])
|
2860
|
])
|
|
2856
|
|
2861
|
|