التثبيت وإعداد بيئة العمل
تعمل منظومة قاهرة بنموذج النسخ والامتلاك (Copy & Own) بأسلوب shadcn المعماري. أنت تمتلك الكود في مشروعك بنسبة 100% دون حزم تشغيلية معقدة في وقت التشغيل.
1. فلسفة النسخ والامتلاك (Copy & Own vs Runtime Lock-in)
لماذا ترفض قاهرة حزم npm المغلقة؟ لأن واجهات الويب الحقيقية تحتاج لتخصيص حر ومرونة في التعديل. في قاهرة، أنت تنسخ كود المكون إلى مشروعك وتعدله كما تشاء مع الحفاظ على التوافق مع التحديثات.
2. تهيئة المشروع التفاعلية (Quickstart)
أمر التهيئة التفاعلي يقوم بإنشاء ملف الإعدادات واستيراد الرموز والسمات المناسبة لمشروعك:
npx qahera-ui init
خلال أمر التهيئة، سيطرح عليك الـ CLI الأسئلة الأساسية لتخصيص بيئتك:
components/ui أو app/views/components.تشريح ملف الإعدادات qahera.config.json
{
"$schema": "https://qahera.alwkala.com/schema/qahera.config.json",
"style": "native",
"rsc": true,
"theme": "zamalek",
"typography": {
"heading": "Alexandria",
"body": "Cairo",
"mono": "JetBrains Mono"
},
"aliases": {
"components": "@/components/ui",
"tokens": "@/styles/tokens",
"themes": "@/styles/themes"
}
}
3. استيراد المكونات حسب الطلب (Selective Add)
يمكنك إضافة المكونات التي تحتاجها فقط لمنع أي تضخم في حجم الحزمة البرمجية:
npx qahera-ui add button card modal navbar
أو إضافة كافة المكونات الـ 46 والأنماط الـ 20 دفعة واحدة:
npx qahera-ui add --all
4. أدلة التكامل التفاعلية حسب بيئة العمل
اختر بيئة التطوير الخاصة بمشروعك لمعاينة خطوات الإعداد الدقيقة:
'use client' فقط في الأطراف التفاعلية مثل Modal أو Dropdown.
import "@/styles/tokens.css";
import "@/styles/themes.css";
import "@/styles/qahera.css";
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="ar" dir="rtl" data-theme="zamalek" data-mode="dark">
<body className="font-cairo bg-surface-page text-primary">
{children}
</body>
</html>
);
}
import { Button } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
export default function HomePage() {
return (
<main className="p-8 max-w-4xl mx-auto">
<Card variant="elevated" padding="lg">
<h1 className="font-alexandria text-2xl font-bold mb-4">منظومة قاهرة المعمارية</h1>
<p className="text-secondary mb-6">مكون خادم نقي 0kb RSC مع دعم كامل للاتجاه المنطقي.</p>
<Button variant="primary" size="md">ابدأ الآن</Button>
</Card>
</main>
);
}
$variant, $size, $tone، وتتوفر رسمياً كحزمة Composer مع دعم لمحرك قوالب League/Plates و WordPress و Laravel.
composer require alwkala/qahera-ui
<?php
require_once __DIR__ . '/vendor/autoload.php';
// أو استدعاء مباشر لملفات التصيير النواة
require_once __DIR__ . '/vendor/alwkala/qahera-ui/renderers/php/renderers/button.php';
require_once __DIR__ . '/vendor/alwkala/qahera-ui/renderers/php/renderers/card.php';
?>
<!DOCTYPE html>
<html lang="ar" dir="rtl" data-theme="zamalek" data-mode="dark">
<head>
<link rel="stylesheet" href="/assets/dist/qahera-tokens.css">
<link rel="stylesheet" href="/assets/dist/qahera-themes.css">
<link rel="stylesheet" href="/assets/dist/qahera.css">
</head>
<body>
<?= qhr_card([
'variant' => 'elevated',
'content' => '
<h2>مرحبا بك في قاهرة</h2>
<p>تصيير PHP نقي مع أعلى كفاءة أداء في الخادم.</p>
' . qhr_button(['variant' => 'primary', 'label' => 'متابعة'])
]) ?>
</body>
</html>
qhr-* مع استدعاء ملفات التوزيع محلياً أو عبر شبكات الـ CDN العالمية (jsDelivr / unpkg).
<!-- Design Tokens & 12 Cairo Themes -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/qahera-tokens.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/qahera-themes.min.css">
<!-- Core Components -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/qahera.min.css">
<!DOCTYPE html>
<html lang="ar" dir="rtl" data-theme="zamalek" data-mode="dark">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="dist/qahera-tokens.css">
<link rel="stylesheet" href="dist/qahera-themes.css">
<link rel="stylesheet" href="dist/qahera.css">
<script src="dist/behavior/alpine.min.js" defer></script>
</head>
<body>
<div class="qhr-card qhr-card--elevated">
<h2 class="qhr-card-title">واجهة سريعة وخفيفة</h2>
<button type="button" class="qhr-btn qhr-btn--primary qhr-btn--md">زر قياسي</button>
</div>
</body>
</html>
qhr-* ليقوم HTMX بتبديلها في الصفحة بلحظة واحدة.
<tr id="order-101" class="qhr-table-row">
<td class="qhr-table-cell">#101</td>
<td class="qhr-table-cell">أحمد الشناوي</td>
<td class="qhr-table-cell"><span class="qhr-badge qhr-badge--success">مكتمل</span></td>
<td class="qhr-table-cell">
<button hx-delete="/orders/101" hx-target="#order-101" hx-swap="outerHTML" class="qhr-btn qhr-btn--ghost qhr-btn--xs qhr-btn--danger">حذف</button>
</td>
</tr>
5. التضمين الفوري عبر شبكات التوزيع (Zero-Build CDN Quickstart)
إذا كنت تبني صفحة هبوط مستقلة، أو موقع ووردبريس، أو مشروع PHP لا يعتمد على Node.js أو أدوات التحزيم، يمكنك استدعاء ملفات قاهرة مباشرة عبر شبكات الـ CDN العالمية الفائقة السرعة (jsDelivr و unpkg):
| حزمة التوزيع | رابط jsDelivr المعتمد | رابط unpkg المباشر | الوظيفة والوصف المعماري |
|---|---|---|---|
qahera-tokens.min.css |
cdn.jsdelivr.net/npm/[email protected]/dist/qahera-tokens.min.css |
unpkg.com/[email protected]/dist/qahera-tokens.min.css |
رموز التصميم الأولية، سلم الألوان، ومصفوفة الارتفاعات. |
qahera-themes.min.css |
cdn.jsdelivr.net/npm/[email protected]/dist/qahera-themes.min.css |
unpkg.com/[email protected]/dist/qahera-themes.min.css |
أطلس سمات أحياء القاهرة الـ 12 (data-theme). |
qahera.min.css |
cdn.jsdelivr.net/npm/[email protected]/dist/qahera.min.css |
unpkg.com/[email protected]/dist/qahera.min.css |
ورقة أنماط المكونات الـ 45 الذرية المعيارية (qhr-*). |
@1.5.3 في بيئة الإنتاج لضمان الاستقرار التام، أو استخدام @latest في بيئات التطوير لتلقي التحديثات والتحسينات التلقائية.
<!DOCTYPE html>
<html lang="ar" dir="rtl" data-theme="zamalek" data-mode="dark">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>تطبيق قاهرة عبر CDN</title>
<!-- Fonts: Alexandria & Cairo -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Alexandria:wght@600;700;800&family=Cairo:wght@400;500;600;700&display=swap" rel="stylesheet">
<!-- Qahera CDN CSS Layers -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/qahera-tokens.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/qahera-themes.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/qahera.min.css">
<!-- Alpine.js for Interactive Controls -->
<script defer src="https://cdn.jsdelivr.net/npm/[email protected]/dist/cdn.min.js"></script>
</head>
<body style="background: var(--qhr-surface-page, #0A0D14); color: var(--qhr-text-primary, #F8FAFC); font-family: var(--qhr-font-body, 'Cairo', sans-serif); padding: 2rem;">
<div class="qhr-card qhr-card--elevated" style="max-width: 600px; margin: 0 auto; padding: 2rem;">
<span class="qhr-badge qhr-badge--primary qhr-badge--pill">CDN Quickstart</span>
<h1 style="font-family: var(--qhr-font-heading, 'Alexandria', sans-serif); margin-block: 1rem 0.5rem;">منظومة قاهرة المعمارية</h1>
<p style="color: var(--qhr-text-secondary); line-height: 1.7; margin-block-end: 1.5rem;">جاهزة للعمل فوراً في أي متصفح دون أدوات بناء وبكفاءة 100% Logical CSS.</p>
<button type="button" class="qhr-btn qhr-btn--primary qhr-btn--md">زر رئيسي</button>
</div>
</body>
</html>
6. الجدول المرجعي لأوامر الـ CLI
| الأمر (Command) | الخيارات الشائعة | الوصف والوظيفة |
|---|---|---|
npx qahera-ui init |
--yes, --cwd <path> |
تهيئة ملف الإعدادات واستيراد الرموز والسمات لمشروع جديد. |
npx qahera-ui add <names...> |
--all, --overwrite |
نسخ مكونات أو أنماط محددة إلى مجلد المكونات الخاص بك. |
npx qahera-ui list |
--components, --patterns |
عرض فهرس كافة المكونات والأنماط المتاحة في السجل الكنسي. |
npx qahera-ui template <name> |
--dir <path> |
توليد قالب إنتاجي متكامل (من الـ 20 قالباً) مباشرة في مشروعك. |
npx qahera-ui validate |
--strict |
فحص سلامة الرموز والعقود والتحقق من عدم وجود قيم صلبة. |
7. الأسئلة الشائعة واستكشاف الأخطاء
margin-inline-start و padding-inline. تغيير وسم dir="ltr" أو dir="rtl" في جذر الصفحة يعكس التخطيط فورياً وبشكل تلقائي 100%.