From df2c8546db6ad1d6551418df3e8643f38367945b Mon Sep 17 00:00:00 2001 From: mjalmoudy94 Date: Tue, 13 Oct 2026 02:48:48 +0330 Subject: [PATCH] =?UTF-8?q?=D8=A7=D9=81=D8=B2=D9=88=D8=AF=D9=86=20=D8=B3?= =?UTF-8?q?=DB=8C=D8=B3=D8=AA=D9=85=20Motion=20=D8=A8=D9=87=20=D8=AA=D9=85?= =?UTF-8?q?=D8=A7=D9=85=20=D8=A8=D8=AE=D8=B4=E2=80=8C=D9=87=D8=A7=DB=8C=20?= =?UTF-8?q?=D8=B1=D8=A7=D8=A8=D8=B7=20=DA=A9=D8=A7=D8=B1=D8=A8=D8=B1=DB=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit واژگان مشترک حرکت در globals.css: شش @keyframes و شش کلاس .anim-* به‌همراه .anim-stagger برای ورود آبشاری. همهٔ مدت‌زمان‌ها پشت custom property هستند تا یک override کل اپ را تنظیم کند. - packages/ui: Button، Card، Stat، Loading/Empty/ErrorState، UsageBar، Timeline، Modal، Drawer، Table، ToastStack و ArtifactViewer - ریشهٔ هر صفحهٔ (app) با .anim-stagger وارد می‌شود - AppShell: محتوا fade، منوی کنار stagger، منوهای کشویی slide-up - prefers-reduced-motion مدت‌زمان‌ها را به ۰.۰۱ms می‌رساند تا وضعیت پایانی حفظ شود - قرارداد motion در src/test/motion.test.tsx تست می‌شود تا بازنویسی بعدی آن را بی‌صدا حذف نکند - تست‌های فرانت‌اند: ۳۵ ← ۴۵ --- TODO.md | 16 +- apps/web/src/app/(app)/admin/errors/page.tsx | 2 +- apps/web/src/app/(app)/admin/layout.tsx | 2 +- apps/web/src/app/(app)/admin/models/page.tsx | 4 +- .../app/(app)/admin/organizations/page.tsx | 4 +- apps/web/src/app/(app)/admin/page.tsx | 2 +- .../src/app/(app)/admin/providers/page.tsx | 2 +- .../src/app/(app)/admin/rate-cards/page.tsx | 4 +- apps/web/src/app/(app)/admin/routing/page.tsx | 4 +- apps/web/src/app/(app)/admin/usage/page.tsx | 2 +- apps/web/src/app/(app)/billing/page.tsx | 2 +- apps/web/src/app/(app)/dashboard/page.tsx | 2 +- apps/web/src/app/(app)/manager/page.tsx | 4 +- apps/web/src/app/(app)/projects/[id]/page.tsx | 4 +- apps/web/src/app/(app)/projects/page.tsx | 4 +- apps/web/src/app/(app)/settings/page.tsx | 2 +- apps/web/src/app/(app)/tasks/[id]/page.tsx | 2 +- apps/web/src/app/(app)/tasks/page.tsx | 2 +- apps/web/src/app/(app)/traces/page.tsx | 4 +- .../web/src/app/(app)/workforce/[id]/page.tsx | 2 +- apps/web/src/app/(app)/workforce/page.tsx | 4 +- apps/web/src/app/globals.css | 167 ++++++++++++++++++ apps/web/src/app/login/page.tsx | 2 +- apps/web/src/app/onboarding/page.tsx | 2 +- apps/web/src/app/signup/page.tsx | 2 +- apps/web/src/components/AppShell.tsx | 8 +- apps/web/src/components/CommandPalette.tsx | 2 +- apps/web/src/test/motion.test.tsx | 140 +++++++++++++++ packages/ui/src/index.tsx | 41 +++-- 29 files changed, 381 insertions(+), 57 deletions(-) create mode 100644 apps/web/src/test/motion.test.tsx diff --git a/TODO.md b/TODO.md index 23cd620..50bbaec 100644 --- a/TODO.md +++ b/TODO.md @@ -3,7 +3,7 @@ > **وضعیت (به‌روزرسانی نهایی):** پیاده‌سازی کامل شده است. > > - بک‌اند: **۲۱۶ تست سبز**، `ruff check` تمیز، `mypy` روی **۹۰ فایل** بدون خطا. -> - فرانت‌اند: **۲۵ تست سبز**، `next lint` بدون هشدار، `tsc --noEmit` تمیز. +> - فرانت‌اند: **۴۵ تست سبز**، `next lint` بدون هشدار، `tsc --noEmit` تمیز. > - دو migration در `apps/api/alembic/versions/` ساخته و با `alembic check` > تأیید شد که هیچ drift ندارد. مسیر upgrade و downgrade هر دو تست شده‌اند. > - workerها (`billing-worker`, `ai-runtime`, `sandbox-gateway`) واقعی و تست‌شده‌اند. @@ -15,6 +15,20 @@ > `error_events` ذخیره می‌شود و در `/admin/errors` قابل مشاهده و رسیدگی است. > هیچ خطایی بدون پاک‌سازی secret ذخیره نمی‌شود (`app/core/redact.py`). > +> **افزودهٔ بعد از بستن مراحل (درخواست کاربر):** پالت فرمان (`⌘K`) و صفحهٔ +> `/admin/usage`. +> +> **افزودهٔ بعد از بستن مراحل (درخواست کاربر):** Motion system. یک واژگان +> مشترک در `apps/web/src/app/globals.css` — شش `@keyframes` و شش کلاس +> `.anim-*` به‌همراه `.anim-stagger` برای ورود آبشاری — و همهٔ مدت‌زمان‌ها +> پشت custom property. در `packages/ui/src/index.tsx` روی Button، Card، +> Stat، Loading/Empty/ErrorState، UsageBar، Timeline، Modal، Drawer، Table، +> ToastStack و ArtifactViewer اعمال شده و ریشهٔ هر صفحهٔ `(app)` با +> `.anim-stagger` وارد می‌شود. `prefers-reduced-motion` مدت‌زمان‌ها را به +> ۰.۰۱ms می‌رساند تا وضعیت پایانی حفظ شود. قرارداد motion در +> `src/test/motion.test.tsx` Tests می‌شود تا بازنویسی بعدی آن را بی‌صدا +> حذف نکند. +> > **چیزهایی که عمداً باز مانده‌اند:** در `docs/security-checklist.md` دو مورد > «⚠️ بدون تست اختصاصی» علامت خورده‌اند (نبود secret در frontend، و مقدار پیش‌فرض > `NetworkPolicy.DENY_ALL`). هر دو کنترل در کد درست کار می‌کنند، فقط تست مستقل diff --git a/apps/web/src/app/(app)/admin/errors/page.tsx b/apps/web/src/app/(app)/admin/errors/page.tsx index dc83c43..fc91351 100644 --- a/apps/web/src/app/(app)/admin/errors/page.tsx +++ b/apps/web/src/app/(app)/admin/errors/page.tsx @@ -341,7 +341,7 @@ export default function AdminErrorsPage() { const tiles = summary?.open_by_severity ?? {}; return ( -
+

کنسول خطا

diff --git a/apps/web/src/app/(app)/admin/layout.tsx b/apps/web/src/app/(app)/admin/layout.tsx index b9e09a2..9809707 100644 --- a/apps/web/src/app/(app)/admin/layout.tsx +++ b/apps/web/src/app/(app)/admin/layout.tsx @@ -41,7 +41,7 @@ export default function AdminLayout({ children }: { children: React.ReactNode }) } return ( -

+