feat: Adds section and section style, needs tests

This commit is contained in:
2024-12-04 17:03:28 -05:00
parent 2a9b350b26
commit b0b218e047
9 changed files with 89 additions and 1 deletions

View File

@@ -11,7 +11,7 @@ public extension ExampleSection {
}
func exampleStyle<S: ExampleStyle>(_ style: S) -> some TextNode {
DefaultExamplesStyle().render(content: .init(
DefaultExamplesStyle(exampleStyle: style).render(content: .init(
header: header,
label: label,
examples: examples

View File

@@ -0,0 +1,37 @@
public extension Section {
@inlinable
func style<S: SectionStyle>(_ style: S) -> some TextNode {
style.render(content: .init(header: header, content: content, footer: footer))
}
}
public struct SectionConfiguration {
public let header: any TextNode
public let content: any TextNode
public let footer: any TextNode
@usableFromInline
init(header: any TextNode, content: any TextNode, footer: any TextNode) {
self.header = header
self.content = content
self.footer = footer
}
}
public protocol SectionStyle: NodeModifier where Content == SectionConfiguration {}
public extension SectionStyle where Self == DefaultSectionStyle {
static var `default`: Self { DefaultSectionStyle() }
}
public struct DefaultSectionStyle: SectionStyle {
public func render(content: SectionConfiguration) -> some TextNode {
VStack {
content.header
content.content
content.footer.textStyle(.italic)
}
}
}