روح للمحتوى على طول

مرجع الـ API

كل option و theme key و method و export في الـ package، مع الـ type والقيمة الـ default بتاعة كل واحد.

في الصفحة دي

الـ Options

بتتمرّر لـ init(options)، أو كـ props لـ AccessibilityWidget، أو بعدين لـ widget.setOptions(options).

الـ Options
الاسمالـ typeالـ defaultالوصف
position"left" | "right""left"ناحية الشاشة اللي فيها زرار الفتح واللوحة.
offset{ x?: number; y?: number }{ x: 24, y: 24 }المسافة من أطراف الشاشة، بالـ px (0–1000).
themeAccessibilityThemeالألوان والـ radius والخط: شوف «الـ Theme» تحت.
colorScheme"auto" | "light" | "dark""auto"لوحة فاتحة أو غامقة. ‎"auto"‎ بتمشي ورا الصفحة: بتبقى غامقة طول ما خلفية الموقع نفسه غامقة، مهما كانت طريقة الموقع في تبديل الـ theme. ألوان اللوحة اللي بتحددها في theme بتقفل ‎"auto"‎.
iconstring | Elementbuilt-in iconلوجو زرار الفتح: URL لصورة أو DOM element. ماتمرّرش غير elements موثوقة: لأنها بتتنسخ زي ما هي.
logostring | Element | nullhiddenلوجو جنب عنوان اللوحة.
buttonSizenumber56قطر زرار الفتح، بالـ px (24–160).
featuresPartial<Record<FeatureKey, boolean>>all onخلّي أي control بـ false عشان تشيله. الإعداد اللي اتشال بيفضل مقفول.
initialSettingsPartial<AccessibilitySettings>إعدادات للزوار اللي مش حافظين أي حاجة.
languagesAccessibilityLanguage[] | falseEnglish + Arabicعناصر قائمة اللغات، أو false عشان تخفي القائمة.
languagestringsaved → <html lang> → firstكود لغة البداية.
labelsPartial<AccessibilityLabels>غيّر نصوص معينة فوق اللغة الشغالة.
dir"ltr" | "rtl"language's directionاجبر اتجاه النص بتاع الـ widget.
shortcutstring | false"Alt+A"shortcut بيفتح اللوحة ويقفلها، وبيرجّع الـ widget بعد «إخفاء الأداة». مع false، زرار الإخفاء بيتشال.
statementUrlstringلينك الـ accessibility statement بتاعك في الـ footer بتاع اللوحة (http أو https أو relative).
feedbackUrlstringالمكان اللي الزوار يبلّغوا فيه عن مشكلة accessibility (صفحة أو form أو mailto:)، وبيظهر في الـ footer بتاع اللوحة.
showSkipLinkbooleantrueلينك «تخطَّ إلى المحتوى الرئيسي». مش بيتضاف لو الصفحة مفيهاش main أو h1، أو لو بتبدأ أصلًا بـ skip link خاص بيها.
zIndexnumber2147483000ترتيب طبقة الـ widget (stacking order).
persistbooleantrueاحفظ الإعدادات في الـ localStorage، وخلّيها متزامنة بين الـ tabs.
storageKeystring"a11yw-settings"الـ key بتاع الـ localStorage.
noncestringالـ CSP nonce للـ style tags اللي بتتضاف.
onChange(settings) => voidبيتنادى لما الزائر يغيّر أي حاجة.

الـ Theme

الـ keys بتاعة الـ option theme. الألوان بتقبل أي لون CSS، بس فحص التباين بيشمل الألوان الـ hex بس.

الـ Theme
الاسمالـ typeالوصف
primarystringلون البراند: زرار الفتح والـ header والـ active states.
onPrimarystringلون النص والأيقونات فوق الـ primary.
backgroundstringخلفية اللوحة.
surfacestringالـ footer والـ segmented controls والـ hover states.
text, mutedTextstringالنص والنص الثانوي.
borderstringالـ borders.
radiusnumber | stringانحناء الزوايا: رقم بالـ px أو أي CSS length.
fontFamilystringالـ font stack بتاع اللوحة.

الـ instance methods

init() بترجّع الـ widget. ونسخة الـ script tag بتعرض نفس الـ exports على window.A11yWidget.

TypeScript
import { init } from "open-accessibility-widget";

const widget = init();

widget.open(); widget.close(); widget.toggle();
widget.getSettings();                                  // a frozen snapshot
widget.setSettings({ fontSize: 120 });                 // validated: bad values are dropped
widget.setSettings((s) => ({ fontSize: s.fontSize + 10 }));
widget.toggleProfile("visionImpaired");
widget.reset();
widget.setOptions({ theme: { primary: "#000000" }, language: "ar" });
const unsubscribe = widget.subscribe(({ settings, isOpen }) => {});
widget.destroy();                                      // removes the widget and undoes every change
الـ instance methods
الاسمالـ typeالوصف
open(), close(), toggle()voidافتح اللوحة أو اقفلها أو اعملها toggle.
getSettings()AccessibilitySettingsالإعدادات الحالية، كـ snapshot متجمّدة (frozen).
getState()AccessibilityStateالإعدادات، واللوحة مفتوحة ولا لأ.
setSettings(update)voidدمج التغييرات: object، أو function بتاخد الإعدادات اللي قبلها. المدخلات بتتعملها validation والقيم الغلط بتتشال. لو حطيت profiles هتتطبق التعديلات بتاعتها كمان.
toggleProfile(id)voidشغّل profile أو اقفله.
reset()voidرجّع كل تعديل والصفحة ترجع زي ما إنت عاملها.
setOptions(options)voidغيّر الـ options بتاعة الشكل والسلوك وهو شغال (at runtime).
subscribe(listener)() => voidاسمع لتغييرات الإعدادات وحالة الفتح. بترجّع function بتوقف الاستماع.
destroy()voidشيل الـ widget وارجع في كل تغيير عمله في الصفحة.

