كل المشاريع

Taqwim

نسخة تجريبيةمنذ 2024MIT

تواريخ هجرية، وتقويم واحد لخمسة أطر عمل.

أدوات للتاريخ الهجري تدعم تقويم أم القرى والتقويم الهجري المدني وتقويم TBLA، ومعها مكوّن تقويم يراعي إمكانية الوصول. سلوك التقويم مكتوب مرة واحدة في آلة حالات لا ترتبط بأي إطار عمل، ولها طبقات ربط لـ Vue و React و Svelte و Solid و Angular.

الصفحة الرئيسية لتوثيق Taqwim وفيها تقويم هجري يعمل

المشكلة

تقويم أم القرى يُؤخذ من جدول ولا يُحسب بمعادلة، فالاختصارات الحسابية قد تخطئ اليوم. ومكوّنات التقويم تزيد المشكلة: خمسة أطر عمل تعني في العادة خمسة تنفيذات، وأخطاء كل تنفيذ على حدة.

تحويل التواريخ وتنسيقها

ts
import { formatHijriDate, toGregorian, toHijri } from '@taqwim/core'

toHijri(new Date('2024-03-11'))
// => { hy: 1445, hm: 9, hd: 1 }

toGregorian({ hy: 1445, hm: 9, hd: 1 })
// => Mon Mar 11 2024

formatHijriDate({ hy: 1445, hm: 9, hd: 1 }, 'iYYYY/iMM/iDD', 'ar')
// => ١٤٤٥/٠٩/٠١

التحويل الافتراضي وفق تقويم أم القرى يعتمد على جدول يغطي الأعوام من 1343 إلى 1500 هـ (1924 إلى 2077 م). وإذا طُلب تاريخ خارج هذا المدى أطلق الخطأ HijriRangeError ولم يُرجع تاريخًا خاطئًا. أما التقويم الهجري المدني وتقويم TBLA فخياران تستوردهما وتمرّرهما صراحةً. وحساب أيام العمل يعدّ الجمعة والسبت عطلة، ويمكن تغيير ذلك في كل استدعاء.

آلة حالات واحدة لخمسة أطر عمل

تتولّى آلة حالات واحدة لا ترتبط بأي إطار عمل بناء شبكة الأيام وإدارة التحديد والتنقّل بين الأشهر وباستخدام لوحة المفاتيح، وتحدّد خصائص data-* و aria-*. وترتبط بها حزم Vue و React و Svelte و Solid و Angular، فتتشارك هذا المنطق. وعندما يكون الخطأ في النواة المشتركة، يُصلح فيها مرة واحدة. وتفحص الاختبارات الشاملة التقويم عبر DOM في الأطر التي تغطيها.

vue
<script setup lang="ts">
import { HijriCalendar } from '@taqwim/vue-styled'
import { ref } from 'vue'

const date = ref()
</script>

<template>
  <HijriCalendar v-model="date" theme="islamic" locale="ar" dir="rtl" />
</template>

لكل إطار عمل حزمتان: حزمة مجرّدة من التنسيق فيها السلوك وخصائص ARIA، وحزمة منسّقة مبنية على الأجزاء العامة للأولى. والمجموع ثلاث عشرة حزمة تصدر معًا برقم إصدار واحد.

السمات

ثلاث وثلاثون سمة مبنية على خصائص CSS مخصّصة، وتُختار بالخاصية data-taqwim-theme دون استيراد ملف أنماط آخر. فيمكن أن تجتمع عدة سمات في صفحة واحدة، وتبديل السمة أثناء التشغيل تغيير في الحالة لا أكثر.

إمكانية الوصول

الشبكة تحمل role="grid"، والتركيز فيها يتنقّل كما يُنتظر من منتقي التاريخ: مفتاح Tab يدخلها ويخرج منها دون المرور على اثنين وأربعين زرًّا، ومفاتيح الأسهم تتنقّل بين الأيام، وتنعكس مع dir="rtl". وتفحص اختبارات الوحدات تباين كل سمة مدمجة مقابل حدود WCAG AA في كل تشغيل، ويفحص axe التقويم بعد عرضه في الاختبارات الشاملة.

وثمّة نقص معروف: الاختبارات الشاملة لا تغطي Angular بعد.

نظرة على المشروع

ثلاث وثلاثون سمة، باتجاهَي الكتابة

لقطات للتقويم المنشور، مأخوذة من موقع التوثيق.

اللغة

السمة

Taqwim calendar, Islamic theme, Arabic, right to left