Skip to content

Child card fixes, kiosk first-come glow, nine new languages - #1256

Merged
tempus2016 merged 67 commits into
mainfrom
release/child-card-kiosk-languages
Nov 14, 2026
Merged

tempus2016 merged 67 commits into
mainfrom
release/child-card-kiosk-languages

Conversation

@tempus2016

Copy link
Copy Markdown
Owner

Merges ten finished local branches into main in one go: a round of fixes and new touches for the child card that came out of two design reviews, the kiosk follow-up to #1247, and nine new languages. No version bump here.

Child card

Shows the balance on every style. The Playroom, Console, Clean Pro, Accessible and Graphite headers now carry the child's points balance with the family's points icon, with points waiting for approval underneath. The title reads "{name}'s Chores" and the subtitle "3 of 5 left", or "All 5 done". Console uses the family's points name instead of "XP", and "Lvl" is now "Level".

Waiting for a grown-up. A chore a parent still has to approve no longer looks finished. It gets its own amber state with an hourglass on every style, on Classic and on pre-reader tiles. The celebration says "+5 when a grown-up checks it" instead of claiming the points, and screen readers hear the same. Finished rows show a tick and an undo arrow, waiting rows "Waiting", so "Done" only ever means the button.

All done. When every chore owed today is finished, an "All done, {name}!" banner shows today's total, with points still waiting listed separately, and the finished chores fold away. Zero chores says "Nothing to do right now" rather than "All Done!". The celebration now names the chore and follows the card's design style.

Chores first. On the designed styles today's chores sit straight under the header; badges and the next-badge goal move below the list. Classic keeps its order. Names wrap to two lines instead of cutting off, long lists get a progress bar and fold finished rows behind "Show finished", and the undo strip no longer pushes the list down after a tap.

Pre-reader mode. Tiles show the chore's picture (broom, plant, toothbrush) instead of identical clocks, follow the card's style in light and dark, and show progress as dots instead of text. Locked tiles keep their picture with a padlock, and undoing a finished tile takes two taps. The picture guesser understands every shipped language, and chores it can't place get a clipboard instead of a star that looked like points.

Easier to tap and to read. Every control reaches 44 px. Classic's "I'm stuck" moved out of the row that completes the chore, so a near miss can't tick it off, and it's now a quieter outlined chip. Text is at least 12 px and passes AA contrast in all six styles, light and dark: countdown, balance, points, number badges and done text. The Accessible style keeps to the Okabe-Ito colours throughout.

Accessibility. A polite live region announces completions, undo and help requests. Buttons name their chore ("Done: Make bed", "I'm stuck with Make bed"), rows and tiles say whether they're done, waiting or locked, and the avatar picker and badge strip work from the keyboard. Lock reasons are visible text on Classic and say more ("Too late for today, closed at 12:00").

Calmer motion. The empty-state and celebration-star animations play once instead of looping forever, the photo sheet and celebration ease out instead of overshooting, and every animation has a reduced-motion fallback. This keeps the card safe on older iPads used as kiosks.

Other. "Child not found" shows once, with a hint to check the card's settings. Two dim-text design tokens got darker so secondary text passes contrast: Playroom --tmd-dim #9C8676 to #776456, Clean Pro #6B7585 to #606978. This affects every card using those styles.

Kiosk

Follow-up to #1247: first-come chores that are up for grabs now glow, and once someone takes one the kiosk shows who got it first.

Languages

Adds Spanish, Chinese (Simplified), Russian, Japanese, Italian, Korean, Turkish, Ukrainian and Swedish to the cards, the panel and the Home Assistant integration strings. The newest strings, including the allowance payout dialog from 7.9.0, are translated into all twenty languages.

Checks

ESLint, frontend tests, pytest, ruff, translation parity, locale bundles and data files all pass locally. The child card changes were checked in all six styles at 375 and 768 px, light and dark, against ha-dev.

…lian, Korean, Turkish, Ukrainian and Swedish

