Repository navigation
v0.16.0
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()ispageModelContext()
(foldkit-agent-webmcp), which also readsnavigator.modelContext.Cms.stateBadge(badge, h, state)takes no attribute (foldkit-cms): it
writesCms.stateAttribute(data-cms-state), as the list does; style it
withRecipes.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
raisessurfaceSaturationinstead.
Added
foldkit-composition,foldkit-builderandfoldkit-mixins-builderare
published, at an experimental0.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'suntil. Withotherwise: 'render', the
fresh application draws hidden beside a declined page, which stays in view
until a Model it drew satisfiesuntil, then takes its place in one step (at
mostUNTIL_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.querynow
returns aRemoteDataProjection, as Remote's does.foldkit-agent-webmcp: forms as declarative tools.AgentWebMcp.formTool(definition, name)writes a form'stoolnameandtooldescription, and each field'snameand
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 ownOnSubmit, and leaves the capability out of
the imperative registration in a browser that draws forms as tools
(AgentWebMcp.declarativeTools()). The todo example's composer isadd_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);PointerDragtakes a
partattribute and reports such an element as{ id, zone: 'inside', part };
the Builder's newDraggedOverRegion({ id, region })lands a drop in that
Region rather than the first that accepts the Block, anddrag.overcarries
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
surfaceSaturationalone; raise it for a more tinted page (the CMS uses
0.012).foldkit-cms:stateBadgewritesdata-cms-state, as a list's state
cell does, and takes no attribute: the badge wrotedata-stateand the cell
data-cms-state, so one of them was always untoned. Style both with
Recipes.Badge({ attribute: Cms.stateAttribute, tones }).foldkit-mixins-ui: aSegmentedpressed option is the accent's tint,
flat, in thevariantslayer, 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-webmcpregisters where an older browser looks.
pageModelContext(), which replacesdocumentModelContext(), 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'ssubtlekeeps 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'ssubtle, 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 attributeCms.stateBadgewrites, so it is toned.