-
-
Notifications
You must be signed in to change notification settings - Fork 80.7k
iOS: establish a unified design system / styling guide #98317
Copy link
Copy link
Open
Labels
P3Low-priority cleanup, docs, polish, ergonomics, or speculative work.Low-priority cleanup, docs, polish, ergonomics, or speculative work.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:otherThis issue has meaningful maintainer-visible impact outside the owned taxonomy.This issue has meaningful maintainer-visible impact outside the owned taxonomy.issue-rating: 🌊 off-meta tidepoolIssue quality rating does not apply to this item.Issue quality rating does not apply to this item.
Description
Metadata
Metadata
Assignees
Labels
P3Low-priority cleanup, docs, polish, ergonomics, or speculative work.Low-priority cleanup, docs, polish, ergonomics, or speculative work.clawsweeper:fix-shape-clearClawSweeper found a clear likely implementation shape for this issue.ClawSweeper found a clear likely implementation shape for this issue.clawsweeper:needs-maintainer-reviewClawSweeper marked this issue as needing maintainer review before automation.ClawSweeper marked this issue as needing maintainer review before automation.clawsweeper:needs-product-decisionClawSweeper marked this issue as needing a product or behavior decision.ClawSweeper marked this issue as needing a product or behavior decision.clawsweeper:no-new-fix-prClawSweeper does not recommend queueing a new automated fix PR for this issue.ClawSweeper does not recommend queueing a new automated fix PR for this issue.impact:otherThis issue has meaningful maintainer-visible impact outside the owned taxonomy.This issue has meaningful maintainer-visible impact outside the owned taxonomy.issue-rating: 🌊 off-meta tidepoolIssue quality rating does not apply to this item.Issue quality rating does not apply to this item.
Type
Fields
Priority
None yet
What Problem This Solves
The iOS app has grown organically with UI components scattered across files and multiple competing token systems. There is no single source of truth for colors, spacing, radii, typography, or reusable components. This leads to visual inconsistency, duplicated code, and makes it harder for contributors to build screens that look cohesive.
Component Inventory
An audit of the current codebase surfaces the following areas that need unification.
1. Design Tokens
Current state: Multiple competing token sources.
OpenClawBrandSources/Design/OpenClawBrand.swiftOpenClawProMetricSources/Design/OpenClawProComponents.swiftSettingsLayoutSources/Design/SettingsProTabSupport.swiftAgentLayoutSources/Design/AgentProTab.swiftChatUIConstantsOpenClawChatUI/ChatMessageViews.swiftOpenClawChatThemeOpenClawChatUI/ChatTheme.swiftNeeded: Single token module covering:
2. Primitive Components
Buttons — Currently fragmented across
.borderedProminent,.bordered,.plain,.borderlesswith inconsistent sizing (.largein onboarding,.small/.miniin-app). No shared primary/secondary button styles.OpenClawPrimaryButton— full-width, accent tint, large control sizeOpenClawSecondaryButton— bordered outline, accent tintOpenClawDangerButton— destructive variantOpenClawTextButton— minimal/plain action linksBanners/Alerts —
GatewayProblemBannerandTalkRuntimeIssueBannerare nearly identical but implemented separately.OpenClawBanner(severity: info/warning/error/pairing, optional actions, optional details sheet)OpenClawToast(extract fromVoiceWakeToast)Toggles — Custom switch implemented 3 times (
settingsSwitchIndicator,onboardingButtonToggle,skillToggle) with identical geometry due to iOS 26 NavigationStack crash.OpenClawTogglecomponentIcon Badges —
ProIconBadgeuses radius 8,CommandSessionRowuses radius 9,SettingsApprovalRowuses solid fill vs tinted fill.OpenClawIconBadgewith consistent sizing (30×30) and radiusInput Fields — Search field capsule implemented locally in 4 places (agent overview, skills, workboard, skill workshop).
OpenClawSearchFieldcomponentCards/Containers:
ProCardvsCommandPanel(thin wrapper) — consolidateStatus indicators:
ProStatusDot— already exists, verify consistent usageProgressViewoverlay, inline small, and text placeholder patternsCommandEmptyStateRow,emptyDetailRow, andstateSection("Empty")3. Layout Patterns
Screen templates — document and standardize:
OpenClawProBackground)Formfor settings-style input)Navigation chrome:
.navigationTitle(.inline)(agent sub-routes, docs)4. Status Colors
Multiple sources for the same semantic meaning:
OpenClawBrand.ok/warn/danger.orange,.yellow,.red.green,.orange,.yellow,.redOpenClawChatTheme.dangerOpenClawBrandsemantic tokens5. Interactive Patterns
.refreshable) — used across agent destinations but styling varies6. Documentation
apps/ios/DESIGN.md— living design guide covering all token scales, component catalog with usage examples, and screen layout patternsMigration Path
Suggested order to minimize disruption:
OpenClawBrand+OpenClawMetricSources/Design/GatewayProblemBanner/TalkRuntimeIssueBanner, merge background patternsDESIGN.mdas components stabilizeEvidence
Component inventory derived from full audit of
apps/ios/Sources/andapps/shared/OpenClawKit/Sources/OpenClawChatUI/.Key files with design debt:
OpenClawProComponents.swift(340+ LOC of core components + metric tokens)SettingsProTabSupport.swift(competing layout metrics + duplicate toggles)GatewayProblemView.swift/TalkRuntimeIssueBanner.swift(near-identical banners)OnboardingWizardView.swift(standalone spacing, unique button patterns)— Joel Nishanth · offlyn.AI