release: floret-kit 0.3.0

Two new components since 0.2.1 — the onboarding shell (OnboardingScaffold,
OnboardingProgress, BenefitRow) that Calendula's first-run wizard is built
on, and SnackChip, the compact confirmation converged from Agendula's and
Calendula's undo chips — plus grouped-list and picker richness (long-press
rows, styled row text, exported GroupedListInset, per-option summaries,
public SelectedCheck, AboutCard in a group) and two fixes: all-day values
rendering a day early west of UTC, and full-screen picker bar icons
following the XML theme rather than the running one.

The changelog had gone unwritten since 0.2.1; this backfills every entry.
This commit is contained in:
makiolaj committed 2026-08-10 17:20:57 +02:00
1 parent 4e0b97538a
commit 05c79f2afc
2 files changed
+67 -6

No files matched your search

+66 -5
View File
@@ -6,16 +6,28 @@ All notable changes to floret-kit are documented here. The format follows
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.2.1`). Entries are grouped by module.
(currently `0.3.0`). Entries are grouped by module.
## [Unreleased]
## [0.3.0] - 2026-08-10
### Added
- **`components`** — `GroupedRow` takes an `AnnotatedString` title and summary
as well as plain `String`s, so a row can carry its own emphasis: marking the
run a search matched, without every caller having to rebuild the row. The
`String` overload delegates to it, so existing callers are unchanged.
- **`components`** — `OnboardingScaffold`, the shared shell for a first-run
flow: hero, body and a call-to-action stack, so the family's onboarding
screens read as one family while keeping their own mark. A multi-step flow
passes `progress`, which `OnboardingProgress` draws as one capsule per step
with the caller's own localised label, and `navigationIcon` for a step that
can be stepped back from — the navigation slot's width is reserved whether or
not it is filled and mirrored on the other side, so the progress stays centred
as steps come and go. `topSpacing` gives a step whose hero is a large picture
rather than a mark room to breathe; `contentPadding` is the scrolling column's
horizontal inset, which a step built from grouped rows passes 0 for since
those carry their own; and `scrollingActions` moves the actions off the bottom
bar onto the end of the content, for a step taller than the screen where a
pinned bar eats the room the content needs and hides that there is more below.
`BenefitRow` is the icon/title/body line those screens list their points with.
- **`components`** — `SnackChip`, the family's compact confirmation: a
content-sized pill sliding up from the bottom with an optional trailing action,
@@ -31,6 +43,55 @@ are no binary releases; "version" tracks the shared `version` in the root build
pill resizes with it, so an answered confirmation ("Moved" → "Move undone")
reads as one chip changing rather than two chips swapping.
- **`components`** — `GroupedRow` takes an `AnnotatedString` title and summary
as well as plain `String`s, so a row can carry its own emphasis: marking the
run a search matched, without every caller having to rebuild the row. The
`String` overload delegates to it, so existing callers are unchanged.
- **`components`** — `GroupedSurface`/`GroupedRow` take an `onLongClick` (with
the platform long-press haptic), for a list that enters a selection mode from
a row.
- **`components`** — `GroupedListInset`, the 16dp a grouped list keeps from the
screen edge, exported. It was a private literal, so everything sitting outside
the cards but belonging to them — section headers, hints, picker descriptions —
repeated the number and had drifted to 24dp in places, leaving pages with two
ragged left margins.
- **`components`** — `OptionPicker` takes a per-option summary, put under the
label, for a row that names something it doesn't spell out (a range's dates, a
reminder's firing time, what "follow the system" resolves to today). Every
option then shows its effect at once and stays comparable, without the cost of
a live preview. The KDoc states the three rungs of picker richness — plain
rows / per-option summary / live preview — and the rule that a preview picker
must not close on selection, since closing hides the thing it exists to show.
- **`components`** — `SelectedCheck`, the trailing check that marks a chosen row
in a full-screen picker, made public. It was private to `OptionPicker`, so
every consumer hand-rolled a copy — Calendula alone carried five, all drawing
a different check than the kit's.
- **`components`** — `AboutCard` takes a `Position` and renders through
`GroupedSurface`, so it can be the top of a group with rows continuing
underneath rather than only standing alone. Defaults to `Position.Alone`.
### Fixed
- **`core-time`** — all-day values rendered a day early west of UTC. All-day
items are date-only in iCalendar and stored as UTC midnight of their calendar
date, but `formatDate`/`formatDateTime`/`formatDateTimeCompact` resolved every
instant against `ZoneId.systemDefault()`. `formatDate` now takes an `allDay`
flag (default `false`, so existing call sites are unaffected) and resolves
those against UTC; callers must pass it at the call site.
- **`components`** — full-screen picker status/navigation-bar icons matched the
XML theme rather than the running one. A Compose `Dialog` owns its own window,
seeded from the XML theme, so a picker drawing under the bars showed dark icons
on a dark surface. `FloretExpressiveTheme` now exposes its resolved light/dark
decision as `LocalFloretDarkTheme` and the dialog window's bar appearance
follows it, tracking the in-app choice even when it diverges from the system
night qualifier.
## [0.2.1] - 2026-07-17
### Added
+1 -1
View File
@@ -10,5 +10,5 @@ plugins {
subprojects {
group = "de.jeanlucmakiola.floret"
version = "0.2.1"
version = "0.3.0"
}