برای فعالسازی حالت تاریک در پروژههایی که با Alpine.js توسعه داده میشن، میتوانید از Alpine Store به همراه پلاگین persist استفاده کنید تا حالت تاریک حتی بعد از بارگذاری مجدد صفحه حفظ بشه.
ابتدا مطمئن بشید که پلاگین @alpinejs/persist رو نصب و به پروژه خودتون اضافه کرده باشید.
npm install @alpinejs/persist
سپس کد زیر رو برای ایجاد یک store مخصوص حالت تاریک اضافه کنید:
document.addEventListener("alpine:init", () => {
Alpine.store("darkMode", {
on: Alpine.$persist(false).as("is_dark"),
toggle() {
this.on = !this.on;
},
});
});
در این کد:
یک store به نام darkMode ساخته میشه.
پراپرتی on مشخص میکنه که حالت تاریک فعال است یا نه.
متد toggle() وظیفه تغییر وضعیت روشن/خاموش حالت تاریک را برعهده دارد.
حالت تاریک در localStorage با کلید is_dark ذخیره میشه و بعد از بارگذاری مجدد صفحه حفظ میشه.
برای فعال یا غیرفعال کردن حالت تاریک در کل پروژه، میتوانید تگ html را به صورت زیر تنظیم کنید:
<html
lang="fa"
dir="rtl"
x-bind:class="{ 'dark': $store.darkMode.on }"
x-data
></html>
سپس برای اضافه کردن یک دکمه جهت تغییر وضعیت حالت تاریک میتوانید از کد زیر استفاده کنید:
<button
type="button"
class="inline-flex items-center justify-center sm:size-10 size-8 cursor-pointer transition-transform active:scale-95"
x-on:click="$store.darkMode.toggle()"
>
<!-- icon:sun -->
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
class="size-5 hidden dark:block"
>
<path
fill="none"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M8 12a4 4 0 1 0 8 0a4 4 0 1 0-8 0m-4 0h.01M12 4v.01M20 12h.01M12 20v.01M6.31 6.31L6.3 6.3m11.41.01l-.01-.01m0 11.4l.01.01M6.3 17.7l.01.01"
/>
</svg>
<!-- icon:moon -->
<svg
xmlns="http://www.w3.org/2000/svg"
viewBox="0 0 24 24"
class="size-5 dark:hidden"
>
<path
fill="none"
stroke="currentColor"
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M12 3h.393a7.5 7.5 0 0 0 7.92 12.446A9 9 0 1 1 12 2.992zm5 1a2 2 0 0 0 2 2a2 2 0 0 0-2 2a2 2 0 0 0-2-2a2 2 0 0 0 2-2m2 7h2m-1-1v2"
/>
</svg>
</button>