// // RadialSegmentedRingView.swift // medmap // // Created by RSA on 15/09/2026. // import SwiftUI /// A single colored arc segment of a `RadialSegmentedRingView`. struct RadialRingSegment: Identifiable { let id = UUID() let percentage: Double let color: Color } /// Renders a ring made of proportional colored arc segments, with a small gap between each segment. struct RadialSegmentedRingView: View { let segments: [RadialRingSegment] var lineWidth: CGFloat = 6 var gapDegrees: Double = 6 private var total: Double { max(segments.reduce(0) { $0 + $1.percentage }, 0.0001) } var body: some View { ZStack { ForEach(Array(segments.enumerated()), id: \.element.id) { index, segment in let (start, end) = arcRange(for: index) Circle() .trim(from: start, to: end) .stroke(segment.color, style: StrokeStyle(lineWidth: lineWidth, lineCap: .round)) .rotationEffect(.degrees(-90)) } } } /// Computes the normalized (0...1) start/end trim values for the segment at `index`, leaving a small gap between segments. private func arcRange(for index: Int) -> (CGFloat, CGFloat) { let gapFraction = gapDegrees / 360 var start = 0.0 for i in 0..