import React, { useState } from 'react';
import clsx from 'clsx';
import { BaseProps } from '@digigov/react-core/Base';
import useFontSize, {
FontSizeOptions,
} from '@digigov/ui/app/hooks/useFontSize';
import useHighlightLinks, {
HighlightLinksOptions,
} from '@digigov/ui/app/hooks/useHighlightLinks';
import useLetterSpacing, {
LetterSpacingOptions,
} from '@digigov/ui/app/hooks/useLetterSpacing';
import useLineHeight, {
LineHeightOptions,
} from '@digigov/ui/app/hooks/useLineHeight';
import useTheme, { ThemeSelectOptions } from '@digigov/ui/app/hooks/useTheme';
import Button from '@digigov/ui/form/Button';
import FieldContainer, {
Fieldset,
FieldsetLegend,
} from '@digigov/ui/form/FieldContainer';
import Form from '@digigov/ui/form/Form';
import { RadioContainer, RadioItem } from '@digigov/ui/form/RadioContainer';
import SectionBreak from '@digigov/ui/layouts/SectionBreak';
import { VisuallyHidden } from '@digigov/ui/utils/VisuallyHidden';
export interface ThemeOptionsProps extends BaseProps<'form'> {
colorsOption?: boolean;
fontSizeOption?: boolean;
lineHeightOption?: boolean;
letterSpacingOption?: boolean;
highlightLinksOption?: boolean;
colorsOptionTitleSize?: TitleSize;
fontSizeOptionTitleSize?: TitleSize;
lineHeightOptionTitleSize?: TitleSize;
letterSpacingOptionTitleSize?: TitleSize;
highlightLinksOptionTitleSize?: TitleSize;
}
type TitleSize = 'xl' | 'lg' | 'md' | 'sm' | 'hidden';
const FieldsetLegendTitle = ({ titleSize, titleValue }) => {
return (
<>
{titleSize === 'hidden' ? (
{titleValue}
) : (
{titleValue}
)}
>
);
};
// export const ThemeOptions = () => {
export const ThemeOptions = React.forwardRef<
HTMLFormElement,
ThemeOptionsProps
>(function ThemeOptions(
{
colorsOption = true,
fontSizeOption = true,
lineHeightOption = true,
letterSpacingOption = true,
highlightLinksOption = true,
colorsOptionTitleSize = 'sm',
className,
...props
},
ref
) {
const [theme, changeTheme] = useTheme();
const [selectedTheme, setSelectedTheme] = useState(
theme || 'auto'
);
const [fontSize, changeFontSize] = useFontSize();
const [selectedFontSize, setSelectedFontSize] = useState(
fontSize || 'default'
);
const [lineHeight, changeLineHeight] = useLineHeight();
const [selectedLineHeight, setSelectedLineHeight] =
useState(lineHeight || 'default');
const [letterSpacing, changeLetterSpacing] = useLetterSpacing();
const [selectedLetterSpacing, setSelectedLetterSpacing] =
useState(letterSpacing || 'default');
const [highlightLinks, changeHighlightLinks] = useHighlightLinks();
const [selectedHighlightLinks, setSelectedHighlightLinks] =
useState(highlightLinks || 'default');
function handleOptions() {
changeTheme(selectedTheme);
changeFontSize(selectedFontSize);
changeLineHeight(selectedLineHeight);
changeLetterSpacing(selectedLetterSpacing);
changeHighlightLinks(selectedHighlightLinks);
}
function resetOptions() {
setSelectedTheme('light');
setSelectedFontSize('default');
setSelectedLineHeight('default');
setSelectedLetterSpacing('default');
setSelectedHighlightLinks('default');
}
function optionsHasChanged() {
if (
theme != selectedTheme ||
fontSize != selectedFontSize ||
lineHeight != selectedLineHeight ||
letterSpacing != selectedLetterSpacing ||
highlightLinks != selectedHighlightLinks
) {
return true;
} else {
return false;
}
}
return (
);
});
export default ThemeOptions;