From 007d13be2f2b1f1a5aaa05201690e312292059ff Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Mon, 9 Feb 2026 15:34:28 -0500 Subject: [PATCH] feat: Adds quick calculation views, need to add buttons / links in navbar / home page. --- Public/css/output.css | 21 + .../App/Middleware/ViewRoute+middleware.swift | 2 +- Sources/ManualDCore/Routes/ViewRoute.swift | 47 ++ Sources/Styleguide/SVG.swift | 5 + Sources/ViewController/Interface.swift | 7 + Sources/ViewController/Live.swift | 38 +- .../EquipmentInfo/EquipmentInfoForm.swift | 1 - Sources/ViewController/Views/Navbar.swift | 11 +- .../Views/QuickCalc/Index.swift | 141 ++++++ Sources/ViewController/Views/TestPage.swift | 92 +++- .../ViewControllerTests.swift | 12 + .../ViewControllerTests/home.1.html | 9 +- .../ViewControllerTests/login.1.html | 3 +- .../ViewControllerTests/projectDetail.1.html | 28 +- .../ViewControllerTests/projectDetail.2.html | 28 +- .../ViewControllerTests/projectDetail.3.html | 28 +- .../ViewControllerTests/projectDetail.4.html | 28 +- .../ViewControllerTests/projectDetail.5.html | 28 +- .../ViewControllerTests/projectDetail.6.html | 445 +++--------------- .../ViewControllerTests/projectIndex.1.html | 13 +- .../ViewControllerTests/quickCalc.1.html | 77 +++ .../ViewControllerTests/signup.1.html | 3 +- .../ViewControllerTests/userProfile.1.html | 7 +- 23 files changed, 584 insertions(+), 490 deletions(-) create mode 100644 Sources/ViewController/Views/QuickCalc/Index.swift create mode 100644 Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/quickCalc.1.html diff --git a/Public/css/output.css b/Public/css/output.css index 0622117..251bf04 100644 --- a/Public/css/output.css +++ b/Public/css/output.css @@ -15,6 +15,8 @@ --color-black: #000; --color-white: #fff; --spacing: 0.25rem; + --container-lg: 32rem; + --container-xl: 36rem; --text-xs: 0.75rem; --text-xs--line-height: calc(1 / 0.75); --text-sm: 0.875rem; @@ -5302,6 +5304,9 @@ } } } + .mx-10 { + margin-inline: calc(var(--spacing) * 10); + } .mx-20 { margin-inline: calc(var(--spacing) * 20); } @@ -5618,6 +5623,9 @@ .me-6 { margin-inline-end: calc(var(--spacing) * 6); } + .me-10 { + margin-inline-end: calc(var(--spacing) * 10); + } .me-\[140px\] { margin-inline-end: 140px; } @@ -6699,6 +6707,12 @@ .w-px { width: 1px; } + .max-w-lg { + max-width: var(--container-lg); + } + .max-w-xl { + max-width: var(--container-xl); + } .min-w-0 { min-width: calc(var(--spacing) * 0); } @@ -8179,6 +8193,10 @@ font-size: var(--text-3xl); line-height: var(--tw-leading, var(--text-3xl--line-height)); } + .text-4xl { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } .text-5xl { font-size: var(--text-5xl); line-height: var(--tw-leading, var(--text-5xl--line-height)); @@ -8761,6 +8779,9 @@ color: var(--color-warning); } } + .text-accent { + color: var(--color-accent); + } .text-base-content { color: var(--color-base-content); } diff --git a/Sources/App/Middleware/ViewRoute+middleware.swift b/Sources/App/Middleware/ViewRoute+middleware.swift index 42e5418..a38fe45 100644 --- a/Sources/App/Middleware/ViewRoute+middleware.swift +++ b/Sources/App/Middleware/ViewRoute+middleware.swift @@ -14,7 +14,7 @@ private let viewRouteMiddleware: [any Middleware] = [ extension SiteRoute.View { var middleware: [any Middleware]? { switch self { - case .home, .login, .signup, .test: + case .home, .login, .signup, .test, .quickCalc: return nil case .project, .user: return viewRouteMiddleware diff --git a/Sources/ManualDCore/Routes/ViewRoute.swift b/Sources/ManualDCore/Routes/ViewRoute.swift index c065ea3..6f824ca 100644 --- a/Sources/ManualDCore/Routes/ViewRoute.swift +++ b/Sources/ManualDCore/Routes/ViewRoute.swift @@ -12,6 +12,7 @@ extension SiteRoute { case login(LoginRoute) case signup(SignupRoute) case project(ProjectRoute) + case quickCalc(QuickCalcRoute) case user(UserRoute) //FIX: Remove. case test @@ -33,6 +34,9 @@ extension SiteRoute { Route(.case(Self.project)) { SiteRoute.View.ProjectRoute.router } + Route(.case(Self.quickCalc)) { + SiteRoute.View.QuickCalcRoute.router + } Route(.case(Self.user)) { SiteRoute.View.UserRoute.router } @@ -986,6 +990,49 @@ extension SiteRoute.View.UserRoute { } } +extension SiteRoute.View { + public enum QuickCalcRoute: Equatable, Sendable { + case index + case submit(Form) + + public static let rootPath = "duct-size" + + static let router = OneOf { + Route(.case(Self.index)) { + Path { rootPath } + Method.get + } + Route(.case(Self.submit)) { + Path { rootPath } + Method.post + Body { + FormData { + Field("cfm") { Int.parser() } + Field("frictionRate") { Double.parser() } + Optionally { + Field("height") { Int.parser() } + } + } + .map(.memberwise(Form.init)) + } + } + } + + public struct Form: Equatable, Sendable { + + public let cfm: Int + public let frictionRate: Double + public let height: Int? + + public init(cfm: Int, frictionRate: Double, height: Int? = nil) { + self.cfm = cfm + self.frictionRate = frictionRate + self.height = height + } + } + } +} + extension PageRequest: @retroactive Equatable { public static func == (lhs: FluentKit.PageRequest, rhs: FluentKit.PageRequest) -> Bool { lhs.page == rhs.page && lhs.per == rhs.per diff --git a/Sources/Styleguide/SVG.swift b/Sources/Styleguide/SVG.swift index 4c225ef..34cca06 100644 --- a/Sources/Styleguide/SVG.swift +++ b/Sources/Styleguide/SVG.swift @@ -17,6 +17,7 @@ extension SVG { public enum Key: Sendable { case badgeCheck case ban + case calculator case chevronDown case chevronRight case chevronsLeft @@ -48,6 +49,10 @@ extension SVG { return """ """ + case .calculator: + return """ + + """ case .chevronDown: return """ diff --git a/Sources/ViewController/Interface.swift b/Sources/ViewController/Interface.swift index c7c974d..50be1fb 100644 --- a/Sources/ViewController/Interface.swift +++ b/Sources/ViewController/Interface.swift @@ -53,6 +53,13 @@ extension ViewController: DependencyKey { extension ViewController.Request { + var isLoggedIn: Bool { + if (try? currentUser()) != nil { + return true + } + return false + } + func currentUser() throws -> User { @Dependency(\.auth.currentUser) var currentUser return try currentUser() diff --git a/Sources/ViewController/Live.swift b/Sources/ViewController/Live.swift index 533b7cf..f43e8e5 100644 --- a/Sources/ViewController/Live.swift +++ b/Sources/ViewController/Live.swift @@ -3,6 +3,7 @@ import DatabaseClient import Dependencies import Elementary import Foundation +import ManualDClient import ManualDCore import PdfClient import ProjectClient @@ -38,7 +39,9 @@ extension ViewController.Request { // } // } // return try! await pdfClient.html(.mock()) - return EmptyHTML() + return await view { + TestPage() + } case .login(let route): switch route { case .index(let next): @@ -93,6 +96,9 @@ extension ViewController.Request { case .project(let route): return await route.renderView(on: self) + case .quickCalc(let route): + return await route.renderView(on: self) + case .user(let route): return await route.renderView(on: self) } @@ -705,3 +711,33 @@ extension SiteRoute.View.UserRoute.Profile { } } } + +extension SiteRoute.View.QuickCalcRoute { + + func renderView( + on request: ViewController.Request + ) async -> AnySendableHTML { + @Dependency(\.manualD) var manualD + + switch self { + case .index: + return await request.view { + QuickCalcView( + isLoggedIn: request.isLoggedIn + ) + } + case .submit(let form): + return await ResultView { + let ductSize = try await manualD.ductSize(cfm: form.cfm, frictionRate: form.frictionRate) + var rectangularSize: ManualDClient.RectangularSize? = nil + if let height = form.height { + rectangularSize = try await manualD.rectangularSize( + round: ductSize.finalSize, height: height) + } + return (ductSize, rectangularSize) + } onSuccess: { (ductSize, rectangularSize) in + QuickCalcView.Result(ductSize: ductSize, rectangularSize: rectangularSize) + } + } + } +} diff --git a/Sources/ViewController/Views/EquipmentInfo/EquipmentInfoForm.swift b/Sources/ViewController/Views/EquipmentInfo/EquipmentInfoForm.swift index 55bea9c..8e0bdbd 100644 --- a/Sources/ViewController/Views/EquipmentInfo/EquipmentInfoForm.swift +++ b/Sources/ViewController/Views/EquipmentInfo/EquipmentInfoForm.swift @@ -2,7 +2,6 @@ import Elementary import ManualDCore import Styleguide -// TODO: Have form hold onto equipment info model to edit. struct EquipmentInfoForm: HTML, Sendable { static let id = "equipmentForm" diff --git a/Sources/ViewController/Views/Navbar.swift b/Sources/ViewController/Views/Navbar.swift index 3c299e9..feefafe 100644 --- a/Sources/ViewController/Views/Navbar.swift +++ b/Sources/ViewController/Views/Navbar.swift @@ -14,6 +14,13 @@ struct Navbar: HTML, Sendable { self.userProfile = userProfile } + var homeRoute: SiteRoute.View { + if userProfile { + return .project(.index) + } + return .home + } + var body: some HTML { nav( .class( @@ -37,7 +44,7 @@ struct Navbar: HTML, Sendable { a( .class("flex w-fit h-fit text-xl items-end px-4 py-2"), - .href(route: .project(.index)) + .href(route: homeRoute) ) { img( .src("/images/mand_logo_sm.webp"), @@ -48,11 +55,11 @@ struct Navbar: HTML, Sendable { .tooltip("Home", position: .right) } if userProfile { - // TODO: Make dropdown div(.class("flex-none dropdown dropdown-end dropdown-hover")) { div(.class("btn m-1"), .tabindex(0), .role("button")) { SVG(.circleUser) } + .navButton() ul( .tabindex(-1), .class("dropdown-content menu bg-base-200 rounded-box z-1 w-52 py-2 shadow-sm") diff --git a/Sources/ViewController/Views/QuickCalc/Index.swift b/Sources/ViewController/Views/QuickCalc/Index.swift new file mode 100644 index 0000000..eb79c32 --- /dev/null +++ b/Sources/ViewController/Views/QuickCalc/Index.swift @@ -0,0 +1,141 @@ +import Dependencies +import Elementary +import ElementaryHTMX +import Foundation +import ManualDClient +import ManualDCore +import Styleguide + +struct QuickCalcView: HTML, Sendable { + + let isLoggedIn: Bool + + init(isLoggedIn: Bool = false) { + self.isLoggedIn = isLoggedIn + } + + var body: some HTML { + div { + Navbar( + sidebarToggle: false, + userProfile: isLoggedIn + ) + div(.class("flex justify-center items-center px-10")) { + div( + .class( + """ + bg-base-300 rounded-3xl shadow-3xl + p-6 w-full + """ + ) + ) { + div(.class("flex space-x-6 items-center text-4xl")) { + SVG(.calculator) + h1(.class("text-4xl font-bold me-10")) { + "Duct Size" + } + } + + p(.class("text-primary font-bold italic")) { + "Calculate duct size for the given parameters" + } + + form( + .class("space-y-4 mt-6"), + .hx.post(route: .quickCalc(.index)), + .hx.target("#\(Result.id)"), + .hx.swap(.outerHTML) + ) { + LabeledInput( + "CFM", + .name("cfm"), + .type(.number), + .placeholder("1000"), + .required, + .autofocus + ) + + LabeledInput( + "Friction Rate", + .name("frictionRate"), + .value("0.06"), + .required, + .type(.number), + .min("0.01"), + .step("0.01") + ) + + LabeledInput( + "Height", + .name("height"), + .type(.number), + .placeholder("Height (Optional)"), + ) + + SubmitButton() + .attributes(.class("btn-block mt-6")) + } + + // Populate when submitted + div(.id(Result.id)) {} + } + } + } + } + + struct Result: HTML, Sendable { + static let id = "resultView" + + let ductSize: ManualDClient.DuctSize + let rectangularSize: ManualDClient.RectangularSize? + + var body: some HTML { + div( + .id(Self.id), + .class( + """ + border-2 border-accent rounded-lg shadow-lg + w-full p-6 my-6 + """ + ) + ) { + div(.class("flex justify-between p-4")) { + h2(.class("text-3xl font-bold")) { "Result" } + button( + .class("btn btn-primary"), + .hx.get(route: .quickCalc(.index)), + .hx.target("body"), + .hx.swap(.outerHTML) + ) { + "Reset" + } + .tooltip("Reset form", position: .left) + } + + table(.class("table table-zebra text-lg font-bold")) { + tbody { + tr { + td { Label("Calculated Size") } + td { Number(ductSize.calculatedSize, digits: 2) } + } + tr { + td { Label("Final Size") } + td { Number(ductSize.finalSize) } + } + tr { + td { Label("Flex Size") } + td { Number(ductSize.flexSize) } + } + if let rectangularSize { + tr { + td { Label("Rectangular Size") } + td { "\(rectangularSize.width) x \(rectangularSize.height)" } + } + } + } + } + + } + } + } +} diff --git a/Sources/ViewController/Views/TestPage.swift b/Sources/ViewController/Views/TestPage.swift index f286e7b..b979360 100644 --- a/Sources/ViewController/Views/TestPage.swift +++ b/Sources/ViewController/Views/TestPage.swift @@ -1,6 +1,7 @@ import Dependencies import Elementary import Foundation +import ManualDClient import ManualDCore import Styleguide @@ -8,24 +9,77 @@ struct TestPage: HTML, Sendable { // let ductSizes: DuctSizes var body: some HTML { - div {} - // div(.class("overflow-auto")) { - // DuctSizingView.TrunkTable(ductSizes: ductSizes) - // - // Row { - // h2(.class("text-2xl font-bold")) { "Trunk Sizes" } - // - // PlusButton() - // .attributes( - // .class("me-6"), - // .showModal(id: TrunkSizeForm.id()) - // ) - // } - // .attributes(.class("mt-6")) - // - // div(.class("divider -mt-2")) {} - // - // DuctSizingView.TrunkTable(ductSizes: ductSizes) - // } + div { + Navbar(sidebarToggle: false, userProfile: false) + div(.class("flex justify-center items-center px-10")) { + div( + .class( + """ + bg-base-300 rounded-3xl shadow-3xl + p-6 w-full + """ + ) + ) { + div(.class("flex space-x-6 items-center text-4xl")) { + SVG(.calculator) + h1(.class("text-4xl font-bold me-10")) { + "Duct Size" + } + } + + p(.class("text-primary font-bold italic")) { + "Calculate duct size for the given parameters" + } + + form( + .class("space-y-4 mt-6"), + .action("#") + ) { + LabeledInput( + "CFM", + .required, + .type(.number), + .placeholder("1000"), + .name("cfm") + ) + + LabeledInput( + "Friction Rate", + .value("0.06"), + .required, + .type(.number), + .name("frictionRate") + ) + + LabeledInput( + "Height", + .required, + .type(.number), + .placeholder("Height (Optional)"), + .name("frictionRate") + ) + + SubmitButton() + .attributes(.class("btn-block mt-6")) + } + } + + // Populate when submitted + div(.id(Result.id)) {} + } + } + } + + struct Result: HTML, Sendable { + static let id = "resultView" + + let ductSize: ManualDClient.DuctSize + let rectangularSize: ManualDClient.RectangularSize? + + var body: some HTML { + div(.id(Self.id)) { + + } + } } } diff --git a/Tests/ViewControllerTests/ViewControllerTests.swift b/Tests/ViewControllerTests/ViewControllerTests.swift index c9afb05..d7829a4 100644 --- a/Tests/ViewControllerTests/ViewControllerTests.swift +++ b/Tests/ViewControllerTests/ViewControllerTests.swift @@ -27,6 +27,18 @@ struct ViewControllerTests { } } + @Test + func quickCalc() async throws { + try await withDependencies { + $0.viewController = .liveValue + $0.auth = .failing + } operation: { + @Dependency(\.viewController) var viewController + let view = try await viewController.view(.test(.quickCalc(.index))) + assertSnapshot(of: view, as: .html) + } + } + @Test func login() async throws { try await withDependencies { diff --git a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/home.1.html b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/home.1.html index ea624a0..dc8e5fe 100644 --- a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/home.1.html +++ b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/home.1.html @@ -18,6 +18,7 @@ + @@ -28,11 +29,11 @@ -
+
- +
- Open source residential duct design program + Open source residential duct design program