Cards, admin panel, config flow, services, entity names and push
notifications now ship in nine more languages (es, zh-Hans, ru, ja, it,
ko, tr, uk, sv), taking TaskMate from 10 to 19 languages. Plural-heavy
languages (ru, uk) use count-neutral phrasing for the non-_one keys, as
Polish does. Locale bundles regenerated; docs and contributor checklists
list the new codes.
A first-come chore on the kiosk now has a still glow (no animation, so
old iPads stay safe, #1126). When a sibling or a grown-up finishes it
first, the row stays on the other children's lists, dimmed, with
"Malia got it first" (or "A grown-up did it") instead of vanishing.
It isn't counted towards the child's progress, so "all done" still
comes, and completed_mode: hide hides it with the done chores.

Strings in all 11 locales.
On Playroom, Console, Clean Pro, Accessible and Graphite the badge strip and next-badge goal now sit under the chore list, so the list is the first thing under the header. The reset countdown is a quieter inline note on the title row, and Classic keeps its layout.
The empty-state icon and celebration stars now play once with an exponential ease-out instead of looping, status pulses stop after two beats, and the elastic overshoot easing is gone. One reduced-motion block at the end of the stylesheet now covers every animation and movement transition in the card.
…face

Classic's "I'm stuck" and reminder bell move out of the tap-to-complete row into their own strip under it, so a near miss can no longer complete the chore. Every tappable control on the card now has at least a 44x44 hit area without overlapping its neighbours, and Accessible's Done is drawn at a full 44px.
… copy

The five designed headers now show the child's balance with the family's points icon, with pending points stacked beneath, and are titled "{name}'s Chores". Clean Pro's subtitle reads "N of M left", Console uses the configured points name instead of XP, open-ended chores say "Parent decides" instead of "+0", levels read "Level N", and row tooltips say tap rather than click.
…r tiles

Pre-reader tiles now use the same picture order as the designed rows (chore picture or icon, then the keyword guess, then time of day), so different chores no longer show identical clocks. Locked tiles show a padlock, and a done tile that a tap will undo shows an undo badge.
The keyword guess now matches whole words in every shipped language, ignoring case and accents, and checks specific categories before the catch-alls (cat before feed, car before clean and wash).
A completion still awaiting parent approval now gets its own row state (hourglass, warn colour, "Waiting for a grown-up") in every style, the celebration says the points come when a grown-up checks it, and an empty list reads "Nothing to do right now" unless the child finished something today.
Taps are announced through one polite live region, every Done and undo control is named for its chore, locked Classic rows show and announce why, and the avatar picker and badge strips work from the keyboard with visible focus rings. Text in every style now reaches WCAG AA at 12px or larger: done and locked rows fade their decoration instead of their words, Playroom and Clean Pro's dim text token was deepened, and Accessible's next-badge bar uses its Okabe-Ito accent.
# Conflicts:
#	custom_components/taskmate/www/locales/da/cards.json
#	custom_components/taskmate/www/locales/de/cards.json
#	custom_components/taskmate/www/locales/en-GB/cards.json
#	custom_components/taskmate/www/locales/en/cards.json
#	custom_components/taskmate/www/locales/fr/cards.json
#	custom_components/taskmate/www/locales/nb/cards.json
#	custom_components/taskmate/www/locales/nl/cards.json
#	custom_components/taskmate/www/locales/nn/cards.json
#	custom_components/taskmate/www/locales/pl/cards.json
#	custom_components/taskmate/www/locales/pt-BR/cards.json
#	custom_components/taskmate/www/locales/pt/cards.json
#	custom_components/taskmate/www/taskmate-child-card.js
# Conflicts:
#	custom_components/taskmate/www/locales/da/cards.json
#	custom_components/taskmate/www/locales/de/cards.json
#	custom_components/taskmate/www/locales/en-GB/cards.json
#	custom_components/taskmate/www/locales/en/cards.json
#	custom_components/taskmate/www/locales/fr/cards.json
#	custom_components/taskmate/www/locales/nb/cards.json
#	custom_components/taskmate/www/locales/nl/cards.json
#	custom_components/taskmate/www/locales/nn/cards.json
#	custom_components/taskmate/www/locales/pl/cards.json
#	custom_components/taskmate/www/locales/pt-BR/cards.json
#	custom_components/taskmate/www/locales/pt/cards.json
Playroom's undo chip said "Done! 🎉" on a row that is still waiting for approval. It now shows an hourglass until a grown-up has checked it.
The screen-reader announcement said the points were earned even when a parent still has to approve the chore. It now says they come once a grown-up checks it.
# Conflicts:
#	custom_components/taskmate/www/locales/da/cards.json
#	custom_components/taskmate/www/locales/de/cards.json
#	custom_components/taskmate/www/locales/en-GB/cards.json
#	custom_components/taskmate/www/locales/en/cards.json
#	custom_components/taskmate/www/locales/fr/cards.json
#	custom_components/taskmate/www/locales/nb/cards.json
#	custom_components/taskmate/www/locales/nl/cards.json
#	custom_components/taskmate/www/locales/nn/cards.json
#	custom_components/taskmate/www/locales/pl/cards.json
#	custom_components/taskmate/www/locales/pt-BR/cards.json
#	custom_components/taskmate/www/locales/pt/cards.json
The screen-reader announcement said the points were earned even when a parent still has to approve the chore. It now says they come once a grown-up checks it.
# Conflicts:
#	custom_components/taskmate/www/locales/da/cards.json
#	custom_components/taskmate/www/locales/de/cards.json
#	custom_components/taskmate/www/locales/en-GB/cards.json
#	custom_components/taskmate/www/locales/en/cards.json
#	custom_components/taskmate/www/locales/fr/cards.json
#	custom_components/taskmate/www/locales/nb/cards.json
#	custom_components/taskmate/www/locales/nl/cards.json
#	custom_components/taskmate/www/locales/nn/cards.json
#	custom_components/taskmate/www/locales/pl/cards.json
#	custom_components/taskmate/www/locales/pt-BR/cards.json
#	custom_components/taskmate/www/locales/pt/cards.json
A child with nothing to do saw "0 of 0 left" under their name, which read like a counting bug.
The strip floated between rows and could read as part of the row below. It is now indented to the chore name and tucked under its own row.
The pre-reader hourglass covered the chore picture; it is now a corner badge. Graphite's waiting note is plain text instead of a heavy pill, and the Done status on a waiting row carries the hourglass so the two don't contradict each other.
# Conflicts:
#	custom_components/taskmate/www/taskmate-child-card.js
# Conflicts:
#	custom_components/taskmate/www/taskmate-child-card.js
The header balance pill now sits on a deeper shade of the header colour, so its white text stays at 4.5:1 or better on every style, the Playroom gradient and light custom colours. The subtitle says "All 5 done" when nothing is left, Console counts "3 to do" instead of "3 ACTIVE", and a missing child is reported once with a hint to check the card's settings.
Locked chores now say when a past period closed and when a recurring chore is back, instead of "Time has passed" or "check back later".
When every chore owed today is done, the list opens with "All done, {name}!" and today's points, the mood check-in follows it, and the finished rows fold under a "Show today's chores" button. The celebration overlay now names the chore and takes its colours and fonts from the card's design, with Classic keeping its own look.
The pre-reader class left a trailing space when off, which other code matching the plain class name missed. The tile tests also find tiles by the start of their name.
# Conflicts:
#	custom_components/taskmate/www/taskmate-child-card.js
…ed rows

Chore names on the designed styles wrap to two lines before clipping, and the Undo strip now sits at the end of the card and sticks to the bottom of the screen, so it no longer pushes the list down. Long designed lists get a done/total bar under the title and fold finished rows behind a "Show finished" button; Playroom shows the number badge only on rows without a picture.
… rule is absent

Once the awaiting-approval rows are merged the card always knows the waiting state, so the fallback case can't occur.
…lass

Pre-reader mode can mark the badge strip and goal with an extra class; the order check shouldn't depend on it.
# Conflicts:
#	custom_components/taskmate/www/locales/da.json
#	custom_components/taskmate/www/locales/da/cards.json
#	custom_components/taskmate/www/locales/de.json
#	custom_components/taskmate/www/locales/de/cards.json
#	custom_components/taskmate/www/locales/en-GB.json
#	custom_components/taskmate/www/locales/en-GB/cards.json
#	custom_components/taskmate/www/locales/en.json
#	custom_components/taskmate/www/locales/en/cards.json
#	custom_components/taskmate/www/locales/fr.json
#	custom_components/taskmate/www/locales/fr/cards.json
#	custom_components/taskmate/www/locales/nb.json
#	custom_components/taskmate/www/locales/nb/cards.json
#	custom_components/taskmate/www/locales/nl.json
#	custom_components/taskmate/www/locales/nl/cards.json
#	custom_components/taskmate/www/locales/nn.json
#	custom_components/taskmate/www/locales/nn/cards.json
#	custom_components/taskmate/www/locales/pl.json
#	custom_components/taskmate/www/locales/pl/cards.json
#	custom_components/taskmate/www/locales/pt-BR.json
#	custom_components/taskmate/www/locales/pt-BR/cards.json
#	custom_components/taskmate/www/locales/pt.json
#	custom_components/taskmate/www/locales/pt/cards.json
#	custom_components/taskmate/www/taskmate-child-card.js
…ng it is a star

Rows decide whether to show the number badge by whether the chore has a picture. Ask the emoji guesser directly when it can say "no match" instead of comparing against the fallback glyph.
A row that shows its chore picture carries the hourglass on its chip rather than in a number badge.
…sk-languages

# Conflicts:
#	custom_components/taskmate/www/locales/da/cards.json
#	custom_components/taskmate/www/locales/de/cards.json
#	custom_components/taskmate/www/locales/en-GB/cards.json
#	custom_components/taskmate/www/locales/en/cards.json
#	custom_components/taskmate/www/locales/fr/cards.json
#	custom_components/taskmate/www/locales/nb/cards.json
#	custom_components/taskmate/www/locales/nl/cards.json
#	custom_components/taskmate/www/locales/nn/cards.json
#	custom_components/taskmate/www/locales/pl/cards.json
#	custom_components/taskmate/www/locales/pt-BR/cards.json
#	custom_components/taskmate/www/locales/pt/cards.json
Spanish, Chinese (Simplified), Russian, Japanese, Italian, Korean, Turkish, Ukrainian and Swedish were added before the allowance payout dialog, the kiosk first-come strings and the child card changes, so they were missing those 63 strings and still had two removed ones.
@github-actions github-actions Bot added documentation Improvements or additions to documentation ci CI, workflows, and tooling cards Lovelace cards / frontend (www/*.js) translations i18n / locale strings tests Test suite labels Nov 14, 2026
@tempus2016
tempus2016 merged commit 9dedc1f into main Nov 14, 2026
18 checks passed
@tempus2016
tempus2016 deleted the release/child-card-kiosk-languages branch November 14, 2026 23:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cards Lovelace cards / frontend (www/*.js) ci CI, workflows, and tooling documentation Improvements or additions to documentation tests Test suite translations i18n / locale strings

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant