Task #602: quick-note button in schedule fullscreen mode

The amber "ملاحظة / Note" button (#600) lives in the Executive
Meetings page header. The whole header is hidden in fullscreen, so the
quick-note panel — which itself already works in fullscreen — had no
entry point. User had to exit fullscreen, add the note, then re-enter.

Added a floating amber pill next to the existing fullscreen-exit pill
at the top-end of the page. Mirrors the header button exactly:
- Same handler (setQuickNoteOpen + setQuickNoteTrigger).
- Same gating: only Schedule section, hidden while the panel is open
  or while the bulk-actions toolbar is active.
- Same i18n key (executiveMeetings.quickNote.label) — no new strings.
- Same amber palette (bg-amber-100 / border-amber-300 / text-[#0B1E3F])
  with the Plus icon and label.
- Positioned at `top-3 end-14` so it sits inboard of the exit pill
  (`end-3`, w-9) in both LTR (to the left) and RTL (to the right),
  with no overlap.
- `print:hidden`, `data-testid="em-fullscreen-quicknote"`.

Single JSX addition (~36 lines incl. comment) in
artifacts/tx-os/src/pages/executive-meetings.tsx, right after the
exit-fullscreen button. No other files touched. No new state, no new
i18n, no API changes, no dependency changes. Non-fullscreen layout is
untouched. tx-os tsc passes.
This commit is contained in:
riyadhafraa
2026-05-18 13:59:02 +00:00
parent 4290bc54c9
commit 918485411f
@@ -1016,6 +1016,43 @@ function ExecutiveMeetingsPageInner() {
<Minimize2 className="w-5 h-5" />
</button>
)}
{/* #602: floating amber quick-note pill the only entry point to
the quick-note panel while the page header is hidden in
fullscreen. Same gating + handler as the header button at
~L1067 so the two behave identically; positioned inboard of
the exit pill (end-14 sits to the left of end-3 in LTR and to
the right in RTL). Hidden when the panel is already open or
while the bulk-actions toolbar is competing for attention. */}
{isFullscreen &&
section === "schedule" &&
!bulkToolbarActive &&
!quickNoteOpen && (
<button
type="button"
onClick={() => {
setQuickNoteOpen(true);
setQuickNoteTrigger((n) => n + 1);
}}
data-testid="em-fullscreen-quicknote"
aria-label={t(
"executiveMeetings.quickNote.label",
lang === "ar" ? "ملاحظة" : "Note",
)}
title={t(
"executiveMeetings.quickNote.label",
lang === "ar" ? "ملاحظة" : "Note",
)}
className="fixed top-3 end-14 z-50 inline-flex items-center gap-1.5 rounded-full bg-amber-100 hover:bg-amber-200 border border-amber-300 text-[#0B1E3F] h-9 px-3 text-sm font-medium shadow-lg print:hidden"
>
<Plus className="w-4 h-4" />
<span>
{t(
"executiveMeetings.quickNote.label",
lang === "ar" ? "ملاحظة" : "Note",
)}
</span>
</button>
)}
<header
ref={headerRef}
data-testid="em-page-header"