Remove VolumePicker (replaced by SettingsSlider with SliderFormat.percentage)

This commit is contained in:
Matt Bruce 2026-01-04 17:52:08 -06:00
parent 95a20ac5a3
commit 835e41841b
3 changed files with 10 additions and 99 deletions

View File

@ -222,16 +222,20 @@ SettingsToggle(
isOn: $notificationsEnabled
)
// Volume slider
VolumePicker(label: "Volume", volume: $soundVolume)
// Slider with format helpers
SettingsSlider(
title: "Brightness",
subtitle: "Adjusts the brightness",
value: $brightness,
format: SliderFormat.percentage,
leadingIcon: Image(systemName: "sun.min"),
trailingIcon: Image(systemName: "sun.max.fill")
)
// Segmented picker
SegmentedPicker(
title: "Theme",
options: [
SegmentedOption(label: "Light", value: "light"),
SegmentedOption(label: "Dark", value: "dark")
],
options: [("Light", "light"), ("Dark", "dark")],
selection: $theme
)

View File

@ -538,20 +538,6 @@ SelectableRow(
---
### VolumePicker
A slider with speaker icons for volume/percentage values.
```swift
VolumePicker(
label: "Volume",
volume: $viewModel.volume,
accentColor: AppAccent.primary
)
```
---
### BadgePill
A capsule badge for values or tags.
@ -725,7 +711,6 @@ SettingsCard(backgroundColor: AppSurface.card, borderColor: AppBorder.subtle) {
| `SegmentedPicker` | Option selection | `title`, `options`, `selection` |
| `SettingsRow` | Action rows | `systemImage`, `title`, `action` |
| `SelectableRow` | Card selection | `title`, `isSelected`, `badge` |
| `VolumePicker` | Audio volume | `label`, `volume` |
| `BadgePill` | Price/tag badges | `text`, `isSelected` |
---

View File

@ -1,78 +0,0 @@
//
// VolumePicker.swift
// Bedrock
//
// A volume slider with speaker icons.
//
import SwiftUI
/// A volume slider with speaker icons.
///
/// Use this for audio volume or similar 0-1 range settings.
public struct VolumePicker: View {
/// The label for the picker.
public let label: String
/// Binding to the volume level (0.0 to 1.0).
@Binding public var volume: Float
/// The accent color for the slider.
public let accentColor: Color
/// Creates a volume picker.
/// - Parameters:
/// - label: The label text (default: "Volume").
/// - volume: Binding to volume (0.0-1.0).
/// - accentColor: The accent color (default: primary accent).
public init(
label: String = "Volume",
volume: Binding<Float>,
accentColor: Color = .Accent.primary
) {
self.label = label
self._volume = volume
self.accentColor = accentColor
}
public var body: some View {
VStack(alignment: .leading, spacing: Design.Spacing.small) {
HStack {
Text(label)
.font(.system(size: Design.BaseFontSize.medium, weight: .medium))
.foregroundStyle(.white)
Spacer()
Text("\(Int(volume * 100))%")
.font(.system(size: Design.BaseFontSize.body, weight: .medium, design: .rounded))
.foregroundStyle(.white.opacity(Design.Opacity.medium))
}
HStack(spacing: Design.Spacing.medium) {
Image(systemName: "speaker.fill")
.font(.system(size: Design.BaseFontSize.body))
.foregroundStyle(.white.opacity(Design.Opacity.medium))
Slider(value: $volume, in: 0...1, step: 0.1)
.tint(accentColor)
Image(systemName: "speaker.wave.3.fill")
.font(.system(size: Design.BaseFontSize.body))
.foregroundStyle(.white.opacity(Design.Opacity.medium))
}
}
.padding(.vertical, Design.Spacing.xSmall)
}
}
// MARK: - Preview
#Preview {
VStack(spacing: Design.Spacing.medium) {
VolumePicker(volume: .constant(0.8))
VolumePicker(label: "Music", volume: .constant(0.5))
}
.padding()
.background(Color.Surface.overlay)
}