Skip to content

v0.16.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 15:03
· 2181 commits to main since this release

foldkit-mixins 0.8.0; foldkit-mixins-ui 0.7.0; foldkit-primitives 0.7.0;
foldkit-remote 0.13.0; foldkit-ssr 0.4.0; foldkit-cms 0.5.0;
foldkit-agent-webmcp 0.6.0. New: foldkit-composition, foldkit-builder and
foldkit-mixins-builder 0.1.0, experimental. Republished to re-pin:
foldkit-cms-drizzle 0.5.1, foldkit-crud 0.6.1, foldkit-data-grid 0.1.1,
foldkit-mixins-crud 0.6.3, foldkit-mixins-data-grid 0.1.1,
foldkit-mixins-form 0.4.3, foldkit-mixins-richtext 0.2.2,
foldkit-mixins-surface 0.5.2, foldkit-remote-drizzle 0.10.1 and
foldkit-remote-server 0.12.1, each of which pins a bumped package. Every
other package is unchanged.

The page builder ships, and the themes hold together. A page as Blocks in
Regions, stored and checked against a Catalog, and the Builder that edits it,
are published: drag a Block into any Region, an empty column included. The
OKLCH theme derives every surface and line from the page's own color, so a
dark scheme no longer pairs a grey page with a blue sidebar, and tints keep
their tone's hue. A page the browser draws afresh stays in view until its
reads answer, and WebMCP reaches older browsers and forms as declarative
tools.

Upgrading from 0.15

  • AgentWebMcp.documentModelContext() is pageModelContext()
    (foldkit-agent-webmcp), which also reads navigator.modelContext.
  • Cms.stateBadge(badge, h, state) takes no attribute (foldkit-cms): it
    writes Cms.stateAttribute (data-cms-state), as the list does; style it
    with Recipes.Badge({ attribute: Cms.stateAttribute, tones }).
  • An inline shorthand beside a conditional inline longhand of it is refused
    (foldkit-mixins, mixins:inline-shorthand-conflict): write the state as a
    rule (Style.self), or the whole shorthand in each state.
  • Theme.oklch's surfaces carry the base's chroma, no more
    (foldkit-mixins): a page that relied on panels more tinted than the page
    raises surfaceSaturation instead.

Added

  • foldkit-composition, foldkit-builder and foldkit-mixins-builder are
    published,
    at an experimental 0.1.0: a page as Blocks in Regions, stored
    and checked against a Catalog, and the page Builder that edits it, headless
    and drawn.
  • foldkit-mixins-ui: Recipes.InputGroup, pieces for a text field with
    a prefix or suffix drawn as one box: the group carries the border and the
    focus ring, the affix sits inside, the control goes borderless.
  • foldkit-cms: Cms.stateAttribute, data-cms-state, the one attribute
    every state the CMS draws is written in.
  • foldkit-ssr: SSR.hydrate's until. With otherwise: 'render', the
    fresh application draws hidden beside a declined page, which stays in view
    until a Model it drew satisfies until, then takes its place in one step (at
    most UNTIL_LIMIT_MS). The CMS site opened from the studio blinked to
    "Loading…" and back; it now waits for its reads.
  • foldkit-remote: RemoteData.answered, whether a read has an answer
    (Ready, Refreshing, Failed, NotFound).
  • foldkit-composition: QueryBlock.active(...).answered(model), whether
    every Query Block read on the page has an answer. QueryReader.query now
    returns a RemoteData Projection, as Remote's does.
  • foldkit-agent-webmcp: forms as declarative tools. AgentWebMcp.formTool(definition, name) writes a form's toolname and tooldescription, and each field's name and
    toolparamdescription, from the agent contract; register({ forms }) answers an agent's
    submission of such a form as the tool call (decoded, authorized, dispatched, through
    respondWith), ahead of the application's own OnSubmit, and leaves the capability out of
    the imperative registration in a browser that draws forms as tools
    (AgentWebMcp.declarativeTools()). The todo example's composer is add_todo's form.
  • The page Builder fills any Region by drag. In edit mode the Renderer
    draws an empty Region as an element of its own, named and marked
    data-composition-region (REGION_ATTRIBUTE); PointerDrag takes a
    part attribute and reports such an element as { id, zone: 'inside', part };
    the Builder's new DraggedOverRegion({ id, region }) lands a drop in that
    Region rather than the first that accepts the Block, and drag.over carries
    region. A Columns' right column could not be reached before; the CMS draws
    each empty Region as a dashed box to drop into.

