diff --git a/artifacts/tx-os/src/pages/executive-meetings-print.tsx b/artifacts/tx-os/src/pages/executive-meetings-print.tsx index b51414ec..b4bb09f4 100644 --- a/artifacts/tx-os/src/pages/executive-meetings-print.tsx +++ b/artifacts/tx-os/src/pages/executive-meetings-print.tsx @@ -116,13 +116,31 @@ export default function ExecutiveMeetingsPrintPage() { .no-print { display: none !important; } body { background: white; } @page { size: A4; margin: 14mm; } + /* On A4 the table always fits the page; drop the screen-only + scroll guard so the layout stays identical to today and the + # column can shrink to its natural width. */ + .em-print-scroll { overflow: visible !important; } + .em-print-table { min-width: 0 !important; } + .em-print-table th:first-child { width: auto !important; } + } + /* Screen-only horizontal scroll guard — prevents the table from + breaking the page layout on phones (<640px). */ + .em-print-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; } + .em-print-table { + border-collapse: collapse; + width: 100%; + min-width: 640px; } - .em-print-table { border-collapse: collapse; width: 100%; } .em-print-table th, .em-print-table td { border: 1px solid #d1d5db; padding: 8px 10px; text-align: center; vertical-align: middle; + /* Long Arabic names have few break opportunities; force wrap so + the cell never overflows its border. */ + word-break: break-word; + overflow-wrap: anywhere; + white-space: normal; } .em-print-table th { background: #0B1E3F; @@ -130,6 +148,17 @@ export default function ExecutiveMeetingsPrintPage() { font-weight: 600; } .em-print-table tr.hl td { background: #fecaca; } + .em-print-attendees { + display: flex; + flex-direction: column; + gap: 2px; + text-align: center; + line-height: 1.4; + } + .em-print-attendees .em-print-attendee-num { + color: #6b7280; + margin-inline-end: 4px; + } `}
@@ -164,49 +193,67 @@ export default function ExecutiveMeetingsPrintPage() { ) : meetings.length === 0 ? (
{t.none}
) : ( - - - - - - - - - - - {meetings.map((m) => { - const title = isRtl - ? m.titleAr - : m.titleEn || m.titleAr; - const attendees = (m.attendees ?? []) - .map((a) => (a.title ? `${a.name} (${a.title})` : a.name)) - .join("، "); - const time = - m.startTime && m.endTime - ? `${m.startTime.slice(0, 5)} – ${m.endTime.slice(0, 5)}` - : m.startTime - ? m.startTime.slice(0, 5) - : "—"; - return ( - - - - - - - ); - })} - -
{t.no}{t.meeting}{t.attendees}{t.time}
{m.dailyNumber} -
{title}
- {m.location ? ( -
- {m.location} -
- ) : null} -
- {attendees || "—"} - {time}
+
+ + + + {/* Slightly rebalanced from 8/32/40/20: give attendees the + most room since long Arabic names dominate the cell. */} + + + + + + + + {meetings.map((m) => { + const title = isRtl + ? m.titleAr + : m.titleEn || m.titleAr; + const attendees = m.attendees ?? []; + const time = + m.startTime && m.endTime + ? `${m.startTime.slice(0, 5)} – ${m.endTime.slice(0, 5)}` + : m.startTime + ? m.startTime.slice(0, 5) + : "—"; + return ( + + + + + + + ); + })} + +
{t.no}{t.meeting}{t.attendees}{t.time}
{m.dailyNumber} +
{title}
+ {m.location ? ( +
+ {m.location} +
+ ) : null} +
+ {attendees.length === 0 ? ( + "—" + ) : ( +
+ {attendees.map((a, idx) => ( +
+ + {idx + 1}- + + {a.title ? `${a.name} (${a.title})` : a.name} +
+ ))} +
+ )} +
{time}
+
)}
diff --git a/attached_assets/image_1777445941920.png b/attached_assets/image_1777445941920.png new file mode 100644 index 00000000..e9bb61bb Binary files /dev/null and b/attached_assets/image_1777445941920.png differ