import React, { useEffect, useState } from "react";
import { BiCheck, BiLeftArrowAlt, BiRightArrowAlt, BiX } from "react-icons/bi";
import { formatDate, getDateTags } from "./dengi.js";
import { AnimatePresence, motion, LayoutGroup } from "motion/react";
export function Switch({
checked,
defaultChecked = false,
onChange,
disabled = false,
ariaLabel,
className = "",
size = "md", // "sm" | "md" | "lg"
}) {
const isControlled = checked !== undefined;
const [internalChecked, setInternalChecked] = useState(defaultChecked);
const current = isControlled ? checked : internalChecked;
useEffect(() => {
if (!isControlled) return;
setInternalChecked(checked);
}, [checked, isControlled]);
const sizes = {
sm: { track: "w-9 h-5", thumb: "w-3 h-3", translate: "translate-x-4" },
md: { track: "w-11 h-6", thumb: "w-4 h-4", translate: "translate-x-5" },
lg: { track: "w-14 h-8", thumb: "w-6 h-6", translate: "translate-x-6" },
};
const s = sizes[size] || sizes.md;
const toggle = (next) => {
if (disabled) return;
const newState = typeof next === "boolean" ? next : !current;
if (!isControlled) setInternalChecked(newState);
onChange?.(newState);
};
return (
);
}
export function LoadingSpinner(props) {
return (
);
}
function DatePickerButton({ next = false, date, setDate }) {
return (
{
const d = new Date(date);
d.setDate(d.getDate() + (next ? 1 : -1));
setDate(d);
}}
>
{!next ? : }
);
}
export const DatePicker = React.memo((props) => {
const dateTag = getDateTags(props.date);
return (
{
props.setDate(new Date());
}}
>
{formatDate(props.date)}
{dateTag.length > 0 && (
<>
{dateTag}
>
)}
);
});
export function DengiButton({
onClick,
children,
disabled = false,
className = "",
}) {
return (
{children}
);
}
// BAD IDEA::
//
// export function CoolMouseBg() {
// const x = useSpring(0, { stiffness: 200, damping: 40 });
// const y = useSpring(0, { stiffness: 200, damping: 40 });
// const [visible, setVisible] = useState(false);
// useEffect(() => {
// const move = (e) => {
// if (visible) {
// x.set(e.clientX - 25);
// y.set(e.clientY - 25);
// } else {
// setVisible(true);
// }
// };
// window.addEventListener("mousemove", move);
// return () => {
// window.removeEventListener("mousemove", move);
// };
// }, [visible]);
// return (
//
//
//
// );
// }
export function DengiYesOrNoDialog({
content = {
message: "?",
yesBtn: "da",
noBtn: "net",
bgDissmis: true,
yesIcon: ,
noIcon: ,
noBtnStyle: "",
yesBtnStyle: "",
},
show,
onAnswer,
}) {
return (
<>
{/* Background */}
{show && (
{
if (e.target === e.currentTarget && content.bgDissmis)
onAnswer(false);
}}
>
{content.message}
onAnswer(true)}
>
{content.yesIcon}
{content.yesBtn}
onAnswer(false)}
>
{content.noIcon}
{content.noBtn}
)}
>
);
}