<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>MorphScreen web SDK changelog</title>
<link>https://morphscreen.com/changelog</link>
<description>Every published version of @morphscreen/web.</description>
<language>en</language>
<atom:link href="https://morphscreen.com/changelog.xml" rel="self" type="application/rss+xml"/>
<item>
<title>@morphscreen/web 0.1.2</title>
<link>https://morphscreen.com/changelog#v0-1-2</link>
<guid isPermaLink="true">https://morphscreen.com/changelog#v0-1-2</guid>
<pubDate>Tue, 03 Nov 2026 18:36:11 GMT</pubDate>
<description><![CDATA[<p>Fixes found building demos on 0.1.1: charts&#39; hover, signatures, required
marks, fonts an app didn&#39;t ask for, and a map without WebGL.</p>
<ul>
<li>A chart&#39;s hover shows as meant: a faint band behind the column, a dashed
crosshair on line charts, dots in each line&#39;s colour, and a layer the
pointer passes through. Their names lacked the <code>ms-</code> prefix the
stylesheet uses, so the band drew as a solid black block over the bar,
the crosshair didn&#39;t show, the dots were black and the layer caught the
pointer.</li>
<li>An app that sets its own faces (<code>--ms-font</code>, <code>--ms-mono</code>) no longer
downloads IBM Plex: the SDK warmed the Plex files when the core loaded,
whatever the theme said: Plex Sans and Plex Mono, 60 KB on an English page, for nothing. Now each answer warms
only the faces its own styles name, so with the app&#39;s faces, on <code>:root</code>
or scoped to a chat, nothing is fetched from <code>dist/fonts</code>.</li>
<li>A tab&#39;s underline keeps to its label&#39;s width when the face arrives after
the answer drew, and an answer is styled again then, so widths in the
font&#39;s own units follow the face in Firefox.</li>
<li>A signature drawn on the pad is sent with its form, as a PNG <code>File</code> under
<code>&lt;name&gt;-drawing</code>; before, only the typed name was read, so a signed pad
arrived as an empty string.</li>
<li>Every required field shows the required mark (<code> *</code>), as a Signature&#39;s
already did and the SwiftUI and Compose SDKs do; Input, TextArea, Select,
Date, File and the rest had none.</li>
<li>A form&#39;s files appear in <code>core.actionMessage</code> by name and type
(&quot;id.pdf (application/pdf)&quot;) instead of <code>{}</code>.</li>
<li>A map keeps the core&#39;s drawn map when the live one can&#39;t start: without
WebGL (switched off, or a machine without it) MapLibre fails, and the
figure was left as an empty box.</li>
</ul>
]]></description>
</item>
<item>
<title>@morphscreen/web 0.1.1</title>
<link>https://morphscreen.com/changelog#v0-1-1</link>
<guid isPermaLink="true">https://morphscreen.com/changelog#v0-1-1</guid>
<pubDate>Thu, 29 Oct 2026 19:46:38 GMT</pubDate>
<description><![CDATA[<p>Open source under the Apache License 2.0, at
<a href="https://github.com/morphscreen/morphscreen">https://github.com/morphscreen/morphscreen</a>. Fixes from building an app with
nothing but the public docs, and from two demos in a chat widget&#39;s width.</p>
<ul>
<li><code>destroy()</code> empties the element it drew into, as the docs say, so an
answer drawn there again (a repaired one) no longer stacks under the old.</li>
<li><code>core.actionMessage()</code> works with <code>morphscreen.wasm</code> too, not only the
agent build.</li>
<li>A vote&#39;s action carries the poll&#39;s <code>question</code> and its message names it; a
quiz&#39;s carries its <code>title</code>; a form&#39;s carries each field&#39;s label in
<code>labels</code>, and its message lists the fields by label.</li>
<li><code>&lt;Answer&gt;</code> in React takes <code>onComponentState</code>, <code>state</code> and <code>onOps</code>, so an
answer can be saved and drawn again as the reader left it.</li>
<li>An app&#39;s own <code>:root { --ms-... }</code> after the stylesheet wins in dark mode
too, and <code>--ms-numeric: normal</code> turns the tabular figures off.</li>
<li>A quoted value reads <code>&amp;quot;</code>, <code>&amp;apos;</code>, <code>&amp;lt;</code>, <code>&amp;gt;</code> and <code>&amp;amp;</code> the way
HTML does.</li>
<li><code>morphscreen-page.css</code> is exported; the package ships types only for what
it exports, and its stylesheet without our own notes (17.4 KB brotli, from
23.7).</li>
<li>In a chat widget&#39;s width, a comparison&#39;s feature names wrap so its options
fit side by side. A table still wider than its box fades out on the side
there&#39;s more to see, and a comparison keeps its feature names in place as
it scrolls.</li>
<li><code>--ms-primary</code> and <code>--ms-primary-ink</code> (<code>primary</code> and <code>primaryInk</code> in a theme
file) colour primary buttons, a chosen time slot and the open tab, so they
can take your brand colour. They&#39;re ink until you set them, and themes
without them keep their look, in SwiftUI and Compose too.</li>
<li>A time slot keeps its label on one line; longer labels get wider columns.</li>
<li>Buttons inside an app&#39;s own component look like buttons, and come to it as
<code>actions</code> too (<code>{ label, ask, variant }</code>) for an app that draws its own.</li>
<li>An app&#39;s own component whose content is a list, a table, pictures or code
gets it in <code>html</code> and <code>text</code>; before, only <code>any</code> content arrived.</li>
<li>An empty line in a code block keeps its height, so the line numbers no
longer sit on each other.</li>
</ul>
]]></description>
</item>
<item>
<title>@morphscreen/web 0.1.0</title>
<link>https://morphscreen.com/changelog#v0-1-0</link>
<guid isPermaLink="true">https://morphscreen.com/changelog#v0-1-0</guid>
<pubDate>Wed, 28 Oct 2026 20:16:48 GMT</pubDate>
<description><![CDATA[<p>The first public beta.</p>
<ul>
<li>The WASM core reads an answer as it streams, checks every line against
the components the app allows, and draws it with plain DOM or React 18+.</li>
<li>75 components in nine packs; an app&#39;s own components as custom packs.
The app&#39;s function draws one as soon as it opens, from its attributes
(<code>streaming: true</code>), then again when it&#39;s complete, with its content as
HTML (its own words, then buttons that ask) and its words as text.</li>
<li>New words fade in as an answer streams; nothing moves under reduced
motion.</li>
<li><code>connectAgent</code> for agents that speak AG-UI 1.0, with the agent build of
the core.</li>
<li>Themes from a W3C Design Tokens file (<code>@morphscreen/web/theme</code>).</li>
<li>Pictures only from the hosts an app lists, map tiles only from its own
provider key; the SDK sends nothing of its own.</li>
<li>Installs and draws with npm, pnpm, Yarn (PnP and node_modules) and bun,
under Vite, Next.js (App Router), webpack, Angular, Nuxt and SvelteKit.</li>
</ul>
]]></description>
</item>
</channel>
</rss>
