also loses :disabled.
* __shortcut uses `margin-left: auto`, so it must be the LAST CHILD INSIDE
the item. Outside the item it will not right-align.
* use the real `disabled` attribute, not a class — base handles the hover
suppression off :disabled.
Positioning/dismiss is wired below by hand; scitex-ui is shipping a
`ts/app/context-menu` module (open-at-cursor, viewport clamping, outside-click
/Escape/scroll dismissal, items-array API) and this markup is exactly what it
emits, so swapping to it will not change this block.
{% endcomment %}
{% comment %}
Reaction bar and forward picker — both second-level panels the context menu
opens in place of itself, so only one thing is ever on screen.
The emoji are NOT written here. chat_actions.js owns the palette and
chat_menu.js builds the buttons from it, which is what keeps the set the picker
offers identical to the set the Python side documents — a hardcoded row here
would be a second copy, free to drift.
Empty on purpose; both are populated at runtime (the forward list from the
agent list chat.js already polls, so the picker cannot disagree with the drawer
about who exists).
{% endcomment %}
Select an agent to open the thread.
{% comment %}
Load order matters and is one-directional: each file reads the ones before it
off `window` and never the reverse.
chat_diff.js pure render planning (no deps)
chat_actions.js pure message-action decisions (no deps)
chat_menu.js the message context menu + reaction chips (reads ChatActions)
chat_attach.js attachment uploads (no deps)
chat.js the page orchestrator (mounts the two modules above)
`defer` scripts execute in document order, so this list IS the order.
{% endcomment %}