55 lines
985 B
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) }
|
|
}
|
|
}
|
|
}
|