Files
Reflect/Shared/AccessibilityIdentifiers.swift
Trey T 8ae8d23f95 Add mood-specific selectable chip answers to guided reflection flow
Reduces friction in the guided reflection by offering predefined tappable
chip answers tailored to each mood category's therapeutic framework:
- Positive (Behavioral Activation): savoring emotions + reinforcing actions
- Neutral (ACT Cognitive Defusion): ambivalent feelings + defusion reframes + values
- Negative (CBT Thought Record): automatic negative thoughts + compassionate reframes + grounding actions

Chips appear between the question and text editor. Tapping toggles selection
and auto-fills the text field. "More" expander reveals additional options.
Free text always remains available alongside chips.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 13:37:55 -05:00

196 lines
7.1 KiB
Swift

//
// AccessibilityIdentifiers.swift
// Reflect (iOS)
//
// Centralized accessibility identifiers for XCUITest targeting.
//
import Foundation
enum AccessibilityID {
// MARK: - Tabs
enum Tab {
static let day = "tab_day"
static let month = "tab_month"
static let year = "tab_year"
static let insights = "tab_insights"
static let settings = "tab_settings"
}
// MARK: - Mood Buttons (voting header)
enum MoodButton {
static let great = "mood_button_great"
static let good = "mood_button_good"
static let average = "mood_button_average"
static let bad = "mood_button_bad"
static let horrible = "mood_button_horrible"
static func id(for moodStrValue: String) -> String {
"mood_button_\(moodStrValue.lowercased())"
}
}
// MARK: - Day View
enum DayView {
static let moodHeader = "mood_header"
static let entryList = "entry_list"
static let emptyState = "empty_state"
static let emptyStateNoData = "empty_state_no_data"
static func entryRow(dateString: String) -> String {
"entry_row_\(dateString)"
}
}
// MARK: - Entry Detail
enum EntryDetail {
static let sheet = "entry_detail_sheet"
static let doneButton = "entry_detail_done"
static let deleteButton = "entry_detail_delete"
static let noteButton = "entry_detail_note_button"
static let noteArea = "entry_detail_note_area"
static let moodGrid = "entry_detail_mood_grid"
}
// MARK: - Note Editor
enum NoteEditor {
static let textEditor = "note_editor_text"
static let saveButton = "note_editor_save"
static let cancelButton = "note_editor_cancel"
}
// MARK: - Guided Reflection
enum GuidedReflection {
static let sheet = "guided_reflection_sheet"
static let progressDots = "guided_reflection_progress"
static let textEditor = "guided_reflection_text_editor"
static let nextButton = "guided_reflection_next"
static let backButton = "guided_reflection_back"
static let saveButton = "guided_reflection_save"
static let cancelButton = "guided_reflection_cancel"
static func questionLabel(step: Int) -> String {
"guided_reflection_question_\(step)"
}
static let chipGrid = "guided_reflection_chip_grid"
static let chipMoreButton = "guided_reflection_chip_more"
static func chip(label: String) -> String {
"guided_reflection_chip_\(label)"
}
}
// MARK: - Settings
enum Settings {
static let header = "settings_header"
static let customizeTab = "settings_tab_customize"
static let settingsTab = "settings_tab_settings"
static let upgradeBanner = "upgrade_banner"
static let subscribeButton = "subscribe_button"
static let whyUpgradeButton = "why_upgrade_button"
static let clearDataButton = "settings_clear_data"
static let analyticsToggle = "settings_analytics_toggle"
static let showOnboardingButton = "settings_show_onboarding"
static let bypassSubscriptionToggle = "settings_bypass_subscription"
static let eulaButton = "settings_eula"
static let privacyPolicyButton = "settings_privacy_policy"
}
// MARK: - Customize
enum Customize {
static let themeSection = "customize_theme_section"
static let browseThemesButton = "browse_themes_button"
static let appThemePickerDoneButton = "apptheme_picker_done"
static let appThemePreviewCancelButton = "apptheme_preview_cancel"
static let appThemePreviewApplyButton = "apptheme_preview_apply"
static func themeButton(_ name: String) -> String {
"customize_theme_\(name.lowercased())"
}
static func votingLayoutButton(_ name: String) -> String {
"customize_voting_\(name.lowercased())"
}
static func dayViewStyleButton(_ name: String) -> String {
"customize_daystyle_\(name.lowercased())"
}
static func iconPackButton(_ name: String) -> String {
"customize_iconpack_\(name.lowercased())"
}
static func personalityPackButton(_ name: String) -> String {
"customize_personality_\(name.lowercased())"
}
static func appThemeCard(_ name: String) -> String {
"apptheme_card_\(name.lowercased())"
}
}
// MARK: - Paywall
enum Paywall {
static let monthOverlay = "paywall_month_overlay"
static let yearOverlay = "paywall_year_overlay"
static let insightsOverlay = "paywall_insights_overlay"
}
// MARK: - Day View Section Headers
enum DaySection {
static func header(month: Int, year: Int) -> String {
"day_section_\(month)_\(year)"
}
}
// MARK: - Insights
enum Insights {
static let header = "insights_header"
static let monthSection = "insights_month_section"
static let yearSection = "insights_year_section"
static let allTimeSection = "insights_all_time_section"
}
// MARK: - Month View
enum MonthView {
static let grid = "month_grid"
static let shareButton = "month_share_button"
}
// MARK: - Year View
enum YearView {
static let heatmap = "year_heatmap"
static let donutChart = "year_donut_chart"
static let barChart = "year_bar_chart"
static let statsSection = "year_stats_section"
static func cardHeader(year: Int) -> String { "year_card_header_\(year)" }
static let shareButton = "year_share_button"
}
// MARK: - Onboarding
enum Onboarding {
static let container = "onboarding_container"
static let welcomeScreen = "onboarding_welcome"
static let timeScreen = "onboarding_time"
static let dayScreen = "onboarding_day"
static let dayToday = "onboarding_day_today"
static let dayYesterday = "onboarding_day_yesterday"
static let styleScreen = "onboarding_style"
static let subscriptionScreen = "onboarding_subscription"
static let subscribeButton = "onboarding_subscribe_button"
static let skipButton = "onboarding_skip_button"
}
// MARK: - Reports
enum Reports {
static let segmentedPicker = "reports_segmented_picker"
static let dateRangePicker = "reports_date_range_picker"
static let quickSummaryButton = "reports_quick_summary_button"
static let detailedReportButton = "reports_detailed_report_button"
static let generateButton = "reports_generate_button"
static let progressView = "reports_progress_view"
static let cancelButton = "reports_cancel_button"
static let exportButton = "reports_export_button"
static let privacyConfirmation = "reports_privacy_confirmation"
static let minimumEntriesWarning = "reports_minimum_entries_warning"
static let exportDataButton = "reports_export_data_button"
}
// MARK: - Common
enum Common {
static let lockScreen = "lock_screen"
static let onboarding = "onboarding_sheet"
}
}