From 9690f152ef0e970013e8967033644761431e0440 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Fri, 24 May 2024 08:34:56 -0500 Subject: [PATCH] =?UTF-8?q?CXTDT-556996=20RadioboxGroup=20=E2=80=93=20Voic?= =?UTF-8?q?e=20over=20does=20not=20render=20the=20group=20position=20for?= =?UTF-8?q?=20the=20radio=20box=20group.=20implemented=20groupable=20to=20?= =?UTF-8?q?ensure=20accessibilityValue=20is=20kept=20to=20help=20explain?= =?UTF-8?q?=20groups?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matt Bruce --- VDS/BaseClasses/Selector/SelectorGroupBase.swift | 2 +- VDS/BaseClasses/Selector/SelectorItemBase.swift | 5 ++++- VDS/Components/Checkbox/CheckboxGroup.swift | 2 +- VDS/Components/RadioBox/RadioBoxGroup.swift | 1 + VDS/Components/RadioBox/RadioBoxItem.swift | 16 +++++++++++++--- .../RadioButton/RadioButtonGroup.swift | 2 +- VDS/Components/Tabs/Tab.swift | 5 ++++- VDS/Components/Tabs/Tabs.swift | 2 +- 8 files changed, 26 insertions(+), 9 deletions(-) diff --git a/VDS/BaseClasses/Selector/SelectorGroupBase.swift b/VDS/BaseClasses/Selector/SelectorGroupBase.swift index 1639ab86..d2632a9d 100644 --- a/VDS/BaseClasses/Selector/SelectorGroupBase.swift +++ b/VDS/BaseClasses/Selector/SelectorGroupBase.swift @@ -39,7 +39,7 @@ extension SelectorGroupSingleSelect { } /// Base Class used for any Grouped Form Control of a Selector Type. -open class SelectorGroupBase: Control, SelectorGroup, Changeable { +open class SelectorGroupBase: Control, SelectorGroup, Changeable { //-------------------------------------------------- // MARK: - Private Properties diff --git a/VDS/BaseClasses/Selector/SelectorItemBase.swift b/VDS/BaseClasses/Selector/SelectorItemBase.swift index 3dd31dda..75f832ed 100644 --- a/VDS/BaseClasses/Selector/SelectorItemBase.swift +++ b/VDS/BaseClasses/Selector/SelectorItemBase.swift @@ -11,7 +11,7 @@ import Combine import VDSTokens /// Base Class used to build out a SelectorControlable control. -open class SelectorItemBase: Control, Errorable, Changeable { +open class SelectorItemBase: Control, Errorable, Changeable, Groupable { //-------------------------------------------------- // MARK: - Initializers @@ -145,6 +145,8 @@ open class SelectorItemBase: Control, Errorable, open var hiddenValue: AnyHashable? { didSet { setNeedsUpdate() } } + open var accessibilityValueText: String? + //-------------------------------------------------- // MARK: - Overrides //-------------------------------------------------- @@ -193,6 +195,7 @@ open class SelectorItemBase: Control, Errorable, open override func updateAccessibility() { super.updateAccessibility() setAccessibilityLabel(for: [selectorView, label, childLabel, errorLabel]) + accessibilityValue = accessibilityValueText } /// Resets to default settings. diff --git a/VDS/Components/Checkbox/CheckboxGroup.swift b/VDS/Components/Checkbox/CheckboxGroup.swift index 1df8d9cd..43b8890d 100644 --- a/VDS/Components/Checkbox/CheckboxGroup.swift +++ b/VDS/Components/Checkbox/CheckboxGroup.swift @@ -48,7 +48,7 @@ open class CheckboxGroup: SelectorGroupBase, SelectorGroupMultiSel $0.inputId = model.inputId $0.hiddenValue = model.value $0.accessibilityLabel = model.accessibileText - $0.accessibilityValue = "item \(index+1) of \(selectorModels.count)" + $0.accessibilityValueText = "item \(index+1) of \(selectorModels.count)" $0.labelText = model.labelText $0.labelTextAttributes = model.labelTextAttributes $0.childText = model.childText diff --git a/VDS/Components/RadioBox/RadioBoxGroup.swift b/VDS/Components/RadioBox/RadioBoxGroup.swift index e284840b..296ea8ed 100644 --- a/VDS/Components/RadioBox/RadioBoxGroup.swift +++ b/VDS/Components/RadioBox/RadioBoxGroup.swift @@ -56,6 +56,7 @@ open class RadioBoxGroup: SelectorGroupBase, SelectorGroupSingleSe $0.isSelected = model.selected $0.strikethrough = model.strikethrough $0.strikethroughAccessibilityText = model.strikethroughAccessibileText + $0.accessibilityValueText = "item \(index+1) of \(selectorModels.count)" } } } diff --git a/VDS/Components/RadioBox/RadioBoxItem.swift b/VDS/Components/RadioBox/RadioBoxItem.swift index 1a9d613f..f102b7c2 100644 --- a/VDS/Components/RadioBox/RadioBoxItem.swift +++ b/VDS/Components/RadioBox/RadioBoxItem.swift @@ -13,7 +13,7 @@ import VDSTokens /// Radio boxes are single-select components through which a customer indicates a choice /// that are used within a ``RadioBoxGroup``. @objc(VDSRadioBoxItem) -open class RadioBoxItem: Control, Changeable, FormFieldable { +open class RadioBoxItem: Control, Changeable, FormFieldable, Groupable { //-------------------------------------------------- // MARK: - Initializers @@ -130,7 +130,9 @@ open class RadioBoxItem: Control, Changeable, FormFieldable { open var value: AnyHashable? { hiddenValue } open var hiddenValue: AnyHashable? { didSet { setNeedsUpdate() } } - + + open var accessibilityValueText: String? + //-------------------------------------------------- // MARK: - Configuration Properties //-------------------------------------------------- @@ -241,7 +243,15 @@ open class RadioBoxItem: Control, Changeable, FormFieldable { open override func updateAccessibility() { super.updateAccessibility() setAccessibilityLabel(for: [textLabel, subTextLabel, subTextRightLabel]) - accessibilityValue = strikethrough ? strikethroughAccessibilityText : nil + if let accessibilityValueText { + accessibilityValue = strikethrough + ? "\(strikethroughAccessibilityText), \(accessibilityValueText)" + : accessibilityValueText + } else { + accessibilityValue = strikethrough + ? "\(strikethroughAccessibilityText)" + : accessibilityValueText + } } //-------------------------------------------------- diff --git a/VDS/Components/RadioButton/RadioButtonGroup.swift b/VDS/Components/RadioButton/RadioButtonGroup.swift index aecb8034..ca91f3e5 100644 --- a/VDS/Components/RadioButton/RadioButtonGroup.swift +++ b/VDS/Components/RadioButton/RadioButtonGroup.swift @@ -47,7 +47,7 @@ open class RadioButtonGroup: SelectorGroupBase, SelectorGroupSi $0.inputId = model.inputId $0.hiddenValue = model.value $0.accessibilityLabel = model.accessibileText - $0.accessibilityValue = "item \(index+1) of \(selectorModels.count)" + $0.accessibilityValueText = "item \(index+1) of \(selectorModels.count)" $0.labelText = model.labelText $0.labelTextAttributes = model.labelTextAttributes $0.childText = model.childText diff --git a/VDS/Components/Tabs/Tab.swift b/VDS/Components/Tabs/Tab.swift index e96e20d6..2dddef93 100644 --- a/VDS/Components/Tabs/Tab.swift +++ b/VDS/Components/Tabs/Tab.swift @@ -13,7 +13,7 @@ import Combine extension Tabs { @objc(VDSTab) - open class Tab: Control { + open class Tab: Control, Groupable { //-------------------------------------------------- // MARK: - Initializers @@ -89,6 +89,8 @@ extension Tabs { open override var shouldHighlight: Bool { false } + open var accessibilityValueText: String? + //-------------------------------------------------- // MARK: - Configuration //-------------------------------------------------- @@ -178,6 +180,7 @@ extension Tabs { open override func updateAccessibility() { super.updateAccessibility() accessibilityLabel = text + accessibilityValue = accessibilityValueText } open override func layoutSubviews() { diff --git a/VDS/Components/Tabs/Tabs.swift b/VDS/Components/Tabs/Tabs.swift index 225b3f98..ddef2ad6 100644 --- a/VDS/Components/Tabs/Tabs.swift +++ b/VDS/Components/Tabs/Tabs.swift @@ -303,7 +303,7 @@ open class Tabs: View { tabItem.orientation = orientation tabItem.surface = surface tabItem.indicatorPosition = indicatorPosition - tabItem.accessibilityValue = "\(index+1) of \(tabViews.count) Tabs" + tabItem.accessibilityValueText = "\(index+1) of \(tabViews.count) Tabs" } }