داکت محصول (ProductDock)
کپی کد همان داکتی است که مستندات TDS دارد، با همهٔ ویژگیهایش در کیت. هر پروژه باید از آن استفاده کند؛ کپی کد خام فقط بخشی از ویژگیها را دارد.
ویژگیها
- شش کلید ثابت از کپی کد تم: منو، جستجو، حالت روز/شب، صدا، پروفایل، ساعت.
- منو نقشه سایت را در پنل بالا باز میکند.
- جستجو (پاپآپ اجباری): کلید جستجو باید یک پاپآپ زنده باز کند، نه نوار درونخطی؛ تنظیمش از کپی کد میآید.
- پروفایل با تنظیمات سریع و خروج (کپی کد).
- ساعت و تقویم با تنظیمات ساعت و تاریخ (پیشفرض از تم).
- تنظیمات سریع: جهت، تراکم، حرکت، کنتراست، ارقام و محل هشدارها.
- هشدارها در داکت یا روی صفحه، طبق تنظیم کاربر.
- موبایل: ورق «به بالا بکشید» و دکمهٔ اسکرول.
استفاده
import { ProductDock } from '@tokapps/tuk/dock';import { meta } from '../theme/meta';<ProductDock policy={meta.dock} clockDefault={meta.dockClock} sections={[ { slug: 'home', label: 'خانه', href: '/', icon: <Icon name="home" size="auto" /> }, { slug: 'dashboard', label: 'داشبورد', href: '/dashboard', icon: <Icon name="launcher" size="auto" /> }, ]} onSearch={() => router.push('/search')} signInHref="/login"/>| prop | کار |
|---|---|
| کپی کد | کپی کد و کپی کد از فراداده تم |
| کپی کد | تقویم و نمایش ساعت پیشفرض تم |
| کپی کد | بخشهای ناوبری (داکت، نقشه سایت و ورق موبایل) |
| کپی کد | فهرست ورق موبایل (اختیاری) |
| کپی کد | کلید جستجو — باید پاپآپ کپی کد را باز کند (اجباری) |
| کپی کد | مسیر ورود برای کلید پروفایل |
| کپی کد | رویدادهای تقویم (اختیاری) |
| کپی کد | محتوای سفارشی نقشه سایت (اختیاری) |
بازیابی نشست (بدون نمایش ورود)
وقتی کاربر از قبل لاگین است و صفحه را reload میکند یا لینک مستقیم باز میکند، کپی کد را صدا نزنید (نمایش ورود دوباره پخش میشود). بهجای آن نشست را بیصدا مقدار دهید:
import { setTdsSession } from '@tokapps/tuk/dock';const user = await api.me();setTdsSession({ name, avatarUrl, meta: { role } }); // بیصدا؛ آیکون حساب داک مستقیماً آواتار را نشان میدهدsetTdsSession(null); // خروج بیصدا- کپی کد همیشه کپی کد میماند و هیچ انیمیشنی پخش نمیشود.
- با کپی کد و کپی کد همسان است و برای SSR امن است (سرور حالت اولیهٔ بدون کاربر را رندر میکند).
- اگر کپی کد در حال اجراست قطع نمیشود.
- ورود واقعی کاربر همچنان با کپی کد و خروج با نمایش با کپی کد است.
پاپآپ جستجو (اجباری)
کلید جستجوی داکت باید یک کپی کد را باز کند؛ کلید مرده یا نوار جستجوی درونخطی مجاز نیست (کپی کد با کد کپی کد رد میکند).
'use client';import { useState } from 'react';import { CommandMenu, type CommandItem } from '@tokapps/tuk';import { ProductDock, type ProductDockProps } from '@tokapps/tuk/dock';import { identity } from '../theme/identity';import { meta } from '../theme/meta';export function DockSearch({ sections }: Pick<ProductDockProps, 'sections'>) { const [open, setOpen] = useState(false); const [items, setItems] = useState<CommandItem[]>([]); const search = identity.dock.search; const onQuery = async (q: string) => { if (q.length < (search.minChars ?? 2)) return setItems([]); if (search.method === 'command-menu') { const res = await fetch(search.endpoint.replace('{query}', encodeURIComponent(q))); setItems(await res.json()); } // method: 'page' → router.push(search.endpoint.replace('{query}', q)) }; return ( <> <ProductDock policy={meta.dock} clockDefault={meta.dockClock} sections={sections} signInHref="/login" onSearch={() => setOpen(true)} /> <CommandMenu open={open} onOpenChange={setOpen} hotkey="mod+k" placeholder={search.placeholder ?? 'جستجو…'} filter={false} onQueryChange={onQuery} items={items} // نتایج از endpoint میآیند؛ id هر نتیجه همان مسیر مقصد است onSelect={(item) => { setOpen(false); window.location.assign(item.id); }} /> </> );}قرارداد کامل در کپی کد: کپی کد (کپی کد | کپی کد)، کپی کد (با کپی کد)، کپی کد و کپی کد.