Skip to content
Merged
58 changes: 58 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,64 @@

## [Не выпущено]

### Добавлено

- **Подпись сброса недельного лимита в заголовке панели показывает число
месяца.** Было «сброс ПТ 16:00» — теперь «сброс 14 ПТ 16:00». День недели
один на всё окно и сам по себе не путал, с каким днём сравнивать, но число
рядом читается без счёта в уме.
- **Настройка «Дневной план»** (вкладка «Общие» → «Расширенные настройки»):
выключает семь суточных полос с планом и парой чисел «факт / план», оставляя
одну полосу на всю неделю — тот же вид, что у пятичасовой сессии, голый
процент без сравнения с графиком. Выключена по умолчанию: панель из коробки
— пятичасовая сессия и итог недели, без разбора по дням; включается тем,
кому разбор нужен. Заливка этой полосы (и заодно полосы пятичасовой сессии —
раньше у неё заливка на красный порог не реагировала вовсе) краснеет на
критическом пороге: рядом с ней нет плановой зоны, с которой красный
сливался бы на дейтеранопии, — та причина, по которой суточные полосы
заливку красным не красят, здесь не применима.

### Изменено

- **Окно настроек тянется мышью по высоте, а ширина зафиксирована.** Форма
`.grouped` в macOS сама не даёт своим строкам стать шире примерно
семисот точек, и лишняя ширина уходила не в настройки, а в пустые поля по
бокам. Длинные вкладки прокручиваются — растянуть окно вниз можно, чтобы
увидеть их целиком. Шрифт подсказок под настройками увеличен, а сами они
теперь идут во всю ширину окна, а не только в узкую колонку значений формы.
- **Вкладка «Общие» перестроена.** Пояснения под «Языком» и «Источником
данных» убраны; вариант источника «Официальный, с падением на локальный»
назван короче — «Всегда онлайн». Внизу вкладки — раскрывающийся пункт
**«Расширенные настройки»** (свёрнут по умолчанию, целиком нажимается вся
строка заголовка, а не системный треугольник размером с букву): в нём
«Дневной план» и «Показывать» (переехали со вкладки «Панель», так как без
дневного плана они ни на что не влияют), «Начало недели», «Таймзона» и
«Рабочий день». Заводской рабочий день сменился с «Вечерний 11–24» на
«Рабочий день 10–18».
- **Вкладка «Строка меню»**: пороги цвета («Недельный лимит» и «Пятичасовая
сессия») убраны под такую же раскрывающуюся секцию «Расширенные настройки».
- **Вкладка «Панель»** лишилась секции «Суточные полосы» целиком — «Дневной
план» и «Показывать» теперь на вкладке «Общие».
- **Вкладка «Уведомления»**: три абзаца пояснений убраны, пороги обоих
лимитов — под раскрывающейся секцией «Расширенные настройки».
- **Вкладка «Доступ» сокращена в разы**: секции «Можно и без токена» и «Если
macOS снова спросила доступ» удалены целиком, абзацы про метку аккаунта и
про токен сжаты до одной фразы каждый. Из интерфейса ушло только
повторение — тот же текст остаётся в [docs/USAGE.md](docs/USAGE.md).

### Исправлено

- Строка пятичасовой сессии в панели не краснела на критическом пороге (по
умолчанию 95 %): значок ⚠ и цифра процента загорались красным только при
полном исчерпании лимита (100 %), хотя строка меню и заголовок недельного
лимита красятся раньше, уже на критическом пороге. Теперь оба элемента
строки сессии следуют тому же порогу. Заливка самой полосы по-прежнему не
становится красной — это сделано намеренно, ради различимости при
дальтонизме, — тревога, как и раньше, живёт в значке и цифре.
- Сводка футера («осталось 42 % · сброс через 3 дн 18 ч») была на кегль мельче
строки «сброс …» под пятичасовой сессией — разница читалась как случайная.
Теперь обе строки одного кегля.

## [0.1.14] — 2026-08-19

### Добавлено
Expand Down
10 changes: 6 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -132,10 +132,12 @@ Code сбрасывает каждым обновлением токена, и
## Что показывает

