نمایش ورود موفق
پیام موفقیت ورود در TDS یک Alert نیست. ورود موفق یک رویداد تمامصفحه است که اطلاعات واقعی کاربر را با انیمیشن نشان میدهد و با نشستن تصویر پروفایل او روی آیکون حساب کاربری داک شیشهای تمام میشود؛ از آن لحظه داک کاربر را لاگینشده نشان میدهد. این نمایش بخشی از هویت بصری هر پروژه است، نه کامپوننت: هر پروژه/تم نمایش خودش را در کپی کد میسازد و محصول فقط یک تابع صدا میزند.
تصمیم با خود پروژه است: چه اطلاعاتی از کاربر نشان داده شود (نام و نام خانوادگی، تصویر پروفایل، لوکیشن، نقش، تیم و هر دادهٔ لازم دیگر) و کل صفحه چطور انیمیت شود. تنها چیز ثابت این است که نمایش با نشستن تصویر پروفایل روی آیکون حساب داک تمام شود.
اسکن و امواج روی کل صفحه، آواتار با حلقهٔ هفترنگ، پرواز کمانی به داک.
جرقههای پراکنده به هم میپیوندند و آواتار را میسازند؛ دنبالهٔ جرقه تا داک.
پرتو از داک تا بالای صفحه؛ آواتار با حاشیهٔ Product Launch در امتداد پرتو فرود میآید.
صفحهٔ کاغذی با تیتر بزرگ واژهبهواژه؛ صفحه تا ارتفاع داک تا میخورد.
استفاده در محصول
import { signInSuccess } from '@tokapps/tuk/dock';// پس از تأیید سرور — هر دادهٔ کاربر که نمایش باید نشان دهد اینجا میآیدawait signInSuccess({ name: 'سارا محمدی', // نام و نام خانوادگی email: 'sara@example.com', avatarUrl: '/avatars/sara.jpg', // تصویر پروفایل — روی آیکون حساب داک مینشیند meta: { location: 'تهران', role: 'طراح محصول', team: 'بنیان' },});router.push('/');همین. داک (کپی کد و کپی کد) بدون prop از همین نشست میخوانند. خروج: کپی کد.
| گزینه | کار |
|---|---|
| کپی کد | اجرای یک نمایش مشخص بهجای انتخاب تم (فقط برای پیشنمایش و مستندات) |
| کپی کد | پیام صفحهخوان؛ پیشفرض کپی کد |
چه چیزی از کاربر نشان داده میشود
نمایش ورود روی شیء کاربر مینشیند؛ هر چه محصول لازم دارد را همانجا بدهد:
| فیلد | کاربرد در نمایش |
|---|---|
| کپی کد | نام و نام خانوادگی — همیشه نشان داده میشود |
| کپی کد | تصویر پروفایل — در پردهٔ ظهور دیده میشود و در پردهٔ پرواز روی آیکون حساب داک مینشیند (بدون آن، حرفاول نام) |
| کپی کد | حرفاول؛ اگر تصویر و حرفاول نباشد از نام ساخته میشود |
| کپی کد | برای زیرنویس یا تشخیص حساب |
| کپی کد | هر دادهٔ اضافی (کپی کد، کپی کد، کپی کد، …) — کلید/مقدار آزاد |
دو کاربرد مهم کپی کد و کپی کد در داک هم دیده میشوند: آیکون حساب داک همان تصویر پروفایل را نشان میدهد و منوی پروفایل از همین داده پر میشود.
سه لایه، سه مسئولیت
| لایه | کجا | چه میکند |
|---|---|---|
| موتور (Layer 3) | کپی کد | کاهش حرکت، اعلان صفحهخوان، ساخت و پاککردن root، ابزارها (کپی کد، کپی کد، …) |
| واکنش داک (Layer 3) | کپی کد | در همهٔ برندها یکسان: دریافت = بالا آمدن + حاشیهٔ هفترنگ؛ نشستن = تپش |
| نمایش برند (Layer 5) | کپی کد + کپی کد | هر چیزی که بین «کلیک ورود» و «نشستن در داک» دیده میشود |
| انتخاب (توکن) | کپی کد | کپی کد و زمانها |
نمایشهای موجود
| نام | تمها | ایده |
|---|---|---|
| کپی کد | tokapps · funding · enterprise | مدار و اسکن؛ هستهٔ توکاپس |
| کپی کد | ideation | ایدهها به هم میپیوندند |
| کپی کد | product-hunt | پرتاب و فرود در امتداد پرتو |
| کپی کد | stories | صفحهٔ تحریری که تا میخورد |
ساخت نمایش تازه برای یک برند
۱. سه پرده را طراحی کنید
هر نمایش سه پرده دارد و موتور زمان هر کدام را از توکن میدهد:
- ظهور (کپی کد): کل صفحه درگیر میشود و اطلاعات واقعی کاربر میآید — نام و نام خانوادگی، تصویر پروفایل و هر دادهٔ دیگری که محصول داده (کپی کد).
- پرواز (کپی کد): تصویر پروفایل با کپی کد به آیکون حساب کاربری داک میرود؛ داک «دریافت» میکند.
- نشستن (کپی کد): تصویر واقعی روی آیکون حساب مینشیند؛ داک میتپد و لاگینشده نشان داده میشود؛ صحنه کنار میرود.
۲. فایل نمایش را بنویسید
کپی کد:
import type { Arrival } from './types';import './pulse.css';export const pulse: Arrival = async (ctx) => { ctx.part('veil'); // پردهی مشترک: تیره و مات، زیر داک const stage = ctx.part('stage'); // لایهٔ بالای داک، وسطچین // تصویر پروفایل اگر محصول داده باشد، وگرنه حرفاول نام const avatar = ctx.user.avatarUrl ? ctx.image('avatar', ctx.user.avatarUrl, stage) : ctx.part('avatar', ctx.initials, stage); ctx.part('name', ctx.user.name, stage); // نام و نام خانوادگی const meta = [ctx.user.meta?.location, ctx.user.meta?.role].filter(Boolean).join(' · '); if (meta) ctx.part('meta', meta, stage); // لوکیشن / نقش / هر دادهٔ لازم دیگر const shock = ctx.part('shock'); // موج برخورد مشترک ctx.phase('intro'); await ctx.wait(ctx.ms('--tds-arrival-intro')); ctx.phase('flight'); ctx.dockState('receiving'); const c = ctx.targetCenter(); if (c) Object.assign(shock.style, { left: `${c.x}px`, top: `${c.y}px` }); await ctx.flyTo(avatar); // تصویر پروفایل روی آیکون حساب داک مینشیند ctx.land(); // آواتار واقعی در داک ctx.phase('land'); ctx.dockState('landed'); await ctx.wait(ctx.ms('--tds-arrival-land'));};کپی کد همهچیزی است که لازم دارید:
| عضو | کار |
|---|---|
| کپی کد, کپی کد | دادهٔ واقعی کاربر (کپی کد، کپی کد، کپی کد، کپی کد) |
| کپی کد, کپی کد, کپی کد | ریشهٔ نمایش، داک و جایگاه پروفایل در آن |
| کپی کد | ساخت کپی کد — CSS برند با آن هدف میگیرد |
| کپی کد | ساخت کپی کد تصویری (تصویر پروفایل کاربر) |
| کپی کد | کپی کد روی root؛ پردهها در CSS |
| کپی کد, کپی کد | زمانبندی از توکن |
| کپی کد | مرکز آیکون حساب کاربری در داک (برای پرتو، موج، دنباله) |
| کپی کد | پرواز تصویر پروفایل به آیکون حساب داک و کوچکشدن تا اندازهٔ آواتار داک |
| کپی کد | واکنش هماهنگ داک |
| کپی کد | نشاندن آواتار؛ اگر صدا نزنید موتور در پایان صدا میزند |
۳. CSS را فقط با توکن بنویسید
کپی کد — همهچیز زیر کپی کد:
[data-tds="arrival"][data-style="pulse"] [data-part="avatar"] { animation: tds-pulse-in calc(var(--tds-arrival-intro) * 0.5) var(--tds-ease-spring) both;}[data-tds="arrival"][data-style="pulse"]:not([data-phase="intro"]) [data-part="name"] { animation: tds-arrival-fade-out calc(var(--tds-arrival-flight) * 0.3) var(--tds-ease-out) both;}@keyframes tds-pulse-in { from { opacity: 0; transform: scale(0.4); } to { opacity: 1; transform: none; } }اجزای مشترک آمادهاند: کپی کد، کپی کد، کپی کد، کپی کد و انیمیشنهای کپی کد، کپی کد، کپی کد.
۴. ثبت و انتخاب در تم
در کپی کد به کپی کد بیفزایید، سپس در تم:
[data-theme="my-brand"] { --tds-arrival-style: pulse; --tds-arrival-intro: 1.2s; /* اختیاری */ --tds-arrival-dock-stops: var(--tds-gradient-featured); /* رنگ حاشیهٔ داک هنگام دریافت */}و کپی کد را در کپی کد (کپی کد) بنویسید. برندی بیرون از این مخزن بدون تغییر TDS: کپی کد از کپی کد.
قواعد
- نمایش بدون پرواز ناقص است. اگر کپی کد صدا نشود، تصویر پروفایل هرگز روی آیکون حساب داک نمینشیند؛ کپی کد این را با کد کپی کد رد میکند.
- اطلاعات باید واقعی باشند. نمایشی که کپی کد / کپی کد را نمیخواند در هر ورود یکسان میماند (کپی کد).
- فقط توکن. رنگ خام ممنوع؛ گرادیان فقط حاشیهٔ هفترنگ با گذرگاههای کپی کد و نشان کپی کد، حداکثر یک عنصر شاخص در هر لحظه، و در کپی کد تکرنگ.
- داک تنها سطح روشن. پرده زیر داک (کپی کد) و آواتار بالای آن (کپی کد) باشد تا کاربر ببیند آواتار درون داک مینشیند.
- کل نمایش زیر ۴ ثانیه. کاربر منتظر ورود است، نه فیلم.
- کاهش حرکت را خودتان پیاده نکنید. موتور با کپی کد یا کلید کاهش حرکت نمایش را نمیسازد و آواتار بیدرنگ مینشیند.
- صفحهخوان. root با کپی کد است؛ موتور پیام «خوش آمدید» را در یک کپی کد جدا اعلام میکند. متن نمایش تزئینی است.
- کد کامپوننت دست نمیخورد. نمایش تازه فقط در کپی کد و توکنهای تم.
- پس از تغییر: کپی کد و کپی کد.