Problem
Fans render their hero card plus a FanFeatureSections (native List Sections) underneath for any "leftover" exposes — LED, child lock, filter age, etc. The other categories don't follow this pattern:
- Lights stuff Startup + Other-advanced features behind sheet buttons (
sunrise.fill, ellipsis) inside the card.
- Switches silently drop
power_on_behavior, child_lock, indicator config, timers — the card only knows about state + metering.
- Climate silently drops
fan_mode, preset, eco / schedule / valve / calibration features.
- Covers silently drop calibration / motor-speed style configs.
Result: a lot of meaningful configuration is either hidden in modal sheets or unreachable from the device detail screen.
Goal
Same pattern as fan, applied to every category:
- Hero card stays exactly as it is — hero values, primary controls, category-specific affordances (Effects on lights stay as a button — they're a true light-specific control, not configuration).
- Anything the hero doesn't bind to a primary control drops down as native iOS Settings
Sections beneath the card.
linkquality and identify* are always hidden (they're surfaced on the device card / are noisy diagnostics).
Implementation
- New shared primitives:
Shellbee/Shared/Components/SettingsFormRow.swift (Expose-driven row with inline slider for writable numerics) and Shellbee/Shared/Components/DeviceExtras.swift (eligibility filter with alwaysHidden list).
- New per-category section views:
LightFeatureSections, SwitchFeatureSections, ClimateFeatureSections, CoverFeatureSections.
LightControlCard gains a rendersAdvancedSheetsInline: Bool flag (defaults true so snapshot contexts unchanged); DeviceDetailView passes false and emits LightFeatureSections underneath.
DeviceDetailView is reorganised around a single heroAndSettingsSections(for:state:) builder that dispatches per category.
Acceptance criteria
- Light detail no longer shows the sunrise (Startup) and ellipsis (More) buttons inside the card; those features appear as a native "Startup" / "Configuration" section beneath the card. Effects (sparkles) still in the card.
- Switch / Climate / Cover detail screens surface their previously-hidden configuration as native sections beneath the card.
- No category surfaces
linkquality or identify* in any feature section.
- Hero cards (visual styling, primary controls) are unchanged.
Problem
Fans render their hero card plus a
FanFeatureSections(nativeListSections) underneath for any "leftover" exposes — LED, child lock, filter age, etc. The other categories don't follow this pattern:sunrise.fill,ellipsis) inside the card.power_on_behavior,child_lock, indicator config, timers — the card only knows about state + metering.fan_mode,preset, eco / schedule / valve / calibration features.Result: a lot of meaningful configuration is either hidden in modal sheets or unreachable from the device detail screen.
Goal
Same pattern as fan, applied to every category:
Sections beneath the card.linkqualityandidentify*are always hidden (they're surfaced on the device card / are noisy diagnostics).Implementation
Shellbee/Shared/Components/SettingsFormRow.swift(Expose-driven row with inline slider for writable numerics) andShellbee/Shared/Components/DeviceExtras.swift(eligibility filter withalwaysHiddenlist).LightFeatureSections,SwitchFeatureSections,ClimateFeatureSections,CoverFeatureSections.LightControlCardgains arendersAdvancedSheetsInline: Boolflag (defaultstrueso snapshot contexts unchanged);DeviceDetailViewpassesfalseand emitsLightFeatureSectionsunderneath.DeviceDetailViewis reorganised around a singleheroAndSettingsSections(for:state:)builder that dispatches per category.Acceptance criteria
linkqualityoridentify*in any feature section.