# 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] ### 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. - **`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 `rememberNavSlideSpec()`. 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. - `FullScreenPicker` / `OptionPicker` — the full-screen single-select picker. - `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. ### 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`).