Reduce schedule "Add" buttons to a single "+" icon
Task #190. User wanted both add affordances in the Executive Meetings schedule to show only the "+" symbol — no accompanying text in either language. Changes: - artifacts/tx-os/src/pages/executive-meetings.tsx: - Add-row button: drops the visible label in idle state, renders only the <Plus> icon (aria-hidden). Loading state still shows "Loading..." for feedback. Added aria-label and aria-busy on the <button> so screen readers still announce the action and the loading state. - Add-attendee inline button: visible content is now the literal "+" character. aria-label preserved for assistive tech. - artifacts/tx-os/src/locales/ar.json: - executiveMeetings.schedule.addRow: "أضف اجتماع جديد" → "أضف اجتماع" - executiveMeetings.schedule.addAttendee: "+ أضف حاضرًا" → "أضف حاضر" - artifacts/tx-os/src/locales/en.json: - executiveMeetings.schedule.addAttendee: "+ Add attendee" → "Add attendee" Both locale strings are now used solely as accessible names since the visible glyph is hard-coded. Verification: All 4 tests in executive-meetings-edit-toggle.spec.mjs pass. Tests use data-testid (em-add-row-button, em-add-attendee-*), not text, so no test changes were required. Pre-existing TS errors in admin.tsx and use-notifications-socket.ts are unrelated (api-client-react codegen out of sync; tracked by other in-flight tasks).
This commit is contained in:
@@ -854,13 +854,13 @@
|
||||
"dragRow": "اسحب لإعادة الترتيب",
|
||||
"editMeetingTitle": "تعديل عنوان الاجتماع",
|
||||
"schedule": {
|
||||
"addRow": "أضف اجتماع جديد",
|
||||
"addRow": "أضف اجتماع",
|
||||
"newMeetingDefaultAr": "اجتماع جديد",
|
||||
"newMeetingDefaultEn": "New meeting",
|
||||
"timeStart": "وقت البداية",
|
||||
"timeEnd": "وقت النهاية",
|
||||
"timeOrderError": "وقت النهاية يجب أن يكون بعد وقت البداية",
|
||||
"addAttendee": "+ أضف حاضرًا",
|
||||
"addAttendee": "أضف حاضر",
|
||||
"addVirtualAttendee": "+ حاضر عبر الاتصال المرئي",
|
||||
"addInternalAttendee": "+ حاضر داخلي",
|
||||
"addExternalAttendee": "+ حاضر خارجي",
|
||||
|
||||
@@ -809,7 +809,7 @@
|
||||
"timeStart": "Start time",
|
||||
"timeEnd": "End time",
|
||||
"timeOrderError": "End time must be after start time",
|
||||
"addAttendee": "+ Add attendee",
|
||||
"addAttendee": "Add attendee",
|
||||
"addVirtualAttendee": "+ Virtual",
|
||||
"addInternalAttendee": "+ Internal",
|
||||
"addExternalAttendee": "+ External",
|
||||
|
||||
@@ -1531,15 +1531,16 @@ function ScheduleSection({
|
||||
type="button"
|
||||
onClick={createRow}
|
||||
disabled={creatingRow}
|
||||
aria-label={t("executiveMeetings.schedule.addRow")}
|
||||
aria-busy={creatingRow}
|
||||
className="w-full flex items-center justify-center gap-2 py-2.5 text-sm text-[#0B1E3F] hover:bg-blue-50/60 focus:bg-blue-50/60 focus:outline-none transition-colors disabled:opacity-60"
|
||||
data-testid="em-add-row-button"
|
||||
>
|
||||
<Plus className="w-4 h-4" />
|
||||
<span>
|
||||
{creatingRow
|
||||
? t("common.loading")
|
||||
: t("executiveMeetings.schedule.addRow")}
|
||||
</span>
|
||||
{creatingRow ? (
|
||||
<span>{t("common.loading")}</span>
|
||||
) : (
|
||||
<Plus className="w-4 h-4" aria-hidden="true" />
|
||||
)}
|
||||
</button>
|
||||
</td>
|
||||
</tr>
|
||||
@@ -3007,7 +3008,7 @@ function AttendeeFlow({
|
||||
aria-label={addLabel}
|
||||
className="text-xs text-blue-600 hover:text-blue-700 hover:bg-blue-50 rounded px-2 py-1 min-h-[1.5rem] border border-dashed border-blue-300 hover:border-blue-500 transition-colors"
|
||||
>
|
||||
{addLabel}
|
||||
+
|
||||
</button>
|
||||
</li>
|
||||
)}
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.9 KiB |
Reference in New Issue
Block a user