Files
swift-hvac-toolbox/Sources/Styleguide/LabeledContent.swift

55 lines
985 B
Swift

import Elementary
public struct LabeledContent<Label: HTML, Body: HTML>: HTML {
let body: Body
let label: Label
public init(
@HTMLBuilder body: () -> Body,
@HTMLBuilder label: () -> Label
) {
self.body = body()
self.label = label()
}
public var content: some HTML<HTMLTag.div> {
div {
label
body
}
}
}
extension LabeledContent: Sendable where Label: Sendable, Body: Sendable {}
// MARK: - Forms
public extension LabeledContent where Label == InputLabel<HTMLText>, Body == Input {
init(
label: String,
input: () -> Body
) {
self.init {
input()
} label: {
InputLabel(for: input().id) { HTMLText(label) }
}
}
}
public extension LabeledContent where Label == InputLabel<HTMLText>, Body == _AttributedElement<Input> {
init(
label: String,
input: () -> Body
) {
self.init {
input()
} label: {
InputLabel(for: input().content.id) { HTMLText(label) }
}
}
}