React

من open-accessibility-widget/react، اللي بيعمل re-export لكل الباقي كمان. الـ entry دي متعلّم عليها "use client".

React
الاسمالـ typeالوصف
<AccessibilityWidget {...options} />nullبيركّب الـ widget بالـ options دي. تغيير الـ props بينادي setOptions()، والـ unmount بيشيل الـ widget. هو نفسه مش بيعمل render لأي حاجة.
useAccessibility(){ settings, isOpen, widget }اقرا الـ widget واتحكم فيه من أي component. widget بتبقى null لحد ما يتركّب.

الـ Exports

الـ named exports بتاعة الـ package.

الـ Exports
الاسمالـ typeالوصف
init(options), createAccessibilityWidget(options)AccessibilityWidgetInstanceبيركّب الـ widget على body ويرجّعه. لو ناديته تاني بيبدّل الـ widget الموجود.
getAccessibilityWidget()AccessibilityWidgetInstance | nullالـ widget اللي شغال دلوقتي، لو فيه.
onActiveWidgetChange(listener)() => voidاسمع لما widget يتعمل أو يتشال. بترجّع function بتوقف الاستماع.
DEFAULT_SETTINGSReadonly<AccessibilitySettings>كل الإعدادات بالقيم الـ default بتاعتها.
RANGESRecord<RangeKey, { min, max, step }>الـ minimum والـ maximum والـ step لكل إعداد بالنسبة المئوية.
PROFILE_IDS, PROFILE_PRESETSProfileId[], Record<ProfileId, ProfilePreset>الـ ids بتاعة الـ profiles، والتعديلات اللي كل profile بيشغّلها.
sanitizeSettings(input)AccessibilitySettingsاعمل validation لمدخلات مش موثوقة وحوّلها لإعدادات كاملة.
builtInLanguagesAccessibilityLanguage[]الإنجليزي والعربي، عشان تزوّد عليهم لغاتك.
defaultLabels, arabicLabelsAccessibilityLabelsالنصوص الإنجليزي والعربي.

الإعدادات

اللي getSettings() بترجّعه، واللي setSettings() وinitialSettings بيقبلوه. في النسب المئوية، 100 معناها «من غير تغيير»؛ والقيم اللي برّه الـ range بتتقصّ عند الحد، والقيم المش معروفة بتتشال.

الإعدادات
الاسمالـ typeالـ defaultالوصف
profilesProfileId[][]الـ profiles الشغالة، بالترتيب اللي اتشغلت بيه.
contentScalenumber (50–200)100تكبير الصفحة (zoom)، بالنسبة المئوية.
fontSizenumber (50–200)100حجم النص، بالنسبة المئوية.
lineHeightnumber (100–200)100المسافة بين السطور، بالنسبة المئوية.
letterSpacingnumber (100–200)100المسافة بين الحروف، بالنسبة المئوية (مش بتتطبق على العربي).
textAlign"default" | "left" | "center" | "right" | "justify""default"محاذاة النص.
readableFontbooleanfalseخط بسيط وسهل في القراية.
boldTextbooleanfalseكل نص الصفحة يبقى bold.
highlightTitles, highlightLinksbooleanfalseإطار حوالين العناوين / اللينكات.
textMagnifierbooleanfalseبيعرض النص اللي تحت المؤشر أو الـ focus مكبّر (والـ alt text بتاع الصور).
readAloudbooleanfalseالضغط أو اللمس أو الـ focus بالكيبورد بيقرا الجزء ده بصوت عالي بالـ speech بتاع المتصفح نفسه، بلغة الصفحة. Escape بيوقفه.
colorMode"default" | "dark-contrast" | "light-contrast" | "high-contrast""default"وضع التباين.
saturationMode"default" | "monochrome" | "low-saturation" | "high-saturation""default"فلتر التشبع.
invertColorsbooleanfalseبيعكس ألوان الصفحة؛ والصور والفيديو بيفضلوا بألوانهم.
textColor, titleColor, backgroundColor"#rrggbb" | nullnullألوان مخصصة للنص والعناوين والخلفية.
muteSounds, hideImages, stopAnimationsbooleanfalseكتم الميديا، وإخفاء الصور، وإيقاف الـ CSS animations.
readingGuide, readingMaskbooleanfalseخط القراءة ونافذة التركيز.
highlightFocus, highlightHoverbooleanfalseإطار واضح عند الـ focus بالكيبورد / عند الـ hover.
cursor"default" | "black" | "white""default"مؤشر كبير.

محتوى الـ package

كل entry جاية بـ ESM و CommonJS ومعاها الـ type declarations. من غير runtime dependencies.

محتوى الـ package
الاسمالـ typeالوصف
open-accessibility-widgetESM + CJS + .d.tsأي framework، أو JavaScript عادي مع bundler.
open-accessibility-widget/reactESM + CJS + .d.tsReact component و hook؛ وreact 18 أو أحدث peer dependency اختيارية.
open-accessibility-widget/languagesESM + CJS + .d.tsلغات إضافية اختيارية (14)، tree-shakable، حوالي 1 KB gzipped لكل لغة.
dist/open-accessibility-widget.global.jsIIFEنسخة الـ script tag، حوالي 27 KB gzipped؛ بتعرض window.A11yWidget.
dist/open-accessibility-widget.languages.global.jsIIFEباكدج اللغات لنسخة الـ script tag، حوالي 17 KB gzipped؛ بتعرض window.A11yWidgetLanguages.

عدّل الصفحة دي على GitHub