- **Неделя с планом** — семь суточных полос: факт, плановая зона, перерасход.
100 % лимита раскладываются по **рабочим часам** (по умолчанию 11:00 → 00:00),
а не по астрономическим: сон не должен весить столько же, сколько работа.
Ряд идёт с понедельника, а сутки, прошедшие сразу после сброса, стоят под
чертой в конце; в настройках его можно развернуть от дня сброса.
Включается в настройках галкой «Дневной план» (по умолчанию панель короче —
без разбора по дням, только сессия и итог недели). 100 % лимита
раскладываются по **рабочим часам** (по умолчанию 10:00 → 18:00), а не по
астрономическим: сон не должен весить столько же, сколько работа. Ряд идёт
с понедельника, а сутки, прошедшие сразу после сброса, стоят под чертой в
конце; в настройках его можно развернуть от дня сброса.
- **Пятичасовую сессию** — отдельной строкой над сутками, с часом сброса. Тот
лимит, в который упираются чаще недельного.
- **Прогноз** — «при таком темпе кончится ПТ 15:57», тоже по рабочим часам.
Expand Down
6 changes: 5 additions & 1 deletion Sources/ClaudeWeekApp/PanelModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -133,8 +133,12 @@ final class PanelModel {

/// Сколько строк рисовать до прихода данных: столько же, сколько потом,
/// иначе панель дёрнется в высоте, когда данные наконец придут.
///
/// Дневной план выключен — на месте дней всегда одна полоса недели, и
/// плейсхолдер-заглушка тоже одна: считать дни окна незачем.
var placeholderRows: Int {
showsWholeWeek ? WeekWindow(containing: now, config: config).rowCount : 1
guard config.appearance.showsPlan else { return 1 }
return showsWholeWeek ? WeekWindow(containing: now, config: config).rowCount : 1
}

/// Пятичасовая сессия — только пока её окно не истекло. После сброса от
Expand Down
25 changes: 21 additions & 4 deletions Sources/ClaudeWeekApp/PopoverView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -55,11 +55,15 @@ struct PopoverView: View {
if let snapshot = model.snapshot {
// Разбивка встаёт ровно на место дней, в ту же сетку: щелчок
// по цифрам меняет содержание строк, а не открывает второе
// место, где те же проценты сказаны по-своему.
// место, где те же проценты сказаны по-своему. Дневной план
// выключен в настройках — дней вовсе нет, и на их месте одна
// полоса на всю неделю, тем же видом, что у сессии.
if model.showsModels {
models(snapshot)
} else {
} else if appearance.showsPlan {
days(snapshot)
} else {
weekRow(snapshot)
}
} else {
placeholders
Expand Down Expand Up @@ -224,6 +228,19 @@ struct PopoverView: View {
}
}

// MARK: Неделя без плана

/// Замена ряда дней, когда дневной план выключен: голый процент недели
/// одной полосой.
private func weekRow(_ snapshot: UsageSnapshot) -> some View {
WeekRow(
usedPercent: snapshot.usedPercent,
state: model.state,
animated: !reduceMotion,
onValueTap: toggleModels
)
}

// MARK: Модели

/// Разбивка на месте дней. Возвращает обратно тот же клик по цифрам —
Expand Down Expand Up @@ -306,15 +323,15 @@ struct PopoverView: View {
HStack(alignment: .firstTextBaseline) {
VStack(alignment: .leading, spacing: 2) {
Text(summary)
.font(Theme.footerFont)
.font(Theme.captionFont)
.foregroundStyle(
model.resetIsClose ? palette.warning.color : palette.secondaryText.color
)
.fixedSize(horizontal: false, vertical: true)

if appearance.showForecast, let forecast {
Text(forecast)
.font(Theme.footerFont)
.font(Theme.captionFont)
.foregroundStyle(palette.critical.color)
}
}
Expand Down
20 changes: 12 additions & 8 deletions Sources/ClaudeWeekApp/Screenshot.swift
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,12 @@ enum Screenshot {
// Порядок строк — тоже вид, а не окно: картинки должны показывать
// заводскую неделю от понедельника, чей бы конфиг ни лежал рядом.
config.weekStart = Config.default.weekStart
// Единственное отступление от заводского вида: недельный ряд. Из
// коробки панель компактная, но картинка в README должна показывать
// то, ради чего программа написана, — все семь суток разом. Как
// свернуть панель до сегодняшнего дня, сказано в руководстве.
// Два отступления от заводского вида, оба ради одной и той же
// картинки: панель из коробки короче — без дневного плана и с
// компактным рядом, — а в README нужно показать то, ради чего
// программа написана, — все семь суток разом с плановой зоной. Как
// свернуть их обратно, сказано в руководстве.
config.appearance.showsPlan = true
config.appearance.panelLayout = .week
// Материал строки меню в оффскрин-рендер не попадает — фон рисуем
// сплошным цветом палитры.
Expand Down Expand Up @@ -255,12 +257,14 @@ enum Screenshot {
)

// Высота больше оконной: в живом окне вкладка прокручивается, а на
// картинке нужны все три секции разом — иначе нижнюю половину
// настроек пришлось бы пересказывать словами.
// картинке нужны все секции разом — иначе нижнюю половину настроек
// пришлось бы пересказывать словами. Пороги — с ходу раскрытыми:
// свёрнутая по умолчанию секция на этом снимке прятала бы то, ради
// чего он вообще существует.
return hosted(
NotificationSettings(model: model)
NotificationSettings(model: model, showsAdvanced: true)
.environment(\.colorScheme, name == .darkAqua ? .dark : .light),
size: NSSize(width: 640, height: 830),
size: NSSize(width: SettingsView.width, height: 780),
appearance: appearance
)
}
Expand Down
Loading