Files
floret-kit/CHANGELOG.md
Jean-Luc Makiola 25ec248e73 docs: changelog, docs/ set, CONTRIBUTING, LICENSE
Bring floret-kit up to the family's repo conventions:
- CHANGELOG.md (Keep a Changelog) — what each module added.
- README.md — full module table (core-time/core-crash/identity/components) +
  consumption notes and a docs index.
- docs/README.md (index), docs/ARCHITECTURE.md (module layering, the submodule +
  composite-build consumption model, JVM vs android-library, the reproducibility
  rules, the share-mechanics-not-look contract), docs/ROADMAP.md (extracted vs
  deferred vs deliberately-not-shared, from the cross-app survey).
- CONTRIBUTING.md — the no-app-coupling rules, how to add a module, how an app
  adopts the kit.
- LICENSE (MIT, matching the apps).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 13:42:53 +02:00

3.0 KiB

Changelog

All notable changes to floret-kit are documented here. The format follows Keep a Changelog.

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.
    • TimeBridgeLong 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.
  • AGP 9.x provides built-in Kotlin compilation, so Android modules apply only the Android library + Compose plugins (no separate kotlin.android).