diff --git a/CHANGELOG.md b/CHANGELOG.md index 21f6261..2fa4ae4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/build.gradle.kts b/build.gradle.kts index 5d20a16..48ae938 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -10,5 +10,5 @@ plugins { subprojects { group = "de.jeanlucmakiola.floret" - version = "0.2.1" + version = "0.3.0" }