     }
 
     public func generate(context: SupportedPropertyTypeContext) -> String {
-        func resolveAttributes(part: AttributedText.Part, inheritedAttributes: [Property], parentElements: [String]) -> [String] {
+        func resolveAttributes(part: AttributedText.Part, inheritedAttributes: [Property], parentElements: [String]) -> [(text: String, attributes: String)] {
             switch part {
             case .transform(let transformedText):
                 let generatedAttributes = inheritedAttributes.map {

            }
        }

        let mutableStringParts = parts.flatMap {
            resolveAttributes(part: $0, inheritedAttributes: localProperties, parentElements: [])
        }

        return """
        {
            let s = NSMutableAttributedString()
            \(mutableStringParts.map { "s.append(\($0))" }.joined(separator: "\n"))
            return s
        }()
        """

                    style.map { context.resolvedStyleName(named: $0) + ".\(elementName)" }
                }
                let attributesString = (generatedParentStyles + ["[\(generatedAttributes)]"]).joined(separator: " + ")
                return [(generatedTransformedText, attributesString)]
            case .attributed(let attributedStyle, let attributedTexts):
                // the order of appending is important because the `distinct(where:)` keeps the first element of the duplicates
                let lowerAttributes = attributedStyle.properties
