From swiftui
Enforces SwiftUI navigation best practices: prefers NavigationStack/SplitView over deprecated NavigationView, navigationDestination; optimizes alerts, sheets, and confirmation dialogs.
npx claudepluginhub fradser/dotclaude --plugin swiftuiswiftui-review/references/# Navigation and presentation - Use `NavigationStack` or `NavigationSplitView` as appropriate; flag all use of the deprecated `NavigationView`. - Strongly prefer to use `navigationDestination(for:)` to specify destinations; flag all use of the old `NavigationLink(destination:)` pattern where it should be replaced. - Never mix `navigationDestination(for:)` and `NavigationLink(destination:)` in the same navigation hierarchy; it causes significant problems. - `navigationDestination(for:)` must be registered once per data type; flag duplicates. ## Alerts, confirmation dialogs, and sheets - ...
/create-viewGenerates a SwiftUI view file with MVVM architecture, property wrappers, layouts, navigation elements, states, accessibility, dark mode support, previews, and documentation.
/auditAnalyzes iOS/Swift projects to suggest relevant audits or runs specified ones (e.g., memory, concurrency, accessibility, SwiftUI performance, security).
/convertConvert Claude-generated HTML design from URL or tarball path into SwiftUI View file in active Xcode workspace, with build, error fix, and preview diff.
Share bugs, ideas, or general feedback.
NavigationStack or NavigationSplitView as appropriate; flag all use of the deprecated NavigationView.navigationDestination(for:) to specify destinations; flag all use of the old NavigationLink(destination:) pattern where it should be replaced.navigationDestination(for:) and NavigationLink(destination:) in the same navigation hierarchy; it causes significant problems.navigationDestination(for:) must be registered once per data type; flag duplicates.confirmationDialog() to the user interface that triggers the dialog. This allows Liquid Glass animations to move from the correct source..alert("Dismiss Me", isPresented: $isShowingAlert) { }.sheet(item:) over sheet(isPresented:) so the optional is safely unwrapped.sheet(item:) with a view that accepts the item as its only initializer parameter, prefer sheet(item: $someItem, content: SomeView.init) over sheet(item: $someItem) { someItem in SomeView(item: someItem) }.