feat: Updates sidebar styles.

This commit is contained in:
2026-01-11 10:35:49 -05:00
parent a7f40efba9
commit 51edff5a8a
5 changed files with 298 additions and 104 deletions

View File

@@ -10,11 +10,14 @@
--color-red-500: oklch(63.7% 0.237 25.331); --color-red-500: oklch(63.7% 0.237 25.331);
--color-red-600: oklch(57.7% 0.245 27.325); --color-red-600: oklch(57.7% 0.245 27.325);
--color-green-400: oklch(79.2% 0.209 151.711); --color-green-400: oklch(79.2% 0.209 151.711);
--color-blue-400: oklch(70.7% 0.165 254.624);
--color-indigo-600: oklch(51.1% 0.262 276.966); --color-indigo-600: oklch(51.1% 0.262 276.966);
--color-slate-300: oklch(86.9% 0.022 252.894); --color-slate-300: oklch(86.9% 0.022 252.894);
--color-slate-900: oklch(20.8% 0.042 265.755); --color-slate-900: oklch(20.8% 0.042 265.755);
--color-gray-200: oklch(92.8% 0.006 264.531); --color-gray-200: oklch(92.8% 0.006 264.531);
--color-gray-300: oklch(87.2% 0.01 258.338);
--color-gray-400: oklch(70.7% 0.022 261.325); --color-gray-400: oklch(70.7% 0.022 261.325);
--color-gray-900: oklch(21% 0.034 264.665);
--color-black: #000; --color-black: #000;
--color-white: #fff; --color-white: #fff;
--spacing: 0.25rem; --spacing: 0.25rem;
@@ -6778,6 +6781,9 @@
.justify-end { .justify-end {
justify-content: flex-end; justify-content: flex-end;
} }
.gap-1 {
gap: calc(var(--spacing) * 1);
}
.gap-2 { .gap-2 {
gap: calc(var(--spacing) * 2); gap: calc(var(--spacing) * 2);
} }
@@ -7104,6 +7110,10 @@
border-bottom-style: var(--tw-border-style); border-bottom-style: var(--tw-border-style);
border-bottom-width: 1px; border-bottom-width: 1px;
} }
.border-b-1 {
border-bottom-style: var(--tw-border-style);
border-bottom-width: 1px;
}
.badge-dash { .badge-dash {
@layer daisyui.l1.l2 { @layer daisyui.l1.l2 {
color: var(--badge-color); color: var(--badge-color);
@@ -7670,6 +7680,9 @@
} }
} }
} }
.p-2 {
padding: calc(var(--spacing) * 2);
}
.p-4 { .p-4 {
padding: calc(var(--spacing) * 4); padding: calc(var(--spacing) * 4);
} }
@@ -8452,6 +8465,9 @@
.text-error { .text-error {
color: var(--color-error); color: var(--color-error);
} }
.text-gray-200 {
color: var(--color-gray-200);
}
.text-gray-400 { .text-gray-400 {
color: var(--color-gray-400); color: var(--color-gray-400);
} }
@@ -9349,6 +9365,27 @@
border-color: var(--color-red-500); border-color: var(--color-red-500);
} }
} }
.hover\:bg-gray-900 {
&:hover {
@media (hover: hover) {
background-color: var(--color-gray-900);
}
}
}
.hover\:bg-neutral {
&:hover {
@media (hover: hover) {
background-color: var(--color-neutral);
}
}
}
.hover\:bg-neutral-content {
&:hover {
@media (hover: hover) {
background-color: var(--color-neutral-content);
}
}
}
.hover\:bg-red-600 { .hover\:bg-red-600 {
&:hover { &:hover {
@media (hover: hover) { @media (hover: hover) {
@@ -9356,6 +9393,13 @@
} }
} }
} }
.hover\:text-black {
&:hover {
@media (hover: hover) {
color: var(--color-black);
}
}
}
.hover\:text-white { .hover\:text-white {
&:hover { &:hover {
@media (hover: hover) { @media (hover: hover) {
@@ -9379,6 +9423,31 @@
outline-color: var(--color-indigo-600); outline-color: var(--color-indigo-600);
} }
} }
.data-active\:bg-gray-900 {
&[data-active] {
background-color: var(--color-gray-900);
}
}
.data-active\:bg-neutral {
&[data-active] {
background-color: var(--color-neutral);
}
}
.data-active\:bg-neutral-content {
&[data-active] {
background-color: var(--color-neutral-content);
}
}
.data-active\:text-black {
&[data-active] {
color: var(--color-black);
}
}
.data-active\:text-white {
&[data-active] {
color: var(--color-white);
}
}
.md\:grid-cols-2 { .md\:grid-cols-2 {
@media (width >= 48rem) { @media (width >= 48rem) {
grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-columns: repeat(2, minmax(0, 1fr));
@@ -9457,11 +9526,54 @@
display: table-cell; display: table-cell;
} }
} }
.dark\:text-white { .hover\:dark\:bg-gray-900 {
&:hover {
@media (hover: hover) {
@media (prefers-color-scheme: dark) {
background-color: var(--color-gray-900);
}
}
}
}
.hover\:dark\:bg-neutral {
&:hover {
@media (hover: hover) {
@media (prefers-color-scheme: dark) {
background-color: var(--color-neutral);
}
}
}
}
.hover\:dark\:text-white {
&:hover {
@media (hover: hover) {
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
color: var(--color-white); color: var(--color-white);
} }
} }
}
}
.data-active\:dark\:bg-gray-900 {
&[data-active] {
@media (prefers-color-scheme: dark) {
background-color: var(--color-gray-900);
}
}
}
.data-active\:dark\:bg-neutral {
&[data-active] {
@media (prefers-color-scheme: dark) {
background-color: var(--color-neutral);
}
}
}
.data-active\:dark\:text-white {
&[data-active] {
@media (prefers-color-scheme: dark) {
color: var(--color-white);
}
}
}
.is-drawer-close\:tooltip { .is-drawer-close\:tooltip {
&:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) {
@layer daisyui.l1.l2.l3 { @layer daisyui.l1.l2.l3 {
@@ -9546,6 +9658,11 @@
} }
} }
} }
.is-drawer-close\:mx-auto {
&:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) {
margin-inline: auto;
}
}
.is-drawer-close\:hidden { .is-drawer-close\:hidden {
&:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) {
display: none; display: none;
@@ -9561,16 +9678,41 @@
min-width: 80px; min-width: 80px;
} }
} }
.is-drawer-close\:grid-cols-1 {
&:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
}
.is-drawer-close\:items-center { .is-drawer-close\:items-center {
&:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) {
align-items: center; align-items: center;
} }
} }
.is-drawer-close\:justify-center {
&:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) {
justify-content: center;
}
}
.is-drawer-close\:space-y-2 {
&:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) {
:where(& > :not(:last-child)) {
--tw-space-y-reverse: 0;
margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));
margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
}
}
}
.is-drawer-close\:overflow-visible { .is-drawer-close\:overflow-visible {
&:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) {
overflow: visible; overflow: visible;
} }
} }
.is-drawer-close\:text-sm {
&:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) {
font-size: var(--text-sm);
line-height: var(--tw-leading, var(--text-sm--line-height));
}
}
.is-drawer-close\:text-error { .is-drawer-close\:text-error {
&:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) { &:where(.drawer-toggle:not(:checked) ~ .drawer-side, .drawer-toggle:not(:checked) ~ .drawer-side *) {
color: var(--color-error); color: var(--color-error);
@@ -9581,14 +9723,19 @@
color: var(--color-green-400); color: var(--color-green-400);
} }
} }
.is-drawer-open\:flex {
&:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) {
display: flex;
}
}
.is-drawer-open\:w-64 { .is-drawer-open\:w-64 {
&:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) { &:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) {
width: calc(var(--spacing) * 64); width: calc(var(--spacing) * 64);
} }
} }
.is-drawer-open\:min-w-\[340px\] { .is-drawer-open\:max-w-\[300px\] {
&:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) { &:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) {
min-width: 340px; max-width: 300px;
} }
} }
.is-drawer-open\:justify-between { .is-drawer-open\:justify-between {
@@ -9596,6 +9743,11 @@
justify-content: space-between; justify-content: space-between;
} }
} }
.is-drawer-open\:justify-start {
&:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) {
justify-content: flex-start;
}
}
.is-drawer-open\:space-x-4 { .is-drawer-open\:space-x-4 {
&:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) { &:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) {
:where(& > :not(:last-child)) { :where(& > :not(:last-child)) {
@@ -9605,6 +9757,12 @@
} }
} }
} }
.is-drawer-open\:text-xl {
&:where(.drawer-toggle:checked ~ .drawer-side, .drawer-toggle:checked ~ .drawer-side *) {
font-size: var(--text-xl);
line-height: var(--tw-leading, var(--text-xl--line-height));
}
}
} }
@layer base { @layer base {
:where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light] { :where(:root),:root:has(input.theme-controller[value=light]:checked),[data-theme=light] {

View File

@@ -18,6 +18,7 @@ extension SVG {
case badgeCheck case badgeCheck
case ban case ban
case chevronRight case chevronRight
case chevronsLeft
case circlePlus case circlePlus
case close case close
case doorClosed case doorClosed
@@ -46,6 +47,10 @@ extension SVG {
return """ return """
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right-icon lucide-chevron-right"><path d="m9 18 6-6-6-6"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevron-right-icon lucide-chevron-right"><path d="m9 18 6-6-6-6"/></svg>
""" """
case .chevronsLeft:
return """
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-chevrons-left-icon lucide-chevrons-left"><path d="m11 17-5-5 5-5"/><path d="m18 17-5-5 5-5"/></svg>
"""
case .circlePlus: case .circlePlus:
return """ return """
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-plus-icon lucide-circle-plus"><circle cx="12" cy="12" r="10"/><path d="M8 12h8"/><path d="M12 8v8"/></svg> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-plus-icon lucide-circle-plus"><circle cx="12" cy="12" r="10"/><path d="M8 12h8"/><path d="M12 8v8"/></svg>

View File

@@ -44,21 +44,26 @@ struct FrictionRateView: HTML, Sendable {
var body: some HTML { var body: some HTML {
div(.class("p-4 space-y-6")) { div(.class("p-4 space-y-6")) {
Row {
h1(.class("text-4xl font-bold pb-6")) { "Friction Rate" } h1(.class("text-4xl font-bold pb-6")) { "Friction Rate" }
div(.class("flex space-x-4")) { div(.class("space-y-4")) {
div(.class("flex space-x-4 justify-end")) {
if let availableStaticPressure { if let availableStaticPressure {
Label("Available Static Pressure") Label("Available Static Pressure")
Number(availableStaticPressure, digits: 2) Number(availableStaticPressure, digits: 2)
.attributes(.class("badge badge-lg badge-outline font-bold ms-4")) .attributes(.class("badge badge-lg badge-outline font-bold ms-4"))
} }
} }
div(.class("flex space-x-4")) {
div(.class("flex space-x-4 justify-end")) {
if let frictionRateDesignValue { if let frictionRateDesignValue {
Label("Friction Rate Design Value") Label("Friction Rate Design Value")
Number(frictionRateDesignValue, digits: 2) Number(frictionRateDesignValue, digits: 2)
.attributes(.class("badge badge-lg badge-outline \(badgeColor) font-bold")) .attributes(.class("badge badge-lg badge-outline \(badgeColor) font-bold"))
} }
} }
}
}
div(.class("text-error italic")) { div(.class("text-error italic")) {
p { p {

View File

@@ -36,12 +36,14 @@ struct ProjectView: HTML, Sendable {
input(.id("my-drawer-1"), .type(.checkbox), .class("drawer-toggle")) input(.id("my-drawer-1"), .type(.checkbox), .class("drawer-toggle"))
div(.class("drawer-content p-4")) { div(.class("drawer-content p-4")) {
Tooltip("Open sidebar", position: .right) {
label( label(
.for("my-drawer-1"), .for("my-drawer-1"),
.class("btn btn-square btn-ghost drawer-button size-7 pb-6") .class("btn btn-square btn-ghost drawer-button size-7 pb-6")
) { ) {
SVG(.sidebarToggle) SVG(.sidebarToggle)
} }
}
switch self.activeTab { switch self.activeTab {
case .project: case .project:
await resultView(projectID) { await resultView(projectID) {
@@ -127,58 +129,6 @@ struct ProjectView: HTML, Sendable {
} }
} }
// extension SiteRoute.View.ProjectRoute.DetailRoute.Tab {
//
// func view(projectID: Project.ID) async throws -> AnySendableHTML {
// @Dependency(\.database) var database
// @Dependency(\.manualD) var manualD
//
// switch self {
// case .project:
// if let project = try await database.projects.get(projectID) {
// return ProjectDetail(project: project)
// } else {
// return div {
// "FIX ME!"
// }
// }
// case .rooms:
// return try await RoomsView(
// projectID: projectID,
// rooms: database.rooms.fetch(projectID),
// sensibleHeatRatio: database.projects.getSensibleHeatRatio(projectID)
// )
//
// case .equivalentLength:
// return try await EffectiveLengthsView(
// projectID: projectID,
// effectiveLengths: database.effectiveLength.fetch(projectID)
// )
// case .frictionRate:
// let equipmentInfo = try await database.equipment.fetch(projectID)
// let componentLosses = try await database.componentLoss.fetch(projectID)
// let equivalentLengths = try await database.effectiveLength.fetchMax(projectID)
//
// return try await FrictionRateView(
// equipmentInfo: equipmentInfo,
// componentLosses: componentLosses,
// equivalentLengths: equivalentLengths,
// projectID: projectID,
// frictionRateResponse: manualD.frictionRate(
// equipmentInfo: equipmentInfo,
// componentLosses: componentLosses,
// effectiveLength: equivalentLengths
// )
// )
// case .ductSizing:
// return try await DuctSizingView(
// projectID: projectID,
// rooms: database.calculateDuctSizes(projectID: projectID)
// )
// }
// }
// }
extension ProjectView { extension ProjectView {
struct Sidebar: HTML { struct Sidebar: HTML {
@@ -199,7 +149,7 @@ extension ProjectView {
.class( .class(
""" """
flex min-h-full flex-col items-start bg-base-200 flex min-h-full flex-col items-start bg-base-200
is-drawer-close:min-w-[80px] is-drawer-open:min-w-[340px] is-drawer-close:min-w-[80px] is-drawer-open:max-w-[300px]
""" """
) )
) { ) {
@@ -215,7 +165,7 @@ extension ProjectView {
.class( .class(
""" """
flex btn btn-secondary btn-square btn-block flex btn btn-secondary btn-square btn-block
is-drawer-close:items-center items-center
""" """
), ),
.hx.get(route: .project(.index)), .hx.get(route: .project(.index)),
@@ -224,7 +174,8 @@ extension ProjectView {
.hx.swap(.outerHTML), .hx.swap(.outerHTML),
) { ) {
div(.class("flex is-drawer-open:space-x-4")) { div(.class("flex is-drawer-open:space-x-4")) {
span { "<" } // span { "<" }
SVG(.chevronsLeft)
span(.class("is-drawer-close:hidden")) { "All Projects" } span(.class("is-drawer-close:hidden")) { "All Projects" }
} }
} }
@@ -239,13 +190,14 @@ extension ProjectView {
} }
} }
li(.class("w-full")) { li(.class("flex w-full")) {
row( row(
title: "Project", title: "Project",
icon: .mapPin, icon: .mapPin,
route: .project(.detail(projectID, .index(tab: .project))), route: .project(.detail(projectID, .index(tab: .project))),
isComplete: true isComplete: true
) )
.attributes(.data("active", value: "true"), when: active == .project)
.attributes(.class("btn-active"), when: active == .project) .attributes(.class("btn-active"), when: active == .project)
} }
@@ -257,16 +209,20 @@ extension ProjectView {
isComplete: completedSteps.rooms isComplete: completedSteps.rooms
) )
.attributes(.class("btn-active"), when: active == .rooms) .attributes(.class("btn-active"), when: active == .rooms)
.attributes(.data("active", value: "true"), when: active == .rooms)
} }
li(.class("w-full")) { li(.class("w-full")) {
// Tooltip("Equivalent Lengths", position: .right) {
row( row(
title: "Equivalent Lengths", title: "T.E.L.",
icon: .rulerDimensionLine, icon: .rulerDimensionLine,
route: .project(.detail(projectID, .equivalentLength(.index))), route: .project(.detail(projectID, .equivalentLength(.index))),
isComplete: completedSteps.equivalentLength isComplete: completedSteps.equivalentLength
) )
.attributes(.data("active", value: "true"), when: active == .equivalentLength)
.attributes(.class("btn-active"), when: active == .equivalentLength) .attributes(.class("btn-active"), when: active == .equivalentLength)
// }
} }
li(.class("w-full")) { li(.class("w-full")) {
@@ -276,6 +232,7 @@ extension ProjectView {
route: .project(.detail(projectID, .frictionRate(.index))), route: .project(.detail(projectID, .frictionRate(.index))),
isComplete: completedSteps.frictionRate isComplete: completedSteps.frictionRate
) )
.attributes(.data("active", value: "true"), when: active == .frictionRate)
.attributes(.class("btn-active"), when: active == .frictionRate) .attributes(.class("btn-active"), when: active == .frictionRate)
} }
@@ -287,6 +244,7 @@ extension ProjectView {
isComplete: false, isComplete: false,
hideIsComplete: true hideIsComplete: true
) )
.attributes(.data("active", value: "true"), when: active == .ductSizing)
.attributes(.class("btn-active"), when: active == .ductSizing) .attributes(.class("btn-active"), when: active == .ductSizing)
} }
} }
@@ -301,26 +259,52 @@ extension ProjectView {
href: String, href: String,
isComplete: Bool, isComplete: Bool,
hideIsComplete: Bool = false hideIsComplete: Bool = false
) -> some HTML<HTMLTag.a> { ) -> some HTML<HTMLTag.button> {
a( button(
.class( .class(
""" """
flex w-full btn btn-soft btn-square btn-block w-full gap-1 py-2 border-b-1 border-gray-200
is-drawer-open:justify-between is-drawer-close:items-center hover:bg-neutral data-active:bg-neutral
is-drawer-close:tooltip is-drawer-close:tooltip-right hover:text-white data-active:text-white
is-drawer-open:flex is-drawer-open:space-x-4
is-drawer-close:grid-cols-1
""" """
), ),
.href(href), .hx.get(href),
.data("tip", value: title) .hx.target("body"),
.hx.swap(.outerHTML)
) { ) {
div(.class("flex is-drawer-open:space-x-4")) { div(
.class(
"""
w-full p-2 gap-1
is-drawer-open:flex is-drawer-open:space-x-4
is-drawer-close:grid-cols-1
"""
)
) {
div(
.class(
"""
items-center
is-drawer-open:justify-start is-drawer-open:flex is-drawer-open:space-x-4
is-drawer-close:justify-center is-drawer-close:mx-auto is-drawer-close:space-y-2
"""
)
) {
div(.class("flex items-center justify-center")) {
SVG(icon) SVG(icon)
span(.class("text-xl is-drawer-close:hidden")) { }
title .attributes(.class("is-drawer-close:text-green-400"), when: isComplete)
.attributes(.class("is-drawer-close:text-error"), when: !isComplete && !hideIsComplete)
div(.class("flex items-center justify-center")) {
span { title }
} }
} }
if !hideIsComplete { if !hideIsComplete {
div(.class("is-drawer-close:hidden")) { div(.class("flex grow justify-end items-end is-drawer-close:hidden")) {
if isComplete { if isComplete {
SVG(.badgeCheck) SVG(.badgeCheck)
} else { } else {
@@ -331,8 +315,48 @@ extension ProjectView {
.attributes(.class("text-error"), when: !isComplete) .attributes(.class("text-error"), when: !isComplete)
} }
} }
.attributes(.class("is-drawer-close:text-green-400"), when: isComplete) }
.attributes(.class("is-drawer-close:text-error"), when: !isComplete && !hideIsComplete) // a(
//
// // flex w-full btn btn-soft btn-square btn-block btn-lg
// .class(
// """
// flex w-full hover:bg-gray-900 data-active:bg-gray-900
// is-drawer-open:justify-between is-drawer-close:items-center
// is-drawer-close:tooltip is-drawer-close:tooltip-right
// is-drawer-close:justify-center
// """
// ),
// .href(href),
// .data("tip", value: title)
// ) {
// div(
// .class(
// """
// justify-center items-center mx-auto space-4 py-2
// is-drawer-open:flex is-drawer-open:space-x-4
// """
// )
// ) {
// SVG(icon)
// span(.class("text-gray-200 is-drawer-open:text-xl is-drawer-close:text-sm")) {
// title
// }
// }
// if !hideIsComplete {
// div(.class("is-drawer-close:hidden")) {
// if isComplete {
// SVG(.badgeCheck)
// } else {
// SVG(.ban)
// }
// }
// .attributes(.class("text-green-400"), when: isComplete)
// .attributes(.class("text-error"), when: !isComplete)
// }
// }
// .attributes(.class("is-drawer-close:text-green-400"), when: isComplete)
// .attributes(.class("is-drawer-close:text-error"), when: !isComplete && !hideIsComplete)
} }
private func row( private func row(
@@ -341,7 +365,7 @@ extension ProjectView {
route: SiteRoute.View, route: SiteRoute.View,
isComplete: Bool, isComplete: Bool,
hideIsComplete: Bool = false hideIsComplete: Bool = false
) -> some HTML<HTMLTag.a> { ) -> some HTML<HTMLTag.button> {
row( row(
title: title, icon: icon, href: SiteRoute.View.router.path(for: route), title: title, icon: icon, href: SiteRoute.View.router.path(for: route),
isComplete: isComplete, hideIsComplete: hideIsComplete isComplete: isComplete, hideIsComplete: hideIsComplete

View File

@@ -4,3 +4,5 @@
@source not "./daisyui{,*}.mjs"; @source not "./daisyui{,*}.mjs";
@plugin "./daisyui.mjs"; @plugin "./daisyui.mjs";
@custom-variant dark (&:where([data-theme=dark], [data-theme=dark] *));