import { useState } from 'react' import { ClearIcon, EditIcon } from 'shared/components/icons.mjs' import { useTranslation } from 'next-i18next' import { formatMm, round } from 'shared/utils.mjs' import { ChoiceButton } from 'shared/components/choice-button.mjs' const EditCount = (props) => (
) export const CountOptionInput = ({ name, config, current, update, t }) => { const { count, max, min } = config if (typeof current === 'undefined') current = count const [value, setValue] = useState(current) const [editCount, setEditCount] = useState(false) const handleChange = (evt) => { const newCurrent = evt.target.value setValue(newCurrent) update.settings(['options', name], newCurrent) } const reset = () => { setValue(count) update.settings(['options', name]) } return (
{editCount ? ( ) : ( <> {min} {current} {max} )}
) } export const ListOptionInput = ({ design, name, config, current, update, t }) => { const { dflt, list, doNotTranslate = false } = config if (typeof current === 'undefined') current = dflt const [value, setValue] = useState(current) const handleChange = (newCurrent) => { if (newCurrent === dflt) reset() else { setValue(newCurrent) update.settings(['options', name], newCurrent) } } const reset = () => { setValue(dflt) update.settings(['options', name]) } return ( <>

{t(`${design}:o.${name}.d`)}

{config.list.map((entry) => ( handleChange(entry)} > {t(`core-settings:${config.choiceTitles[entry]}.d`)} ))} ) } export const BoolOptionInput = ListOptionInput const EditOption = (props) => (
) export const PctOptionInput = ({ name, config, settings, current, update, t, type = 'pct' }) => { const suffix = type === 'deg' ? '°' : '%' const factor = type === 'deg' ? 1 : 100 const { max, min } = config const dflt = config[type] if (typeof current === 'undefined') current = dflt else current = current * factor const [value, setValue] = useState(current) const [editOption, setEditOption] = useState(false) const handleChange = (evt) => { const newCurrent = evt.target.value setValue(newCurrent) update.settings(['options', name], newCurrent / factor) } const reset = () => { setValue(dflt) update.settings(['options', name]) } return (

{t(`${name}.d`)}

{editOption ? ( ) : ( <> {round(min)} {suffix} {round(current)} {suffix} {round(max)} {suffix} )}
{config.toAbs && settings.measurements ? formatMm(config.toAbs(value / 100, settings)) : ' '}
) } export const DegOptionInput = (props) => export const MmOptionInput = () => ( FIXME: Mm options are deprecated. Please report this ) export const ConstantOptionInput = () =>

FIXME: Constant options are not implemented (yet)