ListlessiOS/Extensions/ItemListView+NavigationHeader.swift (2882B)
1import SwiftUI
2
3extension ItemListView {
4 @ViewBuilder
5 private var finishButton: some View {
6 if #available(iOS 26.0, *) {
7 Button {
8 onFinishTutorial?()
9 } label: {
10 Text("Finish")
11 .font(.body)
12 .fontWeight(.semibold)
13 .padding(.horizontal, 12)
14 .padding(.vertical, 8)
15 .glassEffect(.clear)
16 }
17 .tint(.secondary)
18 } else {
19 Button("Finish") {
20 onFinishTutorial?()
21 }
22 .font(.body)
23 .fontWeight(.semibold)
24 .foregroundStyle(.secondary)
25 }
26 }
27
28 @ViewBuilder
29 private var overflowMenu: some View {
30 if #available(iOS 26.0, *) {
31 Menu {
32 overflowMenuItems
33 } label: {
34 Image(systemName: "ellipsis")
35 .font(.title2)
36 .padding()
37 .glassEffect(.clear)
38 }
39 .tint(.secondary)
40 } else {
41 Menu {
42 overflowMenuItems
43 } label: {
44 Image(systemName: "ellipsis.circle")
45 .font(.title2)
46 .foregroundStyle(.secondary)
47 .frame(width: 44, height: 44)
48 }
49 .buttonStyle(.plain)
50 }
51 }
52
53 @ViewBuilder
54 private var overflowMenuItems: some View {
55 Button {
56 showRenameAlert()
57 } label: {
58 Label("Rename List", systemImage: "pencil")
59 }
60 Button(role: .destructive) {
61 iState.isShowingDeleteAllAlert = true
62 } label: {
63 Label("Delete All", systemImage: "trash")
64 }
65 .disabled(items.isEmpty)
66 Divider()
67 Button {
68 showSettings()
69 } label: {
70 Label("Settings", systemImage: "gearshape")
71 }
72 }
73
74 var navigationHeader: some View {
75 HStack {
76 Text(isTutorial ? "Tutorial" : listName)
77 .font(.largeTitle)
78 .fontWeight(.bold)
79 Spacer()
80 if isTutorial {
81 finishButton
82 } else {
83 if syncMonitor.hasDiagnosticsIssue {
84 Button {
85 showSyncDiagnostics()
86 } label: {
87 Image(systemName: "exclamationmark.icloud")
88 .font(.title2)
89 .foregroundStyle(.red)
90 }
91 }
92 overflowMenu
93 }
94 }
95 .padding(.horizontal, 16)
96 .padding(.bottom, 8)
97 .contentShape(Rectangle())
98 .onTapGesture {
99 fState.selectedItemID = nil
100 focusedField = nil
101 }
102 }
103}