--- import type { HTMLAttributes } from "astro/types"; import { Icon } from "astro-icon/components"; interface Props extends HTMLAttributes<"div"> { storageKey?: string; rootSelector?: string; // where to toggle theme, e.g. "html" compact?: boolean; // smaller trigger button darkBgClass?: string[]; // non–pure-black dark background class lightBgClass?: string[]; // light background class rootExtraClass?: string; // always-on root class (optional) showLabel?: boolean; // show text next to icon in trigger } const { storageKey = "wr-theme", rootSelector = "html", compact = false, darkBgClass = ["wr-theme-dark-soft"], lightBgClass = ["wr-theme-light"], rootExtraClass = "", showLabel = false, class: className, ...rest }: Props = Astro.props; const iconBtn = "wr:py-3 wr:px-4 wr:inline-flex wr:items-center wr:gap-x-2 wr:text-sm wr:font-medium wr:rounded-lg wr:border wr:border-gray-200 wr:bg-white wr:text-gray-800 wr:shadow-2xs wr:hover:bg-gray-50 wr:focus:outline-hidden wr:focus:bg-gray-50 wr:disabled:opacity-50 wr:disabled:pointer-events-none wr:dark:bg-neutral-800 wr:dark:border-neutral-700 wr:dark:text-white wr:dark:hover:bg-neutral-700 wr:dark:focus:bg-neutral-700"; const menuBtn = "wr:py-3 wr:px-4 wr:inline-flex wr:items-center wr:gap-x-2 wr:text-sm wr:font-medium wr:rounded-lg wr:border wr:border-gray-200 wr:bg-white wr:text-gray-800 wr:shadow-2xs wr:hover:bg-gray-50 wr:focus:outline-hidden wr:focus:bg-gray-50 wr:disabled:opacity-50 wr:disabled:pointer-events-none wr:dark:bg-neutral-800 wr:dark:border-neutral-700 wr:dark:text-white wr:dark:hover:bg-neutral-700 wr:dark:focus:bg-neutral-700"; const item = "wr:flex wr:items-center wr:gap-3 wr:w-full wr:px-3 wr:py-2.5 wr:rounded-lg wr:text-sm wr:hover:bg-muted/70 wr:transition wr:duration-150"; const icon = "wr:size-4"; const checkBase = "wr:size-4 wr:opacity-0 wr:scale-90 wr:transition"; const containerId = `ts-${Math.random().toString(36).slice(2)}`; ---