diff --git a/Sources/HTMLKit/Abstraction/Attributes/BasicAttributes.swift b/Sources/HTMLKit/Abstraction/Attributes/BasicAttributes.swift index 28410196..de0091fc 100644 --- a/Sources/HTMLKit/Abstraction/Attributes/BasicAttributes.swift +++ b/Sources/HTMLKit/Abstraction/Attributes/BasicAttributes.swift @@ -2813,7 +2813,22 @@ extension ReversedAttribute where Self: EmptyNode { @_documentation(visibility: internal) public protocol RoleAttribute: Attribute { - /// Describe the role of an element. + /// Describe the roles of an element. + /// + /// ```swift + /// Anchor { + /// "Lorem ipsum..." + /// } + /// .reference("https://...") + /// .role([.button]) + /// ``` + /// + /// - Parameter value: The role to inform about. + /// + /// - Returns: The element + func role(_ values: [Values.Role]) -> Self + + /// Describe the roles of an element. /// /// ```swift /// Anchor { @@ -2826,7 +2841,7 @@ public protocol RoleAttribute: Attribute { /// - Parameter value: The role to inform about. /// /// - Returns: The element - func role(_ value: Values.Role) -> Self + func role(_ values: Values.Role...) -> Self } extension RoleAttribute where Self: ContentNode { diff --git a/Sources/HTMLKit/Abstraction/Elements/BasicElements.swift b/Sources/HTMLKit/Abstraction/Elements/BasicElements.swift index e08dde88..f8eda94d 100644 --- a/Sources/HTMLKit/Abstraction/Elements/BasicElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/BasicElements.swift @@ -259,8 +259,12 @@ extension Html: GlobalAttributes, GlobalEventAttributes { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Html { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Html { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Html { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/BodyElements.swift b/Sources/HTMLKit/Abstraction/Elements/BodyElements.swift index a5131933..27571461 100644 --- a/Sources/HTMLKit/Abstraction/Elements/BodyElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/BodyElements.swift @@ -343,8 +343,12 @@ extension Article: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityA return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Article { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Article { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Article { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -877,8 +881,12 @@ extension Section: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityA return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Section { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Section { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Section { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1413,8 +1421,12 @@ extension Navigation: GlobalAttributes, GlobalEventAttributes, GlobalAccessibili return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Navigation { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Navigation { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Navigation { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1945,8 +1957,12 @@ extension Aside: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAtt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Aside { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Aside { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Aside { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -2474,8 +2490,12 @@ extension Heading1: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Heading1 { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Heading1 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Heading1 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -3011,8 +3031,12 @@ extension Heading2: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Heading2 { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Heading2 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Heading2 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -3549,8 +3573,12 @@ extension Heading3: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Heading3 { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Heading3 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Heading3 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -4087,8 +4115,12 @@ extension Heading4: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Heading4 { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Heading4 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Heading4 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -4625,8 +4657,12 @@ extension Heading5: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Heading5 { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Heading5 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Heading5 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -5163,8 +5199,12 @@ extension Heading6: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Heading6 { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Heading6 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Heading6 { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -5705,9 +5745,13 @@ extension HeadingGroup: GlobalAttributes, GlobalEventAttributes, GlobalAccessibi public func nonce(_ value: String) -> HeadingGroup { return mutate(nonce: .init(value, context: .tainted(.html))) } - - public func role(_ value: Values.Role) -> HeadingGroup { - return mutate(role: .init(value.rawValue, context: .trusted)) + + public func role(_ values: [Values.Role]) -> HeadingGroup { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> HeadingGroup { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -6236,8 +6280,12 @@ extension Header: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Header { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Header { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Header { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -6764,8 +6812,12 @@ extension Footer: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Footer { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Footer { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Footer { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -7299,8 +7351,12 @@ extension Address: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityA return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Address { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Address { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Address { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -7828,8 +7884,12 @@ extension Paragraph: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilit return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Paragraph { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Paragraph { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Paragraph { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -8361,8 +8421,12 @@ extension HorizontalRule: GlobalAttributes, GlobalEventAttributes, GlobalAccessi return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> HorizontalRule { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> HorizontalRule { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> HorizontalRule { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -8896,8 +8960,12 @@ extension PreformattedText: GlobalAttributes, GlobalEventAttributes, GlobalAcces return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> PreformattedText { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> PreformattedText { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> PreformattedText { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -9425,8 +9493,12 @@ extension Blockquote: GlobalAttributes, GlobalEventAttributes, GlobalAccessibili return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Blockquote { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Blockquote { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Blockquote { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -9972,8 +10044,12 @@ extension OrderedList: GlobalAttributes, GlobalEventAttributes, GlobalAccessibil return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> OrderedList { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> OrderedList { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> OrderedList { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -10521,8 +10597,12 @@ extension UnorderedList: GlobalAttributes, GlobalEventAttributes, GlobalAccessib return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> UnorderedList { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> UnorderedList { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> UnorderedList { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -11068,8 +11148,12 @@ extension Menu: GlobalAttributes { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Menu { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Menu { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Menu { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -11354,8 +11438,12 @@ extension DescriptionList: GlobalAttributes, GlobalEventAttributes, GlobalAccess return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> DescriptionList { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> DescriptionList { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> DescriptionList { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -11888,8 +11976,12 @@ extension Figure: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Figure { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Figure { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Figure { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -12419,8 +12511,12 @@ extension Anchor: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Anchor { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Anchor { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Anchor { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -13003,8 +13099,12 @@ extension Emphasize: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilit return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Emphasize { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Emphasize { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Emphasize { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -13534,8 +13634,12 @@ extension Strong: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Strong { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Strong { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Strong { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -14065,8 +14169,12 @@ extension Small: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAtt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Small { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Small { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Small { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -14605,8 +14713,12 @@ extension StrikeThrough: GlobalAttributes, GlobalEventAttributes { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> StrikeThrough { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> StrikeThrough { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> StrikeThrough { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -14923,8 +15035,12 @@ extension Main: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Main { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Main { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Main { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -15459,8 +15575,12 @@ extension Search: GlobalAttributes { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Search { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Search { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Search { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -15738,8 +15858,12 @@ extension Division: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Division { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Division { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Division { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -16397,8 +16521,12 @@ extension Definition: GlobalAttributes, GlobalEventAttributes, GlobalAccessibili return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Definition { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Definition { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Definition { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -16929,8 +17057,12 @@ extension Cite: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Cite { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Cite { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Cite { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -17460,8 +17592,12 @@ extension ShortQuote: GlobalAttributes, GlobalEventAttributes, GlobalAccessibili return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> ShortQuote { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> ShortQuote { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> ShortQuote { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -17996,8 +18132,12 @@ extension Abbreviation: GlobalAttributes, GlobalEventAttributes, GlobalAccessibi return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Abbreviation { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Abbreviation { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Abbreviation { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -18528,8 +18668,12 @@ extension Ruby: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Ruby { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Ruby { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Ruby { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -19062,8 +19206,12 @@ extension Data: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Data { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Data { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Data { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -19608,8 +19756,12 @@ extension Time: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Time { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Time { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Time { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -20145,8 +20297,12 @@ extension Code: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Code { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Code { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Code { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -20678,8 +20834,12 @@ extension Variable: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Variable { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Variable { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Variable { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -21207,8 +21367,12 @@ extension SampleOutput: GlobalAttributes, GlobalEventAttributes, GlobalAccessibi return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> SampleOutput { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> SampleOutput { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> SampleOutput { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -21740,8 +21904,12 @@ extension KeyboardInput: GlobalAttributes, GlobalEventAttributes, GlobalAccessib return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> KeyboardInput { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> KeyboardInput { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> KeyboardInput { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -22272,8 +22440,12 @@ extension Subscript: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilit return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Subscript { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Subscript { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Subscript { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -22805,8 +22977,12 @@ extension Superscript: GlobalAttributes, GlobalEventAttributes, GlobalAccessibil return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Superscript { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Superscript { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Superscript { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -23338,8 +23514,12 @@ extension Italic: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Italic { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Italic { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Italic { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -23880,8 +24060,12 @@ extension Bold: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Bold { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Bold { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Bold { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -24422,8 +24606,12 @@ extension Underline: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilit return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Underline { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Underline { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Underline { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -24964,8 +25152,12 @@ extension Mark: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Mark { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Mark { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Mark { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -25497,8 +25689,12 @@ extension Bdi: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttri return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Bdi { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Bdi { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Bdi { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -26018,8 +26214,12 @@ extension Bdo: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttri return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Bdo { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Bdo { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Bdo { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -26547,8 +26747,12 @@ extension Span: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Span { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Span { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Span { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -27073,8 +27277,12 @@ extension LineBreak: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilit return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> LineBreak { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> LineBreak { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> LineBreak { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -27591,8 +27799,12 @@ extension WordBreak: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilit return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> WordBreak { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> WordBreak { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> WordBreak { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -28120,8 +28332,12 @@ extension InsertedText: GlobalAttributes, GlobalEventAttributes, GlobalAccessibi return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> InsertedText { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> InsertedText { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> InsertedText { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -28657,8 +28873,12 @@ extension DeletedText: GlobalAttributes, GlobalEventAttributes, GlobalAccessibil return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> DeletedText { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> DeletedText { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> DeletedText { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -29199,8 +29419,12 @@ extension Picture: GlobalAttributes, GlobalEventAttributes { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Picture { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Picture { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Picture { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -29494,8 +29718,12 @@ extension Image: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAtt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Image { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Image { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Image { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -30093,9 +30321,13 @@ extension InlineFrame: GlobalAttributes, GlobalEventAttributes, GlobalAccessibil public func nonce(_ value: String) -> InlineFrame { return mutate(nonce: .init(value, context: .tainted(.html))) } - - public func role(_ value: Values.Role) -> InlineFrame { - return mutate(role: .init(value.rawValue, context: .trusted)) + + public func role(_ values: [Values.Role]) -> InlineFrame { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> InlineFrame { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -30654,8 +30886,12 @@ extension Embed: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAtt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Embed { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Embed { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Embed { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -31204,8 +31440,12 @@ extension Object: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Object { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Object { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Object { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -31759,8 +31999,12 @@ extension Video: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAtt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Video { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Video { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Video { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -32357,8 +32601,12 @@ extension Audio: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAtt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Audio { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Audio { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Audio { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -32935,8 +33183,12 @@ extension Map: GlobalAttributes, GlobalEventAttributes, NameAttribute { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Map { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Map { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Map { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -33244,8 +33496,12 @@ extension Form: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Form { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Form { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Form { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -33821,8 +34077,12 @@ extension DataList: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> DataList { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> DataList { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> DataList { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -34352,8 +34612,12 @@ extension Output: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Output { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Output { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Output { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -34895,8 +35159,12 @@ extension Progress: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Progress { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Progress { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Progress { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -35445,8 +35713,12 @@ extension Meter: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAtt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Meter { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Meter { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Meter { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -36012,8 +36284,12 @@ extension Details: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityA return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Details { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Details { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Details { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -36568,9 +36844,13 @@ extension Dialog: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt public func nonce(_ value: String) -> Dialog { return mutate(nonce: .init(value, context: .tainted(.html))) } - - public func role(_ value: Values.Role) -> Dialog { - return mutate(role: .init(value.rawValue, context: .trusted)) + + public func role(_ values: [Values.Role]) -> Dialog { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Dialog { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -37133,8 +37413,12 @@ extension Script: GlobalAttributes, GlobalEventAttributes, AsynchronouslyAttribu return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Script { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Script { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Script { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -37461,9 +37745,13 @@ extension NoScript: GlobalAttributes, GlobalEventAttributes { public func nonce(_ value: String) -> NoScript { return mutate(nonce: .init(value, context: .tainted(.html))) } - - public func role(_ value: Values.Role) -> NoScript { - return mutate(role: .init(value.rawValue, context: .trusted)) + + public func role(_ values: [Values.Role]) -> NoScript { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> NoScript { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -37768,8 +38056,12 @@ extension Template: GlobalAttributes, GlobalEventAttributes, ShadowRootModeAttri return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Template { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Template { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Template { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -38067,8 +38359,12 @@ extension Canvas: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Canvas { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Canvas { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Canvas { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -38611,8 +38907,12 @@ extension Table: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAtt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Table { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Table { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Table { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -39036,7 +39336,7 @@ public struct Vector: ContentNode, HtmlElement, BodyElement, FormElement, Figure } } -extension Vector: GlobalVectorAttributes, WidthAttribute, HeightAttribute, ViewBoxAttribute, NamespaceAttribute { +extension Vector: GlobalVectorAttributes, GlobalAccessibilityAttributes, WidthAttribute, HeightAttribute, ViewBoxAttribute, NamespaceAttribute, RoleAttribute { public func id(_ value: String) -> Vector { return self.mutate(id: .init(value, context: .tainted(.html))) @@ -39151,6 +39451,14 @@ extension Vector: GlobalVectorAttributes, WidthAttribute, HeightAttribute, ViewB return self.mutate(namespace: .init(value, context: .tainted(.html))) } + public func role(_ values: [Values.Role]) -> Vector { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Vector { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + public func custom(key: String, value: String, context: EscapeContext = .tainted(.html)) -> Vector { return mutate(key: key, value: .init(value, context: context)) } @@ -39174,6 +39482,137 @@ extension Vector: GlobalVectorAttributes, WidthAttribute, HeightAttribute, ViewB public func custom(key: String, value: EnvironmentValue, context: EscapeContext = .tainted(.html)) -> Vector { return mutate(key: key, value: .init(value, context: context)) } + + public func accessibilityAtomic(_ value: Bool = true) -> Vector { + return mutate(ariaatomic: .init(value, context: .trusted)) + } + + public func accessibilityBusy(_ value: Bool = true) -> Vector { + return mutate(ariabusy: .init(value, context: .trusted)) + } + + public func accessibilityControls(_ ids: [String]) -> Vector { + return mutate(ariacontrols: .init(EnumeratedList(values: ids, separator: " "), context: .tainted(.html))) + } + + public func accessibilityControls(_ ids: String...) -> Vector { + return mutate(ariacontrols: .init(EnumeratedList(values: ids, separator: " "), context: .tainted(.html))) + } + + public func accessibilityCurrent(_ value: Values.Accessibility.Current) -> Vector { + return mutate(ariacurrent: .init(value.rawValue, context: .trusted)) + } + + public func accessibilityCurrent(_ value: Bool = true) -> Vector { + return mutate(ariacurrent: .init(value, context: .trusted)) + } + + public func accessibilityDescriptions(_ ids: [String]) -> Vector { + return mutate(ariadescribedby: .init(EnumeratedList(values: ids, separator: " "), context: .tainted(.html))) + } + + public func accessibilityDescriptions(_ ids: String...) -> Vector { + return mutate(ariadescribedby: .init(EnumeratedList(values: ids, separator: " "), context: .tainted(.html))) + } + + public func accessibilityDetail(_ id: String) -> Vector { + return mutate(ariadetails: .init(id, context: .tainted(.html))) + } + + public func accessibilityDisabled(_ value: Bool = true) -> Vector { + return mutate(ariadisabled: .init(value, context: .trusted)) + } + + public func accessibilityFlow(_ ids: [String]) -> Vector { + return mutate(ariaflowto: .init(EnumeratedList(values: ids, separator: " "), context: .tainted(.html))) + } + + public func accessibilityFlow(_ ids: String...) -> Vector { + return mutate(ariaflowto: .init(EnumeratedList(values: ids, separator: " "), context: .tainted(.html))) + } + + public func accessibilityPopup(_ value: Values.Accessibility.Popup) -> Vector { + return mutate(ariahaspopup: .init(value.rawValue, context: .trusted)) + } + + public func accessibilityHidden(_ value: Bool = true) -> Vector { + return mutate(ariahidden: .init(value, context: .trusted)) + } + + public func accessibilityInvalid(_ value: Values.Accessibility.Invalid) -> Vector { + return mutate(ariainvalid: .init(value.rawValue, context: .trusted)) + } + + public func accessibilityInvalid(_ value: Bool = true, message id: String? = nil) -> Vector { + + if let id = id { + return mutate(ariainvalid: .init(value, context: .trusted)).mutate(ariaerrormessage: .init(id, context: .tainted(.html))) + } + + return mutate(ariainvalid: .init(value, context: .trusted)) + } + + public func accessibilityShortcuts(_ values: [KeyboardShortcut]) -> Vector { + return mutate(ariakeyshortcuts: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func accessibilityShortcuts(_ values: KeyboardShortcut...) -> Vector { + return mutate(ariakeyshortcuts: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + @_disfavoredOverload + public func accessibilityLabel(_ value: String) -> Vector { + return mutate(arialabel: .init(value, context: .tainted(.html))) + } + + public func accessibilityLabel(_ localizedKey: LocalizedStringKey, tableName: String? = nil) -> Vector { + return mutate(arialabel: .init(LocalizedString(key: localizedKey, table: tableName), context: .tainted(.html))) + } + + public func accessibilityLabel(verbatim value: String) -> Vector { + return mutate(arialabel: .init(value, context: .tainted(.html))) + } + + public func accessibilityLabels(_ ids: [String]) -> Vector { + return mutate(arialabeledby: .init(EnumeratedList(values: ids, separator: " "), context: .tainted(.html))) + } + + public func accessibilityLabels(_ ids: String...) -> Vector { + return mutate(arialabeledby: .init(EnumeratedList(values: ids, separator: " "), context: .tainted(.html))) + } + + public func accessibilityLive(_ value: Values.Accessibility.Live) -> Vector { + return mutate(arialive: .init(value.rawValue, context: .trusted)) + } + + public func accessibilityOwns(_ ids: [String]) -> Vector { + return mutate(ariaowns: .init(EnumeratedList(values: ids, separator: " "), context: .tainted(.html))) + } + + public func accessibilityOwns(_ ids: String...) -> Vector { + return mutate(ariaowns: .init(EnumeratedList(values: ids, separator: " "), context: .tainted(.html))) + } + + public func accessibilityRelevant(_ values: [Values.Accessibility.Relevant]) -> Vector { + return mutate(ariarelevant: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func accessibilityRelevant(_ values: Values.Accessibility.Relevant...) -> Vector { + return mutate(ariarelevant: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + @_disfavoredOverload + public func accessibilityRoleDescription(_ value: String) -> Vector { + return mutate(ariaroledescription: .init(value, context: .tainted(.html))) + } + + public func accessibilityRoleDescription(_ localizedKey: LocalizedStringKey, tableName: String? = nil) -> Vector { + return mutate(ariaroledescription: .init(LocalizedString(key: localizedKey, table: tableName), context: .tainted(.html))) + } + + public func accessibilityRoleDescription(verbatim value: String) -> Vector { + return mutate(ariaroledescription: .init(value, context: .tainted(.html))) + } } /// An element that represents a shadow method. @@ -39379,8 +39818,12 @@ extension Slot: GlobalAttributes, NameAttribute { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Slot { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Slot { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Slot { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/DefinitionElements.swift b/Sources/HTMLKit/Abstraction/Elements/DefinitionElements.swift index 7f417f84..7ab2159a 100644 --- a/Sources/HTMLKit/Abstraction/Elements/DefinitionElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/DefinitionElements.swift @@ -207,8 +207,12 @@ extension TermName: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> TermName { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> TermName { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> TermName { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -741,8 +745,12 @@ extension TermDefinition: GlobalAttributes, GlobalEventAttributes, GlobalAccessi return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> TermDefinition { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> TermDefinition { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> TermDefinition { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/FigureElements.swift b/Sources/HTMLKit/Abstraction/Elements/FigureElements.swift index c6bb216a..90ec2744 100644 --- a/Sources/HTMLKit/Abstraction/Elements/FigureElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/FigureElements.swift @@ -203,8 +203,12 @@ extension FigureCaption: GlobalAttributes, GlobalEventAttributes, GlobalAccessib return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> FigureCaption { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> FigureCaption { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> FigureCaption { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/FormElements.swift b/Sources/HTMLKit/Abstraction/Elements/FormElements.swift index d95975c1..91c24487 100644 --- a/Sources/HTMLKit/Abstraction/Elements/FormElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/FormElements.swift @@ -185,8 +185,12 @@ extension Input: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAtt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Input { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Input { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Input { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -840,8 +844,12 @@ extension Label: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAtt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Label { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Label { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Label { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1391,8 +1399,12 @@ extension Select: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Select { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Select { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Select { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1875,8 +1887,12 @@ extension TextArea: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> TextArea { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> TextArea { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> TextArea { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -2492,8 +2508,12 @@ extension Button: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Button { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Button { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Button { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -3107,8 +3127,12 @@ extension Fieldset: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Fieldset { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Fieldset { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Fieldset { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/HeadElements.swift b/Sources/HTMLKit/Abstraction/Elements/HeadElements.swift index cd2d9d97..c4a9fd00 100644 --- a/Sources/HTMLKit/Abstraction/Elements/HeadElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/HeadElements.swift @@ -196,8 +196,12 @@ extension Title: GlobalAttributes, GlobalEventAttributes { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Title { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Title { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Title { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -493,8 +497,12 @@ extension Base: GlobalAttributes, GlobalEventAttributes, ReferenceAttribute, Tar return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Base { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Base { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Base { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -788,8 +796,12 @@ extension Meta: GlobalAttributes, GlobalEventAttributes, ContentAttribute, NameA return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Meta { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Meta { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Meta { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1126,8 +1138,12 @@ extension Style: GlobalAttributes, GlobalEventAttributes, TypeAttribute, MediaAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Style { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Style { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Style { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1448,8 +1464,12 @@ extension Link: GlobalAttributes, GlobalEventAttributes, ReferenceAttribute, Ref return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Link { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Link { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Link { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/HtmlElements.swift b/Sources/HTMLKit/Abstraction/Elements/HtmlElements.swift index 45b7129c..a148f760 100644 --- a/Sources/HTMLKit/Abstraction/Elements/HtmlElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/HtmlElements.swift @@ -194,8 +194,12 @@ extension Head: GlobalAttributes, GlobalEventAttributes { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Head { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Head { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Head { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -498,8 +502,12 @@ extension Body: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Body { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Body { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Body { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/InputElements.swift b/Sources/HTMLKit/Abstraction/Elements/InputElements.swift index 6c2c40c6..330fc051 100644 --- a/Sources/HTMLKit/Abstraction/Elements/InputElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/InputElements.swift @@ -209,8 +209,12 @@ extension OptionGroup: GlobalAttributes, GlobalEventAttributes, GlobalAccessibil return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> OptionGroup { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> OptionGroup { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> OptionGroup { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -763,8 +767,12 @@ extension Option: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Option { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Option { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Option { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1349,8 +1357,12 @@ extension Legend: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAt return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Legend { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Legend { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Legend { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1883,8 +1895,12 @@ extension Summary: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityA return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Summary { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Summary { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Summary { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/ListElements.swift b/Sources/HTMLKit/Abstraction/Elements/ListElements.swift index b7a3b824..afddf0c4 100644 --- a/Sources/HTMLKit/Abstraction/Elements/ListElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/ListElements.swift @@ -203,8 +203,12 @@ extension ListItem: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> ListItem { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> ListItem { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> ListItem { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/MapElements.swift b/Sources/HTMLKit/Abstraction/Elements/MapElements.swift index c36882f2..5cb6863c 100644 --- a/Sources/HTMLKit/Abstraction/Elements/MapElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/MapElements.swift @@ -191,8 +191,12 @@ extension Area: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityAttr return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Area { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Area { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Area { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/MediaElements.swift b/Sources/HTMLKit/Abstraction/Elements/MediaElements.swift index c9599c68..b997b33d 100644 --- a/Sources/HTMLKit/Abstraction/Elements/MediaElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/MediaElements.swift @@ -184,8 +184,12 @@ extension Source: GlobalAttributes, GlobalEventAttributes, TypeAttribute, Source return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Source { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Source { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Source { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -529,8 +533,12 @@ extension Track: GlobalAttributes, GlobalEventAttributes, KindAttribute, SourceA return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Track { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Track { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Track { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/RubyElements.swift b/Sources/HTMLKit/Abstraction/Elements/RubyElements.swift index 24053bd5..d788f67a 100644 --- a/Sources/HTMLKit/Abstraction/Elements/RubyElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/RubyElements.swift @@ -205,8 +205,12 @@ extension RubyText: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> RubyText { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> RubyText { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> RubyText { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -743,8 +747,12 @@ extension RubyPronunciation: GlobalAttributes, GlobalEventAttributes, GlobalAcce return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> RubyPronunciation { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> RubyPronunciation { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> RubyPronunciation { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Abstraction/Elements/TableElements.swift b/Sources/HTMLKit/Abstraction/Elements/TableElements.swift index bff14b86..39eed5dc 100644 --- a/Sources/HTMLKit/Abstraction/Elements/TableElements.swift +++ b/Sources/HTMLKit/Abstraction/Elements/TableElements.swift @@ -228,8 +228,12 @@ extension Caption: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilityA return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Caption { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Caption { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Caption { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -761,8 +765,12 @@ extension ColumnGroup: GlobalAttributes, GlobalEventAttributes, SpanAttribute { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> ColumnGroup { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> ColumnGroup { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> ColumnGroup { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1059,8 +1067,12 @@ extension Column: GlobalAttributes, GlobalEventAttributes, SpanAttribute { return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> Column { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> Column { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> Column { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1367,8 +1379,12 @@ extension TableBody: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilit return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> TableBody { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> TableBody { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> TableBody { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -1917,8 +1933,12 @@ extension TableHead: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilit return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> TableHead { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> TableHead { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> TableHead { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -2467,8 +2487,12 @@ extension TableFoot: GlobalAttributes, GlobalEventAttributes, GlobalAccessibilit return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> TableFoot { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> TableFoot { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> TableFoot { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -3003,8 +3027,12 @@ extension TableRow: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> TableRow { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> TableRow { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> TableRow { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -3553,8 +3581,12 @@ extension DataCell: GlobalAttributes, GlobalEventAttributes, GlobalAccessibility return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> DataCell { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> DataCell { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> DataCell { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") @@ -4110,8 +4142,12 @@ extension HeaderCell: GlobalAttributes, GlobalEventAttributes, GlobalAccessibili return mutate(nonce: .init(value, context: .tainted(.html))) } - public func role(_ value: Values.Role) -> HeaderCell { - return mutate(role: .init(value.rawValue, context: .trusted)) + public func role(_ values: [Values.Role]) -> HeaderCell { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + public func role(_ values: Values.Role...) -> HeaderCell { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } @available(*, unavailable, message: "Use the spellcheck(_:) modifier instead.") diff --git a/Sources/HTMLKit/Framework/Rendering/EnumeratedList.swift b/Sources/HTMLKit/Framework/Rendering/EnumeratedList.swift index 33e1e0d5..88e61a85 100644 --- a/Sources/HTMLKit/Framework/Rendering/EnumeratedList.swift +++ b/Sources/HTMLKit/Framework/Rendering/EnumeratedList.swift @@ -84,6 +84,12 @@ extension EnumeratedList { self.values = values.map(\.rawValue) self.separator = separator } + + internal init(values: [Values.Role], separator: String) { + + self.values = values.map(\.rawValue) + self.separator = separator + } } extension EnumeratedList: Equatable { diff --git a/Tests/HTMLKitTests/AttributesTests.swift b/Tests/HTMLKitTests/AttributesTests.swift index 09389a03..3a68ccb9 100644 --- a/Tests/HTMLKitTests/AttributesTests.swift +++ b/Tests/HTMLKitTests/AttributesTests.swift @@ -153,8 +153,12 @@ final class AttributesTests: XCTestCase { return self.mutate(nonce: .init(value, context: .tainted(.html))) } - func role(_ value: Values.Role) -> Tag { - return self.mutate(role: .init(value.rawValue, context: .trusted)) + func role(_ values: [Values.Role]) -> Tag { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) + } + + func role(_ values: Values.Role...) -> Tag { + return mutate(role: .init(EnumeratedList(values: values, separator: " "), context: .trusted)) } func spellcheck(_ value: Bool = true) -> Tag { @@ -1364,11 +1368,15 @@ final class AttributesTests: XCTestCase { let view = TestView { Tag {}.role(.alert) + Tag {}.role([.alertDialog, .alert]) + Tag {}.role(.alertDialog, .alert) } XCTAssertEqual(try renderer.render(view: view), """ - + \ + \ + """ ) }