You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
-**app.html**: Base template (extremely minimal - needs enhancement)
@@ -272,6 +274,7 @@ These phases outline areas that need further accessibility work. Explore in deta
272
274
### WCAG AA Improvements Needed
273
275
274
276
#### 1. HTML Root & Head Elements (`app.html` & `meta.tsx`)
277
+
275
278
-[x] ✅ Add `lang` attribute to `<html>` for screen reader language detection - **Fixed in `packages/frontend/app/localize.tsx`** (dynamically set from i18n locale)
276
279
-[x] ✅ Remove `user-scalable=no` from viewport meta tag (WCAG AA: low vision users must be able to zoom) - **Fixed in `packages/static/src/meta.tsx`**
277
280
-[x] ✅ Add `<title>` tag (can be updated dynamically via React) - **Already implemented in `packages/frontend/browser.ts`** with `set_window_title()` function called throughout app navigation
@@ -280,41 +283,48 @@ These phases outline areas that need further accessibility work. Explore in deta
280
283
-[ ] Add **skip links** for keyboard navigation (skip to main content, skip nav)
281
284
282
285
#### 2. Document Structure
286
+
283
287
-[ ] Ensure React app renders proper semantic HTML structure
284
288
-[ ] Root `<main>` landmark for primary content (✅ partially done in page.tsx)
285
289
-[ ]`<nav>` for top navigation (✅ done in page.tsx)
286
290
-[ ]`<aside>` for sidebars (need to verify)
287
291
-[ ] Dynamic page `<title>` based on context (projects, files, pages)
288
292
289
293
#### 3. Focus Management & Keyboard
294
+
290
295
-[ ] Skip to main content link (functional, keyboard-accessible)
291
296
-[ ] Focus visible styles for keyboard users (`:focus-visible`)
292
297
-[ ] Focus trap for modals (ensure focus doesn't escape)
293
298
-[ ] Tab order validation (logical flow through page)
294
299
-[ ] Return key handling for interactive elements
295
300
296
301
#### 4. Color & Contrast
302
+
297
303
-[ ] Verify WCAG AA contrast ratios (4.5:1 for normal text, 3:1 for large text)
298
304
-[ ] Test with color blindness simulators
299
305
-[ ] Ensure no information conveyed by color alone
300
306
301
307
#### 5. Images & Icons
308
+
302
309
-[ ] All decorative images: `aria-hidden="true"` or empty `alt=""`
**Root Cause**: The actual Ant Design tab elements (`div role="tab"`) are nested too deeply inside the tablist wrapper due to how renderTabBar wraps each tab in SortableTab.
542
559
543
560
**Structure Problem**:
561
+
544
562
```
545
563
SortableTabs role="tablist"
546
564
└─ Ant Design Tabs component
@@ -562,7 +580,7 @@ SortableTabs role="tablist"
562
580
### Remaining Work
563
581
564
582
**Immediate**:
583
+
565
584
1. Decide on approach to fix aria-required-parent/children (requires deeper restructuring)
566
585
567
-
**Future**:
568
-
2.**DEFER**: color-contrast (8+ items) - plan custom antd theme with accessibility option
586
+
**Future**: 2. **DEFER**: color-contrast (8+ items) - plan custom antd theme with accessibility option
Copy file name to clipboardExpand all lines: src/packages/frontend/i18n/trans/ar_EG.json
+3-1Lines changed: 3 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -156,7 +156,7 @@
156
156
"ai-generate-document.modal.title": "إنشاء مستند {docName} باستخدام الذكاء الاصطناعي",
157
157
"ai-generator.select_llm": "اختر نموذج اللغة",
158
158
"app.fullscreen-button.tooltip": "وضع الشاشة الكاملة، يركز على المستند أو الصفحة الحالية.",
159
-
"app.hotkey.dialog.help_text": "انقر فوق الإطارات أعلاه • المفتاح 0 يُظهر/يركز على الدردشة • المفاتيح 1–9 تركز على الإطارات • اكتب للبحث • ↑↓ للتنقل • Enter للفتح • ESC للإغلاق",
159
+
"app.hotkey.dialog.help_text": "انقر على الإطارات أعلاه • المفتاح 0 يبدل الدردشة • المفاتيح 1-9 تركز على الإطارات • اكتب للبحث • ↑↓ للتنقل • عودة لفتح • ESC للإغلاق",
160
160
"app.hotkey.dialog.search_placeholder": "البحث في الملفات والصفحات...",
161
161
"app.hotkey.dialog.title": "التنقل السريع",
162
162
"app.verify-email-banner.edit": "إذا كانت عنوان البريد الإلكتروني خاطئة، يرجى <E>تعديله</E> في إعدادات الحساب.",
@@ -1463,7 +1463,9 @@
1463
1463
"projects.table-controls.hashtags.placeholder": "التصفية حسب الوسوم...",
1464
1464
"projects.table-controls.hidden.label": "مخفي",
1465
1465
"projects.table-controls.search.placeholder": "ابحث عن المشاريع...",
1466
+
"projects.table.keyboard-row-hint": "المشروع {title}. استخدم الأسهم لأعلى ولأسفل للتحرك؛ اضغط على Enter أو Space للفتح.",
1466
1467
"projects.table.last-edited": "آخر تعديل",
1468
+
"projects.table.untitled": "بدون عنوان",
1467
1469
"purchases.automatic-payments-warning.description": "المدفوعات التلقائية هي <b>أكثر ملاءمة</b> بكثير، وست<b>وفر لك الوقت</b>، و<b>تضمن عدم إلغاء الاشتراكات</b> عن طريق الخطأ.",
1468
1470
"purchases.automatic-payments-warning.title": "الدفع التلقائي ليس مطلوبًا للاشتراك",
"app.fullscreen-button.tooltip": "Vollbildmodus, fokussiert auf das aktuelle Dokument oder die aktuelle Seite",
159
-
"app.hotkey.dialog.help_text": "Klicken Sie auf Rahmen oben • Taste 0 zeigt/fokussiert Chat • Tasten 1–9 fokussieren Rahmen • Tippen zum Suchen • ↑↓ navigieren • Eingabetaste zum Öffnen • ESC zum Schließen",
159
+
"app.hotkey.dialog.help_text": "Klicke auf Rahmen oben • Taste 0 schaltet Chat um • Tasten 1–9 fokussieren Rahmen • Tippen, um zu suchen • ↑↓ navigieren • Eingabetaste zum Öffnen • ESC zum Schließen",
160
160
"app.hotkey.dialog.search_placeholder": "Dateien und Seiten durchsuchen...",
161
161
"app.hotkey.dialog.title": "Schnellnavigation",
162
162
"app.verify-email-banner.edit": "Wenn die E-Mail-Adresse falsch ist, bitte <E>bearbeiten</E> Sie sie in den Kontoeinstellungen.",
"projects.table.keyboard-row-hint": "Projekt {title}. Verwenden Sie die Pfeiltasten nach oben und unten, um sich zu bewegen; drücken Sie Enter oder Leertaste, um zu öffnen.",
"purchases.automatic-payments-warning.description": "Automatische Zahlungen sind viel <b>bequemer</b>, <b>ersparen Ihnen Zeit</b> und <b>stellen sicher, dass Abonnements nicht versehentlich gekündigt werden</b>.",
1468
1470
"purchases.automatic-payments-warning.title": "Automatische Zahlungen sind NICHT erforderlich, um ein Abonnement zu haben",
1469
1471
"purchases.automatic-payments.are-enabled": "Automatische Zahlungen sind aktiviert",
Copy file name to clipboardExpand all lines: src/packages/frontend/i18n/trans/es_ES.json
+3-1Lines changed: 3 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -156,7 +156,7 @@
156
156
"ai-generate-document.modal.title": "Generar un documento {docName} usando IA",
157
157
"ai-generator.select_llm": "Seleccionar modelo de idioma",
158
158
"app.fullscreen-button.tooltip": "Modo de pantalla completa, centrado en el documento o página actual.",
159
-
"app.hotkey.dialog.help_text": "Haz clic en los marcos de arriba • La tecla 0 muestra/enfoca el chat • Las teclas 1–9 enfocan los marcos • Escribe para buscar • ↑↓ navega • Intro para abrir • ESC para cerrar",
159
+
"app.hotkey.dialog.help_text": "Haz clic en los marcos de arriba • La tecla 0 alterna el chat • Las teclas 1–9 enfocan los marcos • Escribe para buscar • ↑↓ navega • Return para abrir • ESC para cerrar",
160
160
"app.hotkey.dialog.search_placeholder": "Buscar archivos y páginas...",
161
161
"app.hotkey.dialog.title": "Navegación Rápida",
162
162
"app.verify-email-banner.edit": "Si la dirección de correo electrónico es incorrecta, por favor <E>edítala</E> en la configuración de la cuenta.",
@@ -1463,7 +1463,9 @@
1463
1463
"projects.table-controls.hashtags.placeholder": "Filtrar por hashtags...",
"projects.table.keyboard-row-hint": "Proyecto {title}. Usa las flechas Arriba y Abajo para moverte; presiona Enter o Espacio para abrir.",
1466
1467
"projects.table.last-edited": "Última edición",
1468
+
"projects.table.untitled": "Sin título",
1467
1469
"purchases.automatic-payments-warning.description": "Los pagos automáticos son mucho <b>más convenientes</b>, te <b>ahorrarán tiempo</b> y <b>asegurarán que las suscripciones no se cancelen</b> por accidente.",
1468
1470
"purchases.automatic-payments-warning.title": "Los pagos automáticos NO son necesarios para tener una suscripción",
1469
1471
"purchases.automatic-payments.are-enabled": "Los pagos automáticos están habilitados",
0 commit comments