Changed

  • foldkit-mixins: Theme.oklch's surfaces and outlines step from the
    base.
    Each surface step and outline is the base at another lightness, in
    its hue and with about its chroma (an outline a little more), so a sidebar, a
    panel, a hover and a border read as the page's one color at a few
    lightnesses, in both schemes. The outlines mixed near-neutral text into the
    base, and read grey on a tinted page. The page's tint is set by
    surfaceSaturation alone; raise it for a more tinted page (the CMS uses
    0.012).
  • foldkit-cms: stateBadge writes data-cms-state, as a list's state
    cell does, and takes no attribute: the badge wrote data-state and the cell
    data-cms-state, so one of them was always untoned. Style both with
    Recipes.Badge({ attribute: Cms.stateAttribute, tones }).
  • foldkit-mixins-ui: a Segmented pressed option is the accent's tint,
    flat, in the variants layer, where an icon button's own background no
    longer hides it.

Fixed

  • Examples: the todo list lines up. Rows draw a rule between them only, the
    delete and Clear completed buttons end at the list's edge, and the empty list
    says so centred with room around it.

  • Examples: the pages and registry demos keep one hue in both schemes. The
    pages demo drew its New page button as white ink in the dark and marked the open
    page in grey; both now use an accent at hue 270. The registry grid used a
    greyscale theme under tinted chrome; its palette now takes hue 270 and its
    text, lines and chips read the theme's tokens.

  • foldkit-mixins-ui: an unfilled button's hover reads on any ground. An
    outline, ghost or icon button hovered onto the tone's solid wash, near-white
    under the white text a colored band gives it, so the words vanished. The
    hover is now a faint tint of the button's own text color.

  • foldkit-mixins: scrollbars take the theme's line color, from the body
    defaults, rather than the browser's grey.

  • foldkit-agent-webmcp registers where an older browser looks.
    pageModelContext(), which replaces documentModelContext(), reads
    document.modelContext, where the spec and Chromium 150 put it, or else
    navigator.modelContext, which earlier Chromium and agent extensions still
    expose; the todo demo registered nothing for them.

  • foldkit-mixins: an inline shorthand beside a conditional longhand of it
    is refused
    (mixins:inline-shorthand-conflict). Clearing the longhand when
    the condition stopped holding cleared the shorthand's part too: the todo
    demo's filter pills and checkboxes kept a black border after a state ended.
    Its filters and checkboxes now write their states as rules.

  • foldkit-mixins-ui: an icon button's glyph is centered. The hidden words
    beside it kept the button's gap, which pushed the icon aside.

  • foldkit-mixins/theme: a tone's subtle keeps the tone's hue. The
    tint was mixed in OKLCH, which interpolates hue, so a mix mostly of a
    tinted base kept the base's hue: over a blue-grey base, the success tint
    came out blue under green text. Tints now mix in OKLab. foldkit-mixins-ui's
    Badge grounds a toned pill on the tone's subtle, so it follows.

  • examples/cms: the current section and the signed-in person are marked
    in the accent's tint rather than a surface step that barely differed from
    the sidebar, and so is the post list's chosen tab, flat, with no raised
    pill; New post is the accent's solid button, as the forms' submit is; New
    post, the search box and the tabs share one height; and the editor bar's
    state badge
    matches the attribute Cms.stateBadge writes, so it is toned.