Files
steipete--codexbar/Sources/CodexBarWidget/CodexBarWidgetBundle.swift
T
2026-07-13 12:22:33 +08:00

116 lines
3.6 KiB
Swift

import SwiftUI
import WidgetKit
@main
struct CodexBarWidgetBundle: WidgetBundle {
var body: some Widget {
CodexBarSwitcherWidget()
CodexBarUsageWidget()
CodexBarHistoryWidget()
CodexBarCompactWidget()
CodexBarBurnDownWidget()
CodexBarCombinedBurnDownWidget()
}
}
struct CodexBarSwitcherWidget: Widget {
private let kind = "CodexBarSwitcherWidget"
var body: some WidgetConfiguration {
StaticConfiguration(
kind: self.kind,
provider: CodexBarSwitcherTimelineProvider())
{ entry in
CodexBarSwitcherWidgetView(entry: entry)
}
.configurationDisplayName("CodexBar Switcher")
.description("Usage widget with a provider switcher.")
.supportedFamilies([.systemSmall, .systemMedium, .systemLarge])
}
}
struct CodexBarUsageWidget: Widget {
private let kind = "CodexBarUsageWidget"
var body: some WidgetConfiguration {
AppIntentConfiguration(
kind: self.kind,
intent: ProviderSelectionIntent.self,
provider: CodexBarTimelineProvider())
{ entry in
CodexBarUsageWidgetView(entry: entry)
}
.configurationDisplayName("CodexBar Usage")
.description("Session and weekly usage with credits and costs.")
.supportedFamilies([.systemSmall, .systemMedium, .systemLarge])
}
}
struct CodexBarHistoryWidget: Widget {
private let kind = "CodexBarHistoryWidget"
var body: some WidgetConfiguration {
AppIntentConfiguration(
kind: self.kind,
intent: ProviderSelectionIntent.self,
provider: CodexBarTimelineProvider())
{ entry in
CodexBarHistoryWidgetView(entry: entry)
}
.configurationDisplayName("CodexBar History")
.description("Usage history chart with recent totals.")
.supportedFamilies([.systemMedium, .systemLarge])
}
}
struct CodexBarCompactWidget: Widget {
private let kind = "CodexBarCompactWidget"
var body: some WidgetConfiguration {
AppIntentConfiguration(
kind: self.kind,
intent: CompactMetricSelectionIntent.self,
provider: CodexBarCompactTimelineProvider())
{ entry in
CodexBarCompactWidgetView(entry: entry)
}
.configurationDisplayName("CodexBar Metric")
.description("Compact widget for credits or cost.")
.supportedFamilies([.systemSmall])
}
}
struct CodexBarBurnDownWidget: Widget {
private let kind = "CodexBarBurnDownWidget"
var body: some WidgetConfiguration {
AppIntentConfiguration(
kind: self.kind,
intent: BurnDownSelectionIntent.self,
provider: BurnDownTimelineProvider())
{ entry in
BurnDownWidgetView(entry: entry)
}
.configurationDisplayName("CodexBar Burn Down")
.description("Remaining budget compared with an ideal steady burn rate.")
.supportedFamilies([.systemMedium])
}
}
struct CodexBarCombinedBurnDownWidget: Widget {
private let kind = "CodexBarCombinedBurnDownWidget"
var body: some WidgetConfiguration {
AppIntentConfiguration(
kind: self.kind,
intent: BurnProviderSelectionIntent.self,
provider: CombinedBurnDownTimelineProvider())
{ entry in
CombinedBurnDownWidgetView(entry: entry)
}
.configurationDisplayName("CodexBar Burn Down (Combined)")
.description("Session and weekly burn-down charts in one tile.")
.supportedFamilies([.systemMedium])
}
}