Skip to content

Release 3.14.3 - #67

Merged
zabarov merged 28 commits into
mainfrom
release/3.14.3
Nov 15, 2026
Merged

zabarov merged 28 commits into
mainfrom
release/3.14.3

Conversation

@zabarov

@zabarov zabarov commented Nov 14, 2026

Copy link
Copy Markdown
Contributor

Docara 3.14.3: example frames (caption under the frame, desktop viewport, open menus), static tree, Framework ui-7fb26d395af2, the reading settings as Framework sf-settings, the effect hero surface, docs corrections. Details in CHANGELOG.

🤖 Generated with Claude Code

zabarov and others added 28 commits November 11, 2026 20:30
…st and share Framework script text

- A pointerdown on the page asks every example frame that reported an open
  layer to dismiss it: auto/hint popovers hide, closedby="any" dialogs close,
  and while a non-pinned popover stays open (Framework menus use manual
  popovers) the focused element gets Escape, once per level, up to six.
  Modal dialogs and pinned notification areas stay open.
- At most two example frames boot at a time, on-screen first, then nearest;
  a boot slot frees on docara:example-styled, after 4 s, or when the frame
  leaves the 600px band. HTML-block frames and no-IntersectionObserver
  browsers load as before.
- The page reads each Framework script once from its own HTTP cache (after
  its own response arrived) and sends the text; the frame runs it from a
  blob URL with async=false, keeping order, load events and Core's sfPath
  base. Scripts the page does not hold yet still load by URL. Each frame
  still runs its own Framework Loader.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… document.fonts

- The icon ready() script no longer adds or removes sf-icon-loaded on the
  page or in example frames; it picks the face and loads it through
  document.fonts.load, and its guard is the recorded icon name.
- The example frame runtime adds each Material icon face it receives as
  bytes to document.fonts (new FontFace(family, bytes, descriptors), add,
  load) once per font token, so the Framework's tracker sees it. Text
  fonts keep only their @font-face rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e font preloads

The font preload check accepted a Framework core face only as
distr/core/<20 hex>.woff2. It now also accepts
distr/core/fonts/inter/<name>.woff2, where the name is one segment of
[A-Za-z0-9._-] that does not start with a dot. The hashed form stays.
Page and frame font sharing take any same-origin URL, so both forms work
there unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e text face loads

- portableExampleStyle (frame-only CSS) rewrites font-display: optional to
  swap in kept non-icon @font-face rules, so a face that arrives after the
  frame's first layout (the Framework's Inter) still draws. Pages keep
  optional; icon faces keep their display.
- The frame runtime posts docara:example-styled only after
  document.fonts.load('500 1em <body font-family>') settles, capped at
  1 s, so the viewer keeps the inline preview until then.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… draws

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Docara's prose rule held inline code on one line and outranked the
Framework's zero-specificity C10 wrapping, so tables with code in their
cells stayed wider than a phone. Only hyphens stay off inside a token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… inside

Moving the whole preview padding into the frame made the frame 2 insets
wider than the sample, so every min-width breakpoint and the Framework
size ladder switched about 40 px early. Only the padding above and below
moves in now; the side padding stays on the panel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The label was the first tab; a descriptive label made the tab row scroll
and pushed the code tabs away. The label is now a figcaption under the
frame that names the frame and its tab list; the first tab always reads
the localized Example, the tab row no longer scrolls, and the full-screen
viewer repeats the caption in its header.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ta; trim the caption CSS comments

The shorter comments keep the shell inside the stylesheet bundle budget,
so the stub site's pages still link at most 12 stylesheets.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…for examples

- The viewer button reads Full screen (examples.viewer_open) next to its
  icon; readers did not find the bare devices glyph.
- The wide reader format moves the outline rail into the contents menu
  above the article, so the column grows on 72-80rem screens too.
- Reading mode keeps text on the measure but lets an example take the
  column up to the Framework container step 3, never narrower than on
  the normal page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
C111 drops the Full screen words: the device preview behind the devices
icon already covers it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ons C102 and C109

- :::tree {interactive=false} is a nested ul/li with nothing to press: no
  toggle column, a folder or file icon before each name.
- A level steps by the icon and the row gap, so a child's icon stands
  exactly under its parent's name (NI-5). The file icon is the Framework's
  generic one until the Framework ships its file type map.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wner decision C111

- viewport=desktop (catalogue enum column|desktop) gives the example a
  frame of its own; preview=inline fails closed, and a page example
  rejects the attribute because it already draws a desktop.
- In a column of 512 or more the frame is 1280 wide at full scale; the
  body under it scrolls sideways, takes focus with a label, fades the
  side that still hides content and the head chip reads
  "1280 · 100 % · scroll" (examples.desktop_scroll*). A narrower column
  and the device viewer show it at their own width.
