A point release after 20261023: the viewer honours an element's permission role again, and the
toolbar's drop cap works on a converted document.
Fixed in this release
The viewer ignored permission roles (TYP-1046). An element whose role does not allow it to be
selected (Fixed) was still selected, and once anything was selected the toolbar offered every
control, including the ones its role denies. Now:
an element that may not be selected is not selected; the click counts as a click on empty space,
and it no longer lights up on hover when its role turns the hover highlight off;
the toolbar offers only what the role allows. Font follows the role's font permission. Size,
leading and letter spacing follow its size permission. Font style, alignment, caps,
underline, strikethrough, super/subscript, lists, indents and the frame's text layout
(vertical alignment, baseline, columns, drop cap, hyphenation) follow its style permission.
Flip follows rotate. A picture's fit follows its scale permission and its alignment its move
permission;
fill and text colour and spellcheck stay available: a role has no colour permission.
The toolbar's drop cap did not work on a converted InDesign document (TYP-1048). It showed 0
for a drop cap the document's paragraph style gives, setting one drew nothing (the root paragraph
style says "no drop cap" and outranked it), and setting 0 could not remove one. The control now
shows the drop cap the frame's first paragraph has, wherever it comes from, and changes that
paragraph, so 0 removes a drop cap a style gives. One undo puts it back.
For hosts
Flip is no longer offered in the viewer under the default permissions, which do not allow
rotating. A template that wants it gives the element a role that allows rotate (Full edit, or
a role of your own).
The editor's permissions are unchanged: it lets its user do everything, as before. Its drop cap
control changed with the viewer's (above): it edits the first paragraph's drop cap.
Typograph developers notes
Canvas pin 23a2099 (from beb267a): canvas #212 (TYP-1048). Nothing else landed on canvas
master in that range.
TYP-1048, editor: the drop cap palette reads the first paragraph's drop cap through canvas's
resolve_drop_cap() and writes that paragraph's own override (drop_cap_lines, _characters,
_font_size), which outranks its styles; the frame's own values are set back to none in the
same undo step, so one setting decides. A chained frame edits the root's first paragraph. The
rule is src/dropcapcontrol.ts; vitest tests/dropcapcontrol.test.ts: 8.
TYP-1048, canvas: resolve_drop_cap() (src/dropcap.ts) orders a paragraph's drop cap as its own
override, then the frame's (first paragraph, lines > 0), then its styles. InDesign's
[No paragraph style] states DropCapLines 0, so the frame's value used to lose on every
converted paragraph. Vitest tests/dropcap.test.ts: 7. The PDF needs nothing: the layout carries
the drop cap.
TYP-1046: EditoMouseManager.select_element() (and Shift-click's modify_selection()) asks
can(el, 'select'), and highlight_element() asks can_highlight(). state_permitted() could
not catch it: it asks about what is already selected, and the click is what selects. Canvas's own
viewer (mousemanagers.ts) always did.
TYP-1046: kGroupAction in toolbarpermissions.ts names the edit_action each
data-toolbar-group needs; drop_denied_groups() removes the denied groups, the containers left
empty and the separators left over, before _apply_toolbar(), and the Toolbar lets go of the
controls that lived in them. The image frame's Scale / Hor / Ver popups are a group each
(image_fit, image_align_h, image_align_v). A new toolbar group that edits the element belongs in that
table. See .claude/rules/viewer-permissions.md and the new section in
docs/EditPermissions.md. Vitest tests/toolbarpermissions.test.ts: 10.
canvas-service needs no pin bump: the converter writes drop caps on paragraph styles only, never
on a frame, so a conversion's layout does not change.