Skip to content

v0.25.0

Choose a tag to compare

@angel-ip angel-ip released this 02 Oct 18:18
· 589 commits to main since this release
a58b010

@kanzo-tech/ui

Findings: what a check found, behind one badge. A Badge that tallies the findings and opens a
popover listing them worst first, grouped by variant, each with a way to its place.

  • FindingsRoot takes findings — anything with an id and a variant ("destructive" | "warning" | "info", Diagnostic's) — and onSelect. It is Ark's Popover, so open,
    defaultOpen and onOpenChange work as they do there.
  • FindingsTrigger is painted by the worst variant present; its child is the tally in your words,
    as a function of { destructive, warning, info, total }. With nothing found it is a static
    success badge, not a button.
  • FindingsContent (title, description), FindingsGroup (variant, title, and a function from
    a finding to its row), FindingsGoTo (closes the popover, then calls onSelect with the row's
    finding).
  • useFindings and useFinding reach the same state from a part of your own.

No part authors a word: every label is a prop or a child of the part that draws it.

PreferencesSections draws a picture for a contributed choice. Pass specimens, keyed
namespace.preference, and that choice's options become cards with the picture over the name — the
way the core draws density:

<PreferencesSections
  specimens={{ "playground.layout": (option) => <LayoutGlyph layout={option.value} /> }}
/>

A choice without one is still a list.

@kanzo-tech/ai

Assist takes a context of its own. What the host knows about one field that its label and
description do not say — the values it accepts, its limits, what its neighbours hold — is told to the
model under Field context, before the provider's form context. A string, or a function read when the
field asks:

<Assist context={() => describeConstraints(field)} onValueChange={setValue} value={value}>
  <Input />
</Assist>

instructions stays the one-sentence instruction it was; nothing else changes.