Manual-D™ speed sheet, but on the web!

@@ -102,7 +103,7 @@ text-8xl font-bold my-auto space-2"> bg-base-300 text-base-content p-4">

diff --git a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/login.1.html b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/login.1.html index a6dc2a8..9e56b05 100644 --- a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/login.1.html +++ b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/login.1.html @@ -18,6 +18,7 @@ + @@ -28,7 +29,7 @@ -
+
@@ -210,10 +211,9 @@ is-drawer-close:grid-cols-1">
-
+
Friction Rate
-
@@ -245,7 +245,7 @@ is-drawer-close:justify-center is-drawer-close:mx-auto is-drawer-close:space-y-2 bg-base-300 text-base-content p-4">
diff --git a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.2.html b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.2.html index 28a6303..524851d 100644 --- a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.2.html +++ b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.2.html @@ -18,6 +18,7 @@ + @@ -28,7 +29,7 @@ -
+
@@ -42,8 +43,12 @@ Duct Calc
-
-
+
@@ -564,10 +569,9 @@ is-drawer-close:grid-cols-1">
-
+
Project
-
@@ -583,10 +587,9 @@ is-drawer-close:grid-cols-1">
-
+
Rooms
-
@@ -602,10 +605,9 @@ is-drawer-close:grid-cols-1">
-
+
Equipment
-
@@ -621,10 +623,9 @@ is-drawer-close:grid-cols-1">
-
+
T.E.L.
-
@@ -640,10 +641,9 @@ is-drawer-close:grid-cols-1">
-
+
Friction Rate
-
@@ -675,7 +675,7 @@ is-drawer-close:justify-center is-drawer-close:mx-auto is-drawer-close:space-y-2 bg-base-300 text-base-content p-4"> diff --git a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.3.html b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.3.html index 58c477c..5514592 100644 --- a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.3.html +++ b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.3.html @@ -18,6 +18,7 @@ + @@ -28,7 +29,7 @@ -
+
@@ -42,8 +43,12 @@ Duct Calc
-
-
+
@@ -119,10 +124,9 @@ is-drawer-close:grid-cols-1">
-
+
Project
-
@@ -138,10 +142,9 @@ is-drawer-close:grid-cols-1">
-
+
Rooms
-
@@ -157,10 +160,9 @@ is-drawer-close:grid-cols-1">
-
+
Equipment
-
@@ -176,10 +178,9 @@ is-drawer-close:grid-cols-1">
-
+
T.E.L.
-
@@ -195,10 +196,9 @@ is-drawer-close:grid-cols-1">
-
+
Friction Rate
-
@@ -230,7 +230,7 @@ is-drawer-close:justify-center is-drawer-close:mx-auto is-drawer-close:space-y-2 bg-base-300 text-base-content p-4"> diff --git a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.4.html b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.4.html index 60cfcad..22eefd2 100644 --- a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.4.html +++ b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.4.html @@ -18,6 +18,7 @@ + @@ -28,7 +29,7 @@ -
+
@@ -42,8 +43,12 @@ Duct Calc
-
-
+
@@ -249,10 +254,9 @@ is-drawer-close:grid-cols-1">
-
+
Project
-
@@ -268,10 +272,9 @@ is-drawer-close:grid-cols-1">
-
+
Rooms
-
@@ -287,10 +290,9 @@ is-drawer-close:grid-cols-1">
-
+
Equipment
-
@@ -306,10 +308,9 @@ is-drawer-close:grid-cols-1">
-
+
T.E.L.
-
@@ -325,10 +326,9 @@ is-drawer-close:grid-cols-1">
-
+
Friction Rate
-
@@ -360,7 +360,7 @@ is-drawer-close:justify-center is-drawer-close:mx-auto is-drawer-close:space-y-2 bg-base-300 text-base-content p-4"> diff --git a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.5.html b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.5.html index 12297c1..8184b2c 100644 --- a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.5.html +++ b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.5.html @@ -18,6 +18,7 @@ + @@ -28,7 +29,7 @@ -
+
@@ -42,8 +43,12 @@ Duct Calc
-
-
+
@@ -325,10 +330,9 @@ is-drawer-close:grid-cols-1">
-
+
Project
-
@@ -344,10 +348,9 @@ is-drawer-close:grid-cols-1">
-
+
Rooms
-
@@ -363,10 +366,9 @@ is-drawer-close:grid-cols-1">
-
+
Equipment
-
@@ -382,10 +384,9 @@ is-drawer-close:grid-cols-1">
-
+
T.E.L.
-
@@ -401,10 +402,9 @@ is-drawer-close:grid-cols-1">
-
+
Friction Rate
-
@@ -436,7 +436,7 @@ is-drawer-close:justify-center is-drawer-close:mx-auto is-drawer-close:space-y-2 bg-base-300 text-base-content p-4"> diff --git a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.6.html b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.6.html index 9d10a87..7577bf3 100644 --- a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.6.html +++ b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectDetail.6.html @@ -18,6 +18,7 @@ + @@ -28,7 +29,7 @@ -
+
@@ -42,8 +43,12 @@ Duct Calc
-
-
+
@@ -926,6 +931,7 @@ p-6 w-full">
+ Name +

Associated Supply Runs

-
-
-
-
-

Bed-1

-
-
- -
-
-
-
-
-
-

Entry

-
-
- -
-
-
-
-
-
-

Entry

-
-
- -
-
-
-
-
-
-

Family Room

-
-
- -
-
-
-
-
-
-

Family Room

-
-
- -
-
-
-
-
-
-

Family Room

-
-
- -
-
-
-
-
-
-

Kitchen

-
-
- -
-
-
-
-
-
-

Kitchen

-
-
- -
-
-
-
-
-
-

Living Room

-
-
- -
-
-
-
-
-
-

Living Room

-
-
- -
-
-
-
-
-
-

Master

-
-
- -
-
-
-
-
-
-

Master

-
-
- -
-
-
-
+ + + + + + + + + + + + + +
@@ -1128,6 +1026,7 @@ p-6 w-full"> + Name +

Associated Supply Runs

-
-
-
-
-

Bed-1

-
-
- -
-
-
-
-
-
-

Entry

-
-
- -
-
-
-
-
-
-

Entry

-
-
- -
-
-
-
-
-
-

Family Room

-
-
- -
-
-
-
-
-
-

Family Room

-
-
- -
-
-
-
-
-
-

Family Room

-
-
- -
-
-
-
-
-
-

Kitchen

-
-
- -
-
-
-
-
-
-

Kitchen

-
-
- -
-
-
-
-
-
-

Living Room

-
-
- -
-
-
-
-
-
-

Living Room

-
-
- -
-
-
-
-
-
-

Master

-
-
- -
-
-
-
-
-
-

Master

-
-
- -
-
-
-
+ + + + + + + + + + + + + +
@@ -1278,6 +1069,7 @@ p-6 w-full"> + Name +

Associated Supply Runs

-
-
-
-
-

Bed-1

-
-
- -
-
-
-
-
-
-

Entry

-
-
- -
-
-
-
-
-
-

Entry

-
-
- -
-
-
-
-
-
-

Family Room

-
-
- -
-
-
-
-
-
-

Family Room

-
-
- -
-
-
-
-
-
-

Family Room

-
-
- -
-
-
-
-
-
-

Kitchen

-
-
- -
-
-
-
-
-
-

Kitchen

-
-
- -
-
-
-
-
-
-

Living Room

-
-
- -
-
-
-
-
-
-

Living Room

-
-
- -
-
-
-
-
-
-

Master

-
-
- -
-
-
-
-
-
-

Master

-
-
- -
-
-
-
+ + + + + + + + + + + + + +
@@ -1444,10 +1128,9 @@ is-drawer-close:grid-cols-1">
-
+
Project
-
@@ -1463,10 +1146,9 @@ is-drawer-close:grid-cols-1">
-
+
Rooms
-
@@ -1482,10 +1164,9 @@ is-drawer-close:grid-cols-1">
-
+
Equipment
-
@@ -1501,10 +1182,9 @@ is-drawer-close:grid-cols-1">
-
+
T.E.L.
-
@@ -1520,10 +1200,9 @@ is-drawer-close:grid-cols-1">
-
+
Friction Rate
-
@@ -1555,7 +1234,7 @@ is-drawer-close:justify-center is-drawer-close:mx-auto is-drawer-close:space-y-2 bg-base-300 text-base-content p-4"> diff --git a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectIndex.1.html b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectIndex.1.html index fec8abc..a21423e 100644 --- a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectIndex.1.html +++ b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/projectIndex.1.html @@ -18,6 +18,7 @@ + @@ -28,7 +29,7 @@ -
+
-
-
+
@@ -105,7 +110,7 @@ p-6 w-full pb-6"> bg-base-300 text-base-content p-4">
diff --git a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/quickCalc.1.html b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/quickCalc.1.html new file mode 100644 index 0000000..e9ec499 --- /dev/null +++ b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/quickCalc.1.html @@ -0,0 +1,77 @@ + + + + Duct Calc + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+
+ +

Duct Size

+
+

Calculate duct size for the given parameters

+
+ + +
+
+
+
+
+
+
+
+ +
+
+
+ + \ No newline at end of file diff --git a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/signup.1.html b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/signup.1.html index a6dc2a8..9e56b05 100644 --- a/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/signup.1.html +++ b/Tests/ViewControllerTests/__Snapshots__/ViewControllerTests/signup.1.html @@ -18,6 +18,7 @@ + @@ -28,7 +29,7 @@ -
+