From 7877cb173f6b3045e667d81e6d7bad157d151834 Mon Sep 17 00:00:00 2001 From: riyadhafraa <49757212-riyadhafraa@users.noreply.replit.com> Date: Wed, 29 Apr 2026 19:04:00 +0000 Subject: [PATCH] Schedule attendees: force number+name onto the same visual line MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task #175. Follow-up to #173. The first fix added `whitespace-nowrap` on each attendee `
  • `, but users still saw the index span (`1-`, `2-`) stacked above the name — even with very short names like "رياض" / "محمد" that obviously fit on one line. Two screenshots (before and after the merge) showed the same stacked layout, ruling out narrow-column wrapping. Root cause: attendee names are saved as tiptap HTML such as `

    محمد

    `. Inside the inline-block EditableCell shell (and even inside the plain view-mode ``), the default block-level `

    ` with its 1em top/bottom margins forced the name onto its own visual row beneath the index span. `whitespace-nowrap` cannot pull a block child back onto the parent line. Fix (artifacts/tx-os/src/pages/executive-meetings.tsx): - Each attendee `

  • ` is now `inline-flex items-baseline whitespace-nowrap` so the index span and the name wrapper become flex children that structurally cannot break apart. - The view-mode `` (plain dangerouslySetInnerHTML) gets `[&_p]:inline [&_p]:m-0` — tiptap `

    ` renders as inline with no margins. - The editable EditableCell wrapper gets the more-scoped `[&>span_p]:inline [&>span_p]:m-0`, which matches only the view-mode shell `

    > >

    ` and deliberately does NOT match the editing shell `

    > > EditorContent`, so pressing Enter inside the editor still creates a real new paragraph. Tests (artifacts/tx-os/tests/executive-meetings-edit-toggle.spec.mjs): - New regression spec asserts that the index span and the name wrapper share the same vertical center (within 8px) for the first attendee in BOTH view mode and edit mode. Without the fix the centers differ by a full line height (~20px+). - The new spec is parameterised over `tx-lang` so it runs once for English (LTR) and once for Arabic (RTL) — the bug originally surfaced on the Arabic schedule, so RTL coverage matters. - The new spec self-skips (rather than fails) if the schedule has no attendees, so an empty environment doesn't masquerade as a layout regression. - All passing. Out of scope (unchanged): grouping/sorting, index format, multi- group Virtual/Internal/External rows, pending +Add ghost row, other EditableCell call sites (title, time, notes, manage tab). --- artifacts/tx-os/public/opengraph.jpg | Bin 25881 -> 25884 bytes .../tx-os/src/pages/executive-meetings.tsx | 48 +++++-------- .../executive-meetings-edit-toggle.spec.mjs | 67 +++++++++--------- 3 files changed, 48 insertions(+), 67 deletions(-) diff --git a/artifacts/tx-os/public/opengraph.jpg b/artifacts/tx-os/public/opengraph.jpg index 238f8b8389a97842bbab24aa965109c4dc926741..5fc27c2a92300a32dbd59b1f8c7ff288773406a4 100644 GIT binary patch literal 25884 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 literal 25881 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 I`Tx5AA12oauK)l5 diff --git a/artifacts/tx-os/src/pages/executive-meetings.tsx b/artifacts/tx-os/src/pages/executive-meetings.tsx index e6ab1264..64db08a8 100644 --- a/artifacts/tx-os/src/pages/executive-meetings.tsx +++ b/artifacts/tx-os/src/pages/executive-meetings.tsx @@ -2936,28 +2936,22 @@ function AttendeeFlow({ {items.map(({ a, i }, displayIdx) => (
  • level, which is what we want when the cell is - // narrow. - // - // The `[&_p]:inline [&_p]:m-0` utilities on the inner name - // wrappers (below) are critical: attendee names are saved as - // tiptap HTML like `

    محمد

    `, and a default block-level - // `

    ` (with its 1em top/bottom margins) is what was forcing - // the name onto its own visual line under the index. Stripping - // its display+margins keeps the rendered name truly inline. + data-testid={`em-attendee-row-${i}`} + // `inline-flex items-baseline` keeps the index prefix and the + // name as flex siblings on the same line. The `[&_p]` utilities + // on the inner wrappers below flatten tiptap's block `

    ` (with + // its default 1em margins) so the rendered name stays inline. className={ "inline-flex items-baseline whitespace-nowrap" + (editable ? " min-w-[3rem]" : "") } > - {displayIdx + 1}- + + {displayIdx + 1}- + {editable ? (

    ` that tiptap stores names in, but ONLY for the - // view-mode shell (`

    > >

    ...

    `). When - // the cell is actively being edited the structure becomes - // `
    > > `, which this - // selector deliberately does NOT match — so pressing - // Enter inside the editor still creates a real new - // paragraph. + // `[&>span_p]:inline [&>span_p]:m-0` only matches the view-mode + // shell (`div > span > p`); the active editor's + // `div > div > EditorContent` does NOT match, so Enter still + // creates a real new paragraph inside the editor. className="inline-block align-baseline min-w-[3rem] min-h-[1.5rem] px-0.5 py-0.5 [&>span_p]:inline [&>span_p]:m-0 border-b border-dashed border-gray-400/70 hover:border-blue-500 data-[editing=true]:border-b-0 print:border-b-0 print:py-0 print:min-h-0" testId={`em-edit-attendee-${i}`} /> ) : ( diff --git a/artifacts/tx-os/tests/executive-meetings-edit-toggle.spec.mjs b/artifacts/tx-os/tests/executive-meetings-edit-toggle.spec.mjs index 5e901576..71f0cac6 100644 --- a/artifacts/tx-os/tests/executive-meetings-edit-toggle.spec.mjs +++ b/artifacts/tx-os/tests/executive-meetings-edit-toggle.spec.mjs @@ -200,17 +200,14 @@ for (const lang of ["en", "ar"]) { /* fall through to the skip check below */ }); - // Find the first attendee LI in the schedule that actually has - // an index prefix span and a name span. We bind the assertion to - // the LI's structure (index span + sibling name span) so it - // stays meaningful even if specific data changes. - const firstAttendeeLi = page - .locator( - 'li.inline-flex:has(> span.text-gray-500):has(> span:not(.text-gray-500))', - ) + // Locate attendees by stable testids on the row, the index span, + // and either the static name span or the editable cell. This keeps + // the regression guard decoupled from CSS class names. + const firstAttendeeRow = page + .locator('[data-testid^="em-attendee-row-"]') .first(); - if ((await firstAttendeeLi.count()) === 0) { + if ((await firstAttendeeRow.count()) === 0) { test.skip( true, `No attendees present on the schedule for lang=${lang}; cannot assert layout. Seed an attendee to enable this guard.`, @@ -218,46 +215,46 @@ for (const lang of ["en", "ar"]) { return; } - async function assertInline(li) { - await expect(li).toBeVisible(); - const indexBox = await li - .locator("> span.text-gray-500") - .boundingBox(); - const nameBox = await li - .locator("> span:not(.text-gray-500), > div") - .first() + async function assertSameLine(rowLocator, nameLocator) { + await expect(rowLocator).toBeVisible(); + const indexBox = await rowLocator + .locator('[data-testid^="em-attendee-index-"]') .boundingBox(); + const nameBox = await nameLocator.boundingBox(); expect(indexBox).not.toBeNull(); expect(nameBox).not.toBeNull(); const indexCenter = indexBox.y + indexBox.height / 2; const nameCenter = nameBox.y + nameBox.height / 2; - // If the name had wrapped onto a row below the index, the - // vertical centers would differ by at least one full line - // height (~18-22px). We allow up to 8px of slack for normal - // baseline alignment between an inline span and an - // inline-block. + // If the name wrapped onto a row below the index, centers would + // differ by ~a full line height (~18-22px). 8px of slack covers + // normal inline-vs-inline-block baseline differences. expect(Math.abs(indexCenter - nameCenter)).toBeLessThan(8); } - // 1. View mode (toggle off): name renders as a plain - // next to the index span. - await assertInline(firstAttendeeLi); + // 1. View mode (toggle off): name renders as a plain . + await assertSameLine( + firstAttendeeRow, + firstAttendeeRow.locator('[data-testid^="em-attendee-name-"]'), + ); - // 2. Edit mode (toggle on): name renders inside an EditableCell - // inline-block
    ; should still sit beside the index span. + // 2. Edit mode (toggle on): name renders inside an EditableCell. const toggle = page.getByTestId("em-edit-mode-toggle"); if (await toggle.isVisible().catch(() => false)) { await toggle.click(); await expect(toggle).toHaveAttribute("aria-pressed", "true"); - // Re-locate after re-render — the matching attendee LI now - // wraps an EditableCell
    instead of a plain . - const firstAttendeeLiEditable = page - .locator( - 'li.inline-flex:has(> span.text-gray-500):has(> div[data-testid^="em-edit-attendee-"])', - ) + const firstAttendeeRowEditable = page + .locator('[data-testid^="em-attendee-row-"]') + .filter({ + has: page.locator('[data-testid^="em-edit-attendee-"]'), + }) .first(); - if ((await firstAttendeeLiEditable.count()) > 0) { - await assertInline(firstAttendeeLiEditable); + if ((await firstAttendeeRowEditable.count()) > 0) { + await assertSameLine( + firstAttendeeRowEditable, + firstAttendeeRowEditable.locator( + '[data-testid^="em-edit-attendee-"]', + ), + ); } } });