import Rainbow public extension TextNode { func labelStyle(color: NamedColor? = nil, styles: [Style] = []) -> some TextNode where Self == Label { modifier(LabelStyle(color: color, styles: styles)) } func labelStyle(color: NamedColor? = nil, styles: Style...) -> some TextNode where Self == Label { labelStyle(color: color, styles: styles) } } public struct LabelStyle: NodeModifier { @usableFromInline let color: NamedColor? @usableFromInline let styles: [Style] @usableFromInline init(color: NamedColor? = nil, styles: [Style] = []) { self.color = color self.styles = styles } @inlinable public func render(content: Label) -> some TextNode { var label: any TextNode = content.content label = label.style(styles) if let color { label = label.color(color) } return Label { label.eraseToAnyTextNode() } } }