import React, { HTMLAttributes } from "react";
import styled, { css } from "styled-components";
import { Check } from "@styled-icons/boxicons-regular";
// import { VolumeFull } from "@styled-icons/boxicons-solid";
const Base = styled.label`
gap: 10px;
padding: 4px;
display: flex;
cursor: pointer;
user-select: none;
align-items: center;
border-radius: var(--border-radius);
transition: 0.1s ease background-color;
input {
display: none;
}
&:hover {
background: var(--secondary-background);
.playSound {
visibility: visible;
opacity: 1;
}
.check {
visibility: visible;
opacity: 1;
}
}
&[disabled] {
opacity: 0.8;
cursor: not-allowed;
}
//TODO: When value is checked, allow me to add .hover { .checkmark { border-color: var(--tertiary-foreground);} }
`;
const Content = styled.div`
flex-direction: column;
display: flex;
flex-grow: 1;
gap: 3px;
`;
const TitleContent = styled.div`
display: flex;
align-items: center;
gap: 8px;
color: var(--foreground);
`;
const Title = styled.div`
font-size: 0.9375rem;
font-weight: 600;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
`;
const TitleAction = styled.div`
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
width: 20px;
height: 20px;
visibility: hidden;
opacity: 0;
transition: 0.1s ease-in-out all;
border-radius: var(--border-radius);
&:hover {
background-color: rgba(255, 255, 255, 0.2);
}
&:active {
background-color: rgba(255, 255, 255, 0.15);
}
`;
const Description = styled.div`
font-size: 0.75rem;
font-weight: 500;
color: var(--secondary-foreground);
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
`;
const Checkmark = styled.div>`
display: flex;
align-items: center;
justify-content: center;
width: 24px;
height: 24px;
border: 2px solid var(--tertiary-foreground);
border-radius: var(--border-radius);
background: var(--secondary-background);
flex-shrink: 0;
margin: 4px;
transition: 0.1s ease-in-out all;
.check {
transition: inherit;
color: var(--tertiary-foreground);
visibility: hidden;
opacity: 0;
}
${(props) =>
props.value &&
css`
border-color: var(--accent);
background: var(--accent);
.check {
visibility: visible;
opacity: 1;
color: var(--accent-contrast);
}
`}
`;
export type Props = {
readonly disabled?: boolean;
readonly title?: React.ReactNode;
readonly description?: React.ReactNode;
readonly value: boolean;
readonly onChange: (state: boolean) => void;
} & Omit<
HTMLAttributes,
"value" | "children" | "onChange" | "title"
>;
export function Checkbox({
disabled,
title,
description,
value,
onChange,
...props
}: Props) {
return (
{title && (
{title}
{/*
*/}
)}
{description && {description}}
!disabled && onChange(!value)}
/>
);
}