import React from 'react';
import { spacing, color, radius, motion, HeadingVariant, TextVariant } from '@preply/ds-core';
import styled from 'styled-components';
import { getTokenVar as t } from '@preply/ds-web-core';
import { LanguageData, englishData } from './data';
import { Badge, Heading, Text } from '@preply/ds-web-lib';
import { useFontsExplorerState } from './FontsExplorerProvider';
const Container = styled.div`
border: 2px solid ${t(color.border.tertiary)};
border-radius: ${t(radius[8])};
padding: ${t(spacing[16])};
display: flex;
flex-direction: column;
gap: ${t(spacing[16])};
cursor: pointer;
background-color: ${t(color.background.primary)};
transition: background-color ${t(motion.components.interaction)};
&:hover {
background-color: ${t(color.background.secondary)};
}
`;
const Badges = styled.div`
display: flex;
gap: ${t(spacing[4])};
`;
const Variants = styled.div`
display: grid;
grid-template-columns: auto 1fr;
gap: ${t(spacing[8])};
align-items: center;
&[data-transform='uppercase'] *[data-value] {
text-transform: uppercase;
}
&[data-transform='lowercase'] *[data-value] {
text-transform: lowercase;
}
`;
function HeadingRow({
variant,
data,
showWhenCollapsed = false,
}: {
variant: HeadingVariant;
data: LanguageData;
showWhenCollapsed?: boolean;
}) {
const [state] = useFontsExplorerState();
const { code } = data;
const isExpanded = state.expanded.includes(code);
const text = state.text || data.text;
const showEn = code !== 'en' && !state.text;
if (!isExpanded && !showWhenCollapsed) {
return null;
}
if (showEn && isExpanded) {
return (
<>
{variant}
{text}
{variant}
{englishData.text}
>
);
}
return (
<>
{variant}
{text}
>
);
}
function TextRow({
variant,
data,
showWhenCollapsed = false,
}: {
variant: TextVariant;
data: LanguageData;
showWhenCollapsed?: boolean;
}) {
const [state] = useFontsExplorerState();
const { code } = data;
const isExpanded = state.expanded.includes(code);
const text = state.text || data.text;
const showEn = code !== 'en' && !state.text;
if (!isExpanded && !showWhenCollapsed) {
return null;
}
if (showEn && isExpanded) {
return (
<>
{variant}
{text}
{variant}
{englishData.text}
>
);
}
return (
<>
{variant}
{text}
>
);
}
type Props = {
data: LanguageData;
};
export function LanguageCard({ data }: Props) {
const [state, dispatch] = useFontsExplorerState();
const { code, name } = data;
if (!state.visible.includes(code)) {
return null;
}
return (
{
// Prevent the click from being triggered if the user is selecting text
if (window.getSelection()?.type === 'Range') return;
dispatch({ type: 'toggle-expand', lang: code });
}}
>
{name}
{code}
);
}