انتخاب متن و کشیدن
در TDS همهٔ متنها و عناصر صفحه پیشفرض قابل انتخاب، کشیدن و منوی راستکلیک نیستند. فقط فیلدها و ویرایشگرهای متن، و بخشهایی که صریحاً باز شدهاند، این رفتار را دارند. این قانون برای تیترها، پاراگرافها، برچسبها، لیستها، جدولها، تصاویر و پیوندها هم اعمال میشود، نه فقط برای کامپوننتهای TUK.
قانون
- پیشفرض: بسته. هر عنصر صفحه از جمله تیتر، پاراگراف، برچسب، لیست، جدول، کد و پیوند قابل انتخاب، کشیدن و راستکلیک نیست.
- استثنای ذاتی: فیلدها. کپی کد، کپی کد و کپی کد همیشه متن را انتخاب و ویرایش میکنند.
- استثنای ویرایشگر: کپی کد. هر عنصری که قابل ویرایش باشد باز است.
- استثنای صریح: کپی کد. هر بخشی که این صفت را داشته باشد، با همهٔ فرزندانش باز میشود.
- استثنای بوم: کپی کد. فقط کشیدن و منوی راستکلیک آزاد میشود (بخش «بوم تعاملی» پایین).
چه چیزهایی بستهاند و چه چیزهایی باز
| رفتار | پیشفرض | در بخش ویرایشی |
|---|---|---|
| انتخاب متن | بسته | باز |
| کشیدن عنصر و متن انتخابشده | بسته | باز |
| منوی راستکلیک بومی (کپی و جایگذاری) | بسته | باز |
| منوی لمسی iOS (نگهداشتن روی تصویر یا پیوند) | بسته | باز |
| فیلدها (کپی کد، کپی کد، کپی کد) | باز | باز |
| عنصر کپی کد | باز | باز |
| منوی کپی کد کامپوننت TDS | کار میکند | کار میکند |
توکنها
چهار توکن معنایی رفتار را تعیین میکنند. مقدار پیشفرض همهٔ آنها کپی کد است:
| توکن | پیشفرض | در بخش ویرایشی | کنترل میکند |
|---|---|---|---|
| کپی کد | کپی کد | کپی کد | انتخاب متن |
| کپی کد | کپی کد | کپی کد | کشیدن عنصر و متن |
| کپی کد | کپی کد | کپی کد | منوی لمسی iOS |
| کپی کد | کپی کد | کپی کد | منوی راستکلیک بومی |
توکنها در لایهٔ معنایی تعریف شدهاند و فرادادهشان را کپی کد بررسی میکند.
پیکربندی
۱. باز کردن یک بخش یا ویرایشگر
صفت کپی کد را روی ریشهٔ همان بخش بگذارید. همهٔ فرزندان آن متن را انتخاب و کشیده میتوانند و منوی بومی کپی و جایگذاری باز میشود.
<section data-tds-interaction="editable"> <p>این متن را میتوانید انتخاب و کپی کنید.</p></section>برای فیلد متنی نیازی به این صفت نیست؛ کپی کد، کپی کد و کپی کد همیشه باز هستند.
۲. ویرایشگر متن غنی
اگر ویرایشگر شما با کپی کد ساخته شده، نیازی به تنظیم اضافه نیست:
<div contentEditable suppressContentEditableWarning> متن قابل ویرایش</div>۳. تغییر توکن برای یک ناحیه
اگر بخشی از محصول رفتار دیگری لازم دارد، توکن را فقط روی همان ناحیه بازنویسی کنید. بازنویسی روی کپی کد یا کپی کد توصیه نمیشود، چون کل صفحه را باز میکند.
.product-article { --tds-interaction-select: text; --tds-interaction-menu: auto;}۴. نگهبان راستکلیک و کشیدن
CSS نمیتواند منوی راستکلیک را ببندد. این کار را نگهبان JS انجام میدهد. کپی کد آن را خودکار نصب میکند و نیازی به کد اضافه نیست. اگر محصولی بدون Provider است، نگهبان را خودتان نصب کنید:
'use client';import { useEffect, type ReactNode } from 'react';import { installInteractionGuard } from '@tokapps/tuk/provider';export function InteractionGuard({ children }: { children: ReactNode }) { useEffect(() => installInteractionGuard(), []); return <>{children}</>;}بوم تعاملی
ویرایشگرهای بوممحور کشیدن و منوی راستکلیک را خودشان مدیریت میکنند. صفت کپی کد را روی ریشهٔ بوم (نه صفحه) بگذارید یا از کپی کد استفاده کنید که آن را خودکار دارد.
| رفتار | پیشفرض | داخل بوم |
|---|---|---|
| کپی کد و کشیدن بومی | بسته | نگهبان دخالت نمیکند |
| کپی کد بومی | بسته | نگهبان دخالت نمیکند (منوی سفارشی با کپی کد) |
| انتخاب متن | بسته | بسته میماند (متن قابل ویرایش: کپی کد یا کپی کد) |
| منوی لمسی iOS | بسته | بسته میماند |
| کپی کد در هویت | کپی کد | همچنان کپی کد (معافیت محلی است) |
هوکهای ژست (کپی کد) به عنصر خودشان bind میشوند و از نگهبان متأثر نیستند؛ بوم کپی کد دارد، پس پان/زوم لمسی با مصرفکننده است و باید معادل کیبوردی داشته باشد. جزئیات: ARCH.md §۲۲ و CanvasSurface.
سازگاری با دسترسپذیری
- کیبورد تغییری نمیکند. فیلدها و کنترلها همچنان با Tab و کلیدها فعال میشوند.
- کلید منو و Shift+F10 همان رویداد کپی کد را میفرستند؛ روی عناصر بسته همان رفتار راستکلیک را دارند.
- صفحهخوان متن را میخواند. این قانون فقط انتخاب و کشیدن بصری را محدود میکند.
- این حفاظت قطعی نیست. کاربر با ابزار توسعهدهنده یا Reader Mode هنوز به متن میرسد. هدف جلوگیری از کپی و کشیدن تصادفی است، نه قفل کردن محتوا.
چرا پیشفرض بسته است
- جلوگیری از انتخاب و کپی ناخواستهٔ متن رابط هنگام کلیکهای سریع.
- جلوگیری از کشیدهشدن تصادفی تصویر، پیوند و کارت روی دسکتاپ.
- جلوگیری از منوی بومی iOS وقتی کاربر روی تصویر یا پیوند نگه میدارد.
- یک تجربهٔ یکدست بین کامپوننتها و تمها. هیچ تم یا محصولی این قانون را دور نمیزند؛ باز کردن فقط از راه صفت یا توکن عمومی ممکن است.
مرجع فنی
- توکنهای معنایی: کپی کد
- اعمال روی صفحه: کپی کد
- نگهبان JS: کپی کد
- نصب خودکار: کپی کد