Finalize the 0.1.0 CHANGELOG entry (first tagged release). Consumed from source via git submodule; tagging gives apps a stable, traceable pin. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
82 lines
4.8 KiB
Markdown
82 lines
4.8 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to floret-kit are documented here. The format follows
|
|
[Keep a Changelog](https://keepachangelog.com/).
|
|
|
|
floret-kit is consumed **from source** — each app embeds it as a git submodule
|
|
and builds it through a Gradle composite build, pinning a specific commit. There
|
|
are no binary releases; "version" tracks the shared `version` in the root build
|
|
(currently `0.1.0`). Entries are grouped by module.
|
|
|
|
## [Unreleased]
|
|
|
|
## [0.1.0] - 2026-07-07
|
|
|
|
### Added
|
|
|
|
- **`core-time`** (JVM library) — pure-Kotlin date/time helpers, no Android and
|
|
no third-party dependencies:
|
|
- `DayWindow.today()` — local-day boundaries for smart-list logic.
|
|
- `Instant.formatDate()` / `formatTime()` / `formatDateTime()` — locale- and
|
|
zone-aware display formatting over `kotlin.time.Instant`.
|
|
- `TimeBridge` — `Long` epoch-millis ↔ `Instant`, for content-provider I/O.
|
|
- `LocalDate.isoWeekNumber()` — ISO-8601 week-of-week-based-year, the
|
|
calendar-week number for week/month grids (one scheme, shared).
|
|
- **`core-crash`** (Android library) — privacy-respecting, on-device crash
|
|
capture and reporting. Writes an allowlist-only report (app/Android/device
|
|
version, locale, time, stack trace — nothing else) to private storage and
|
|
chains to the platform handler; uploads nothing. Includes startup crash-loop
|
|
detection, a report dialog that shows the full text before it leaves the
|
|
device, and an issue-tracker hand-off. Per-app specifics (display name, issue
|
|
URLs) come from a `CrashConfig` supplied at `install()`; each app keeps its
|
|
own thin themed `CrashReportActivity`.
|
|
- **`identity`** (Android library) — the family's Material 3 Expressive theme
|
|
factory `FloretExpressiveTheme(lightScheme, darkScheme, …)` (dynamic colour on
|
|
API 31+, system light/dark fallback, the standard motion scheme) plus the
|
|
shared motion helpers — `rememberNavSlideSpec()`, the content transitions,
|
|
`Modifier.predictiveBack()` and `Modifier.animateContentSizeMotion()` (eases a
|
|
block's own height changes, e.g. a text field wrapping to a new line), each
|
|
reduced-motion-aware. Each app passes its own seed-derived colour schemes
|
|
and typography — the mechanics are shared, the look is not.
|
|
- **`components`** (Android library) — the shared Compose component vocabulary:
|
|
- `GroupedSurface` / `GroupedRow` + `Position` / `positionOf` — the canonical
|
|
press-morphing tonal grouped-row primitive (the Android-15 settings pattern).
|
|
- `InlineTextField` — the borderless tonal text input (capitalization is a
|
|
parameter).
|
|
- `OptionCard` — the sanctioned selection-dialog pick.
|
|
- `CollapsingScaffold` — the collapsing settings/sub-screen scaffold; set
|
|
`largeTopBar = false` for a pinned single-line bar (the picker variant).
|
|
- `FullScreenPicker` / `OptionPicker` — the full-screen single-select picker,
|
|
now over a pinned single-line bar (a picker is a short list, so no tall
|
|
collapsing header to scroll past). `FullScreenPicker` takes an optional
|
|
`actions` slot (app-bar trailing items) for pickers that carry a commit or
|
|
extra action — a custom-value **Add**/**OK**, a **Reset**.
|
|
- `ReorderableColumn` — dependency-free drag-to-reorder for the short, fixed
|
|
grouped-card Settings lists; pairs with `GroupedRow(gapBelow = false)`, which
|
|
hands the column uniform control of row spacing.
|
|
- `DebugRibbon` — a stark, un-themed "DEBUG" corner ribbon; gate on
|
|
`BuildConfig.DEBUG` at the call site.
|
|
- `InlineTextField` gained `enabled` (a disabled field dims to a locked value).
|
|
- `pastelize()` — softens a raw provider colour to a theme-fitting pastel.
|
|
|
|
App-agnostic by design: apps compose their own screens and keep their own
|
|
identity chips/icons. String resources here (e.g. `back`) are fallbacks an app
|
|
can override.
|
|
- **`core-reminders`** (JVM library) — the app-agnostic reminder-override model:
|
|
`ReminderOverride` (`Inherit` / `None` / `Minutes`), where `Minutes` carries a
|
|
**list** of lead-times so a target can hold several reminders at once (an app
|
|
that offers a single reminder just uses a one-element list). Map helpers
|
|
(`reminderOverrideFor`, `reminderLeadsFor`, `applyReminderOverride`,
|
|
`reminderOverrideForMinutes`, `normalizeReminders`) plus `ReminderOverrideCodec`
|
|
(three configurable separators; single legacy values round-trip byte-identically)
|
|
and the lead-time unit model (`ReminderUnit`, `decomposeReminderMinutes`). The
|
|
labels/presets and the alarm scheduler stay per-app.
|
|
|
|
### Conventions
|
|
|
|
- **No `foojay` toolchain resolver** anywhere — it can fetch a JDK at build time,
|
|
which reproducible / official F-Droid builds reject. Modules set `jvmTarget`
|
|
directly. See [`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md).
|
|
- AGP 9.x provides built-in Kotlin compilation, so Android modules apply only the
|
|
Android library + Compose plugins (no separate `kotlin.android`).
|