diff --git a/File Templates/MVVM-Reducer.xctemplate/TemplateInfo.plist b/File Templates/MVVM-Reducer.xctemplate/TemplateInfo.plist
index e9d583e..1f37485 100644
--- a/File Templates/MVVM-Reducer.xctemplate/TemplateInfo.plist
+++ b/File Templates/MVVM-Reducer.xctemplate/TemplateInfo.plist
@@ -7,9 +7,9 @@
Kind
Xcode.IDEFoundation.TextSubstitutionFileTemplateKind
Description
- A SwiftUI custom view with preview and library content provider
+ A SwiftUI screen with MVVM architecture using OversizeArchitecture
Summary
- SwiftUI View
+ MVVM Screen
SortOrder
1
AllowedTypes
@@ -19,9 +19,9 @@
Platforms
DefaultCompletionName
- ___VARIABLE_productName___Screen
+ Screen
MainTemplateFile
- ___VARIABLE_productName___Screen.swift
+ ___VARIABLE_productName___.swift
CFBundleIdentifier
Image
diff --git a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___.swift b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___.swift
new file mode 100644
index 0000000..68a9ec4
--- /dev/null
+++ b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___.swift
@@ -0,0 +1,10 @@
+// ___FILEHEADER___
+
+import OversizeArchitecture
+
+@Module
+public enum ___FILEBASENAMEASIDENTIFIER___: ModuleProtocol {}
+
+public struct ___VARIABLE_productName___Input: Sendable {}
+
+public struct ___VARIABLE_productName___Output: Sendable {}
diff --git a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___View.swift b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___View.swift
new file mode 100644
index 0000000..20e69b2
--- /dev/null
+++ b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___View.swift
@@ -0,0 +1,28 @@
+// ___FILEHEADER___
+
+import OversizeArchitecture
+import OversizeNavigation
+import OversizeUI
+import SwiftUI
+
+@View(module: ___VARIABLE_productName___.self)
+public struct ___FILEBASENAMEASIDENTIFIER___: ViewProtocol {
+ public var body: some View {
+ NavigationLayoutView("Title") {
+ content
+ } background: {
+ Color.backgroundSecondary
+ }
+ .toolbarTitleDisplayMode(.inline)
+ }
+
+ var content: some View {
+ Text("Content")
+ }
+}
+
+#Preview {
+ NavigationStack {
+ ___VARIABLE_productName___.build()
+ }
+}
diff --git a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___ViewModel.swift b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___ViewModel.swift
new file mode 100644
index 0000000..15ba665
--- /dev/null
+++ b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___ViewModel.swift
@@ -0,0 +1,6 @@
+// ___FILEHEADER___
+
+import OversizeArchitecture
+
+@ViewModel(module: ___VARIABLE_productName___.self)
+public actor ___FILEBASENAMEASIDENTIFIER___: ViewModelProtocol {}
diff --git a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___ViewState.swift b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___ViewState.swift
new file mode 100644
index 0000000..8bfe17d
--- /dev/null
+++ b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___/___VARIABLE_productName___ViewState.swift
@@ -0,0 +1,10 @@
+// ___FILEHEADER___
+
+import Observation
+import OversizeArchitecture
+import SwiftUI
+
+@Observable
+public final class ___FILEBASENAMEASIDENTIFIER___: ViewStateProtocol {
+ public init(input: ___VARIABLE_productName___.Input?) {}
+}
diff --git a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___Reducer.swift b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___Reducer.swift
deleted file mode 100644
index 398591e..0000000
--- a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___Reducer.swift
+++ /dev/null
@@ -1,17 +0,0 @@
-// ___FILEHEADER___
-
-import Foundation
-
-public final class ___FILEBASENAMEASIDENTIFIER___: Sendable {
- private let viewModel: ___VARIABLE_productName___ViewModel
-
- public init(viewModel: ___VARIABLE_productName___ViewModel) {
- self.viewModel = viewModel
- }
-
- func callAsFunction(_ event: ___VARIABLE_productName___ViewModel.InputEvent, function _: String = #function, file _: String = #file) {
- Task {
- await viewModel.handleEvent(event)
- }
- }
-}
diff --git a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___Screen.swift b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___Screen.swift
deleted file mode 100644
index 425de79..0000000
--- a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___Screen.swift
+++ /dev/null
@@ -1,32 +0,0 @@
-// ___FILEHEADER___
-
-import OversizeUI
-import SwiftUI
-
-public struct ___FILEBASENAMEASIDENTIFIER___: View {
-
- @State var viewState: ___VARIABLE_productName___ViewState
- let reducer: ___VARIABLE_productName___Reducer
-
- // Initial
- public init(viewState: ___VARIABLE_productName___ViewState, reducer: ___VARIABLE_productName___Reducer) {
- self.viewState = viewState
- self.reducer = reducer
- }
- public var body: some View {
- Text(/*@START_MENU_TOKEN@*/"Hello, World!"/*@END_MENU_TOKEN@*/)
- }
-}
-
-public extension ___FILEBASENAMEASIDENTIFIER___ {
- static func build() -> some View {
- let viewState = ___VARIABLE_productName___ViewState()
- let viewModel = ___VARIABLE_productName___ViewModel(state: viewState)
- let reducer = ___VARIABLE_productName___Reducer(viewModel: viewModel)
- return ___FILEBASENAMEASIDENTIFIER___(viewState: viewState, reducer: reducer)
- }
-}
-
-#Preview {
- ___FILEBASENAMEASIDENTIFIER___.build()
-}
diff --git a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___ViewModel.swift b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___ViewModel.swift
deleted file mode 100644
index 4f0264c..0000000
--- a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___ViewModel.swift
+++ /dev/null
@@ -1,32 +0,0 @@
-// ___FILEHEADER___
-
-import SwiftUI
-
-extension ___FILEBASENAMEASIDENTIFIER___ {
- enum InputEvent {
- case onAppear
- }
-}
-
-public actor ___FILEBASENAMEASIDENTIFIER___ {
- /// ViewState
- public var state: ___VARIABLE_productName___ViewState
-
- /// Initialization
- public init(state: ___VARIABLE_productName___ViewState) {
- self.state = state
- }
-
- func handleEvent(_ event: InputEvent) async {
- switch event {
- case .onAppear:
- await onAppear()
- }
- }
-}
-
-// MARK: - User Actions
-
-public extension ___FILEBASENAMEASIDENTIFIER___ {
- func onAppear() async { }
-}
diff --git a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___ViewState.swift b/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___ViewState.swift
deleted file mode 100644
index 3d15646..0000000
--- a/File Templates/MVVM-Reducer.xctemplate/___VARIABLE_productName___Screen/___VARIABLE_productName___ViewState.swift
+++ /dev/null
@@ -1,19 +0,0 @@
-// ___FILEHEADER___
-
-import SwiftUI
-
-@MainActor
-@Observable
-public final class ___FILEBASENAMEASIDENTIFIER___: Sendable {
-
- /// Initialization
- public init() {}
-}
-
-// MARK: - User Actions
-
-public extension ___FILEBASENAMEASIDENTIFIER___ {
- func update(_ handler: @Sendable @MainActor (___VARIABLE_productName___ViewState) -> Void) async {
- await MainActor.run { handler(self) }
- }
-}