- The example page documents it with a live site row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In the viewer the scroll wrapper steps out of the layout, so the frame is
the panel's flex child again instead of shrinking to 300 px.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ow the 3.14.3 shell in the stub-site counts

- Reading mode capped the whole article on the measure and gave examples
  their width through a size container, which the article layout contract
  forbids (it moves fixed popups in inline examples). The article now takes
  the column, its other blocks keep the measure and centre, and an example
  takes up to Framework container step 3.
- The bigger shell regroups the stub site's stylesheet bundles (getting
  started links 13, 8.25 on average, one more published group). The
  documentation site links 7.66 per page, as in 3.14.2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he changelog

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ui-doc merges child pages into their parent as sections (owner decision
C127), so an old address should open at the section. A redirects.json
target may now end in #anchor, in any language: the receipt keeps the
authored anchor in [to] and the percent-encoded one in [target_url], the
redirect page's refresh, script and link carry it, the canonical link stays
the page itself, and verify-static fails when the target page has no
element with that id.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A frame measured itself before the page's styles and the Framework scripts
reached it, so it went from its reserved 192 px down to 32 px and then to its
final height, and the text below moved twice (R216: layout shift up to 0.52
inside examples). Until the frame reports that it has drawn
(docara:example-styled), the shell keeps the reserved or previous height and
holds the last measured one; it applies once the frame has drawn, or after
three seconds for a frame that never reports it. Measured on ui-doc.test in
Chrome: a frame now changes once (192 -> 150 on the card page, CLS 0.0006).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…group heading, time and change

Docara now bundles SIMAI Framework ui-7fb26d395af2 (registry bound at
4c012852f) instead of ui-b4a77681f0a7. Sites get sf-menu-context 1.14.3 and
sf-menu 1.6 without late links, the dropdown's first paint, sf-button 1.13,
sf-button-icon 1.8.4, sf-alert 1.2.1, sf-modal 1.7, the tree 1.2 and sf-tree
2.1.2, the outline 1.1, sf-contents 1.4.3, sf-search 1.7.4, sf-language
1.2.4, sf-pager 1.2.3, the highlighter 1.2.2, the scrollbar 1.1.1, and the
new .sf-group-heading, sf-time and sf-change. The four change reports since
b4a7 remove no unit, so no tag or class Docara's markup uses goes away; the
shell keeps no copy of the context-menu CSS, so its frame change arrives
with the bundle.

Sites that pin ui-b4a77681f0a7 (Docara 3.14.0 to 3.14.2) build with the new
release: that lock is recorded as superseded. The update page lists the new
pair and the range of the old one, and its self-link now points at the
section on old projects. The runtime projection grows from 2246 to 2250
files, the Smart projection to 335. Tests follow the new identity, digests
and counts; the rule registry no longer asks for the empty tags script, and
the stub site's busiest page links one more stylesheet (14).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From the documentation audit, each checked against the code: the quality
threshold lives in docara.authoring.json, not docara.json; a build needs
Node.js 20+ (the Composition Recipe runtime) and no Vite; the install step no
longer claims to add a GitHub repository (Docara comes from Packagist); the
recommended .gitignore rule is /build_* so it also skips the
build_*.docara-lock files; and the "existing project" hint names docara
upgrade for a new version next to docara update for service files. The
English pages follow, and their translations are accepted, together with
two pages left unaccepted since the bg-surface-page rename.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A hero with an effect showed the page's white surface for about half a
second, until the effect script reached the running state and drew its grey
field. The hero now shows surface-1 while data-sf-effect-state is anything
but running (unset, loading or failed); once the effect runs, the rule no
longer applies and the effect draws over the hero's own surface as before.
Pausing keeps the state running, so a paused effect does not change colour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The site search and the example viewer darkened the page with Docara's own
black at 60 %. They now use --sf-scrim-color (black at 64 % in both themes),
so search, the viewer, the drawer and the modal match (search study SR-5).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The menu view of reader_preferences built its own sf-menu-context rows.
It now prints sf-settings look="drill" opened by the gear through for, as
the Framework settings-menu decision (C85, study SM-7) asks. The page still
keeps the reader's values and puts them back before the menu opens. The
Framework settings menu has no reset row, so the menu view drops it; the
side panel keeps its reset button.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The shared scrim and the sf-settings reading menu change the components the
pages use; the pin still said 3301.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@zabarov
zabarov merged commit 078215b into main Nov 15, 2026
6 checks passed
@zabarov
zabarov deployed to simai-server November 15, 2026 03:15 — with GitHub Actions Active

This branch was successfully deployed

1 active and 1 inactive deployments
simai-server — 078215b3 Deployed Nov 15, 2026 by zabarov via deploy #60
github-pages — 078215b3 Deployed Nov 15, 2026 by zabarov via deploy #73
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant