Pure-Kotlin module, drawn from the duplicate reminder logic in Agendula and
Calendula: the lead-time unit model (ReminderUnit / decomposeReminderMinutes),
the per-target override model (ReminderOverride + reminderLeadFor /
applyReminderOverride) and the stored-format codec (ReminderOverrideCodec).
The codec's separators are configurable so each app keeps its on-disk format
(Agendula stores id:minutes, Calendula id=minutes) without a data migration.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The family's collapsing settings/sub-screen scaffold and the full-screen
single-select picker built on it (used for theme/list/reminder option dialogs).
Adds material-icons-core (ArrowBack/Check) and a generic 'back' string apps can
override. ReminderFormatting (labels over app-specific R.plurals + per-app
presets) deliberately NOT included — it needs a label-callback API, a separate
pass.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Phase 4 (components). The family's canonical grouped-row primitive
(GroupedSurface/GroupedRow + Position/positionOf, press-morphing tonal
container), the borderless InlineTextField (capitalization parameterized),
the OptionCard selection-dialog pick, and the pastelize() colour softener.
All app-agnostic (no R, no domain) and taken from Agendula's versions as the
canonical reference per design sign-off; apps keep their own identity chips
and compose their own screens from these. android-library, Compose-only.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
FloretExpressiveTheme(lightScheme, darkScheme, darkTheme, dynamicColor,
typography) holds the family's theme mechanics — dynamic-colour resolution
(API 31+), system light/dark fallback, and the STANDARD motion scheme — while
each app supplies its own seed-derived colour schemes, so the look stays
per-app and the machinery is shared. rememberNavSlideSpec() shares the fast
spatial nav slide. android-library, Compose-only.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
First Android-library module in the kit. Privacy-respecting crash capture
(writes a self-contained, allowlist-only report to private storage, chains to
the platform handler, uploads nothing), startup crash-loop detection, a report
dialog showing the full text before it leaves the device, and an issue-tracker
hand-off. Extracted from Calendula and generalised: app label + issue URLs come
from a CrashConfig supplied at install(); each app keeps its own thin themed
CrashReportActivity. Lean deps (Compose + core-ktx). 3 unit tests on the pure
report builder.
Adds AGP/android-library + compose plugins and the compose/core-ktx libs to the
kit catalog; core-time stays a plain JVM module.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Calendula scans its whole source tree (incl. this submodule) for the literal
token as a reproducibility guard; the explanatory comment shouldn't trip it.
No behavioural change.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Calendula consumes the kit as an included build and publishes via official
F-Droid reproducible builds, whose offline source scanner rejects the foojay
toolchain resolver (it can fetch a JDK at build time). The kit never used a
Java toolchain block — modules set jvmTarget directly — so the resolver was
dead weight that would have broken Calendula's reproducibility invariant.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Generic content-provider time bridge shared by the family: Long epoch millis
<-> kotlin.time.Instant. Extracted from Calendula for Phase 1 (Calendula as the
second core-time consumer). 3 unit tests; module suite now 5 green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
First module of floret-kit, the shared Material 3 Expressive design system +
plumbing for the Floret app family. core-time is a pure-Kotlin JVM library
(DayWindow local-day boundaries + locale/zone-aware Instant formatting),
extracted from Agendula. Standalone build + 2 unit tests green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>