Skip to content

SQLBI Whiteboard 1.7.4 (dev 3437)

Pre-release
Pre-release

Choose a tag to compare

@marcosqlbi marcosqlbi released this 30 Sep 19:20
3fc625f
Import groups from Microsoft Whiteboard, flattened (1.7.4) (#182)

`GroupFluidObject` is how the Microsoft Whiteboard web client writes a
**group of objects**: it is the `toWhiteboardType` of its `Group`
content type. #177 took the name for live Fluid content and gave it the
Loop reader, so a group and everything in it was reported as left out.
No sample holds a group, because the Windows client does not offer
grouping; the markup was read from the web client's public code.

**How a group is drawn.** Its conversion makes a collection, as for a
legacy template, without a title: a `div` with the role `collection`,
and for each member a wrapper `div` holding a `div` named after the
member's own origin (`topLeft` or `center`) with its `left`, `top`, and
`transform`, holding the member's content. A member can be a group.

**What changed.**
- `ReadTemplate` became `ReadCollection`, used for templates and groups.
It reads only the collection's own children and recurses into a child
that is a collection. `HtmlTags` now yields the end of each `div` as a
tag named `/div` so that depth can be counted; no reader matches that
name, and all 19 samples import with the same items.
- A child keeps its own origin: a centered one is read as centered, and
a corner-placed picture, shape, or sticker moves by half its size,
because those are centered at the top level. `Anchor.Inside` now keeps
the child's alignment.
- The child dispatcher reads every kind as its top-level counterpart is
read: besides ink, notes, grids, lists, text, pictures, and shapes, now
tables, sticker captions, connectors, link cards, Loop content, apps,
work items, custom objects, placeholders, and nested collections. This
also closes the gap where a connector, a link card, or a sticker's
caption inside a legacy template was lost.
- The placeholder check now steps aside for any object that holds a
collection, so a group whose children are all centered is not taken for
a placeholder.

**Flattened.** The board has no groups (grouping as a saved object is
out of scope in `docs/design-objects.md`), so a group becomes its
members, each where it was and in its drawing order. The import doc has
a new section, *When the board has groups*, listing what to change once
grouping exists, and the design doc's out-of-scope line links to it.

A new Core smoke test covers a scaled group holding a note, a centered
picture, a nested group with a centered ellipse and ink, and a member of
an unknown kind. The template tests pass on the new reader. The solution
builds clean and both harnesses pass.

1.7.4 is not released yet, so this adds an entry to its notes and the
version stays 1.7.4. The site's export page lists groups.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>