کاستومایز
آیکنهای شیشهایGlass Icons
گریدِ آیکنهای شیشهای که رنگِ پشتشون رو خم میکنن؛ برای داکها، گریدِ اپها و لینکهای شبکههای اجتماعی.
وابستگیها
نوع تعامل
با هاور، شیشه با فنر بلند میشه یا میره تو، کارتِ رنگیِ پشتش با نشانگر آروم جابهجا میشه و لبهی شیشه نور میگیره؛ کلیک هم فشار میده. با Tab هم فوکوس میگیره و همون حالتِ هاور رو نشون میده. `prefers-reduced-motion` همهی اینها رو بیدرنگ میکنه.
پراپها
گزینههایی که میتونی به کامپوننت بدی؛ ستارهدارها اجباریاند.
itemsGlassIconsItem[]پیشفرض: []آیکنها. هر آیتم `icon` و `label` و `color` میگیره و اختیاری `href` و `target` و `onClick` و `id` و `className` هم داره. `color` یا اسمِ گرادیانتِ آمادهست (blue، purple، red، indigo، orange، green، teal، pink، graphite، silver) یا هر رنگ/گرادیانتِ CSS.
sizenumberپیشفرض: 82پهنا و بلندیِ هر آیکن بر حسبِ px.
gapnumberپیشفرض: 66فاصلهی آیکنها از هم بر حسبِ px.
columnsnumberپیشفرض: 3چند آیکن در هر ردیف. جا نشه ردیف میشکنه و به ستونهای کمتر میره.
roundnessnumberپیشفرض: 0.6گردیِ گوشه؛ از ۰ مربع تا ۱ دایره.
refractionnumberپیشفرض: 0.8شکستِ نور در لبهی شیشه — چیزی که پشتشه رو محیطِ لبه خم میکنه. فقط توی مرورگرهای کرومی کار میکنه؛ بقیه به blur معمولی میرن.
نصب
۱. این آدرس رو یکبار توی components.json بذار تا shadcn مخزن فارسیفای رو بشناسه.
{
"registries": {
"@farsify": "https://farsify.ir/r/{name}.json"
}
}۲. بعد با دستورِ زیر کامپوننت رو نصب کن.
npx shadcn@latest add @farsify/glass-iconsپیشنیاز: Tailwind CSS v4 و صفحهٔ راستبهچپ dir="rtl".
نمونه
"use client";
import { Cloud, Folder, Github, Heart } from "lucide-react";
import GlassIcons from "@/components/farsify/glass-icons";
/** داکِ اپها — رنگ میتونه اسمِ گرادیانتِ آماده یا هر گرادیانتِ CSS باشه */
export function AppDock() {
return (
<GlassIcons
items={[
{ icon: <Folder size={24} strokeWidth={1.8} />, color: "blue", label: "فایلها" },
{ icon: <Heart size={24} strokeWidth={1.8} />, color: "red", label: "سلامت" },
{ icon: <Cloud size={24} strokeWidth={1.8} />, color: "indigo", label: "آبوهوا" },
]}
size={82}
gap={66}
/>
);
}
// داکِ شبکههای اجتماعی — آیکنها میتونن لینک واقعی هم باشن
<GlassIcons
items={[
{
icon: <Github size={24} strokeWidth={1.8} />,
color: "linear-gradient(135deg, #4a4752, #1d1b22)",
label: "GitHub",
href: "https://github.com",
target: "_blank",
},
]}
size={56}
gap={22}
columns={6}
roundness={1}
plate="circle"
spread={0.12}
/>
// شیشهی کاملِ شفاف — چیزی که پشتِ کامپوننت باشه خم میشه
<GlassIcons
plate="none"
refraction={0.9}
dispersion={0.6}
frost={0.15}
tintOpacity={0.06}
items={items}
/>
// داکِ فشرده با برچسبِ همیشگی
<GlassIcons
size={60}
gap={16}
columns={6}
roundness={0.42}
plate="offset"
spread={0.35}
hover="float"
labels="always"
items={dockItems}
/>نکتهها
- هیچ وابستگیای نداره — فنرها با rAFِ خام و شیدر با WebGL2ِ خام نوشته شده؛ جایی که WebGL2 نباشه خودش به نسخهی DOM برمیگرده.
- شکستِ نورِ واقعی (شیشهی مایع) فقط توی کروم و اِج دیده میشه؛ سافاری و فایرفاکس همون صحنه رو با blur و نقشهی درخشش نشون میدن.
- برای شیشهی کاملِ شفاف، `plate` رو `none` بذار — اونوقت چیزی که پشتِ کامپوننت باشه (عکس، گرادیانت، کارت) خم میشه و معنیدار میشه؛ روی پسزمینهی تخت هیچی دیده نمیشه.
- برای داک، `columns` رو زیاد و `gap` رو کم بذار — پریستِ `dock` توی دمو همین کارو میکنه.
- هندسه (کجشدنِ کارت، جهتِ بیرونزدگی) عمداً آینه نشده؛ توی راستبهچپ فقط متنها فارسی میشن و فیزیکِ حرکت همون میمونه.
مجوز
کد بعد از نصب مالِ خودته؛ هر تغییری خواستی بده و توی پروژهی خودت نگهش دار. برای پروژههای شخصی و تجاری آزاده، حتی اگه کدت بسته باشه. فقط اسم و لینک فارسیفای رو یه جا توی پروژه نگه دار.