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 (
{colorsOption && (
setSelectedTheme('light')} checked={selectedTheme === 'light'} > Φωτεινό θέμα setSelectedTheme('dark')} checked={selectedTheme === 'dark'} > Σκούρο θέμα setSelectedTheme('auto')} checked={selectedTheme === 'auto'} > Επιλογή συστήματος
)} {fontSizeOption && (
Μέγεθος γραμμάτων setSelectedFontSize('default')} checked={selectedFontSize === 'default'} > Κανονικό (προεπιλογή) { setSelectedFontSize('large'); }} checked={selectedFontSize === 'large'} > Μεγαλύτερο
)} {lineHeightOption && (
Ύψος γραμμής κειμένων setSelectedLineHeight('default')} checked={selectedLineHeight === 'default'} > Κανονικό (προεπιλογή) { setSelectedLineHeight('large'); }} checked={selectedLineHeight === 'large'} > Μεγαλύτερο
)} {letterSpacingOption && (
Απόσταση γραμμάτων setSelectedLetterSpacing('default')} checked={selectedLetterSpacing === 'default'} > Κανονική (προεπιλογή) { setSelectedLetterSpacing('extra'); }} checked={selectedLetterSpacing === 'extra'} > Μεγαλύτερη
)} {highlightLinksOption && (
Έντονη εμφάνιση συνδέσμων setSelectedHighlightLinks('default')} checked={selectedHighlightLinks === 'default'} > Όχι (προεπιλογή) { setSelectedHighlightLinks('highlight'); }} checked={selectedHighlightLinks === 'highlight'} > Ναι
)} ); }); export default ThemeOptions;