Move "MultiValueButton" props to component

This commit is contained in:
schroda
2026-06-02 13:39:17 +02:00
parent a016f0574e
commit d8a4227d13
12 changed files with 40 additions and 32 deletions

View File

@@ -48,27 +48,6 @@ export type ValueRotationButtonProps<Value extends string | number> =
| (ValueRotationButtonBaseProps<Value> & PropertiesNever<ValueRotationButtonDefaultableProps<Value>>) | (ValueRotationButtonBaseProps<Value> & PropertiesNever<ValueRotationButtonDefaultableProps<Value>>)
| ValueRotationButtonDefaultableProps<Value>; | ValueRotationButtonDefaultableProps<Value>;
export interface MultiValueButtonBaseProps<Value extends string | number, MultiValue extends Value | Value[] = Value> {
value: MultiValue;
defaultValue?: Value;
values: Value[];
setValue: (value: MultiValue) => void;
valueToDisplayData: ValueToDisplayData<Value>;
}
export interface MultiValueButtonDefaultableProps<
Value extends string | number,
MultiValue extends Value | Value[] = Value,
> extends OptionalProperty<MultiValueButtonBaseProps<Value, MultiValue>, 'value'> {
isDefaultable?: boolean;
onDefault?: () => void;
}
export type MultiValueButtonProps<Value extends string | number, MultiValue extends Value | Value[] = Value> =
| (MultiValueButtonBaseProps<Value, MultiValue> &
PropertiesNever<MultiValueButtonDefaultableProps<Value, MultiValue>>)
| MultiValueButtonDefaultableProps<Value, MultiValue>;
export enum ScrollOffset { export enum ScrollOffset {
BACKWARD, BACKWARD,
FORWARD, FORWARD,

View File

@@ -10,8 +10,29 @@ import Stack from '@mui/material/Stack';
import Button from '@mui/material/Button'; import Button from '@mui/material/Button';
import { useLingui } from '@lingui/react/macro'; import { useLingui } from '@lingui/react/macro';
import { CustomTooltip } from '@/base/components/CustomTooltip.tsx'; import { CustomTooltip } from '@/base/components/CustomTooltip.tsx';
import type { MultiValueButtonProps } from '@/base/Base.types.ts';
import { Superscript } from '@/base/components/texts/Superscript.tsx'; import { Superscript } from '@/base/components/texts/Superscript.tsx';
import type { ValueToDisplayData } from '@/base/Base.types.ts';
export interface MultiValueButtonBaseProps<Value extends string | number, MultiValue extends Value | Value[] = Value> {
value: MultiValue;
defaultValue?: Value;
values: Value[];
setValue: (value: MultiValue) => void;
valueToDisplayData: ValueToDisplayData<Value>;
}
export interface MultiValueButtonDefaultableProps<
Value extends string | number,
MultiValue extends Value | Value[] = Value,
> extends OptionalProperty<MultiValueButtonBaseProps<Value, MultiValue>, 'value'> {
isDefaultable?: boolean;
onDefault?: () => void;
}
export type MultiValueButtonProps<Value extends string | number, MultiValue extends Value | Value[] = Value> =
| (MultiValueButtonBaseProps<Value, MultiValue> &
PropertiesNever<MultiValueButtonDefaultableProps<Value, MultiValue>>)
| MultiValueButtonDefaultableProps<Value, MultiValue>;
export const SelectButton = <Value extends string | number, MultiValue extends Value | Value[] = Value>({ export const SelectButton = <Value extends string | number, MultiValue extends Value | Value[] = Value>({
value, value,

View File

@@ -21,8 +21,8 @@ import {
READER_PAGE_SCALE_MODE_TO_SCALING_ALLOWED, READER_PAGE_SCALE_MODE_TO_SCALING_ALLOWED,
READER_PAGE_SCALE_MODE_VALUES, READER_PAGE_SCALE_MODE_VALUES,
} from '@/features/reader/settings/ReaderSettings.constants.tsx'; } from '@/features/reader/settings/ReaderSettings.constants.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts';
import { CustomIconButton } from '@/base/components/buttons/CustomIconButton.tsx'; import { CustomIconButton } from '@/base/components/buttons/CustomIconButton.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/components/buttons/SelectButton.tsx';
export const ReaderNavBarDesktopPageScale = ({ export const ReaderNavBarDesktopPageScale = ({
pageScaleMode, pageScaleMode,

View File

@@ -13,7 +13,8 @@ import {
READING_DIRECTION_VALUES, READING_DIRECTION_VALUES,
READING_DIRECTION_VALUE_TO_DISPLAY_DATA, READING_DIRECTION_VALUE_TO_DISPLAY_DATA,
} from '@/features/reader/settings/ReaderSettings.constants.tsx'; } from '@/features/reader/settings/ReaderSettings.constants.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts';
import type { MultiValueButtonDefaultableProps } from '@/base/components/buttons/SelectButton.tsx';
export const ReaderNavBarDesktopReadingDirection = ({ export const ReaderNavBarDesktopReadingDirection = ({
readingDirection, readingDirection,

View File

@@ -13,7 +13,8 @@ import {
READING_MODE_VALUE_TO_DISPLAY_DATA, READING_MODE_VALUE_TO_DISPLAY_DATA,
READING_MODE_VALUES, READING_MODE_VALUES,
} from '@/features/reader/settings/ReaderSettings.constants.tsx'; } from '@/features/reader/settings/ReaderSettings.constants.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts';
import type { MultiValueButtonDefaultableProps } from '@/base/components/buttons/SelectButton.tsx';
export const ReaderNavBarDesktopReadingMode = ({ export const ReaderNavBarDesktopReadingMode = ({
readingMode, readingMode,

View File

@@ -12,7 +12,8 @@ import { ReadingMode } from '@/features/reader/Reader.types.ts';
import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx';
import { DEFAULT_READER_SETTINGS, PAGE_GAP } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { DEFAULT_READER_SETTINGS, PAGE_GAP } from '@/features/reader/settings/ReaderSettings.constants.tsx';
import { isContinuousReadingMode } from '@/features/reader/settings/ReaderSettings.utils.tsx'; import { isContinuousReadingMode } from '@/features/reader/settings/ReaderSettings.utils.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts';
import type { MultiValueButtonDefaultableProps } from '@/base/components/buttons/SelectButton.tsx';
export const ReaderSettingPageGap = ({ export const ReaderSettingPageGap = ({
pageGap, pageGap,

View File

@@ -17,7 +17,8 @@ import {
READER_PAGE_SCALE_MODE_VALUES, READER_PAGE_SCALE_MODE_VALUES,
} from '@/features/reader/settings/ReaderSettings.constants.tsx'; } from '@/features/reader/settings/ReaderSettings.constants.tsx';
import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts';
import type { MultiValueButtonDefaultableProps } from '@/base/components/buttons/SelectButton.tsx';
export const ReaderSettingPageScaleMode = ({ export const ReaderSettingPageScaleMode = ({
pageScaleMode, pageScaleMode,

View File

@@ -12,8 +12,9 @@ import { useLingui } from '@lingui/react/macro';
import { msg } from '@lingui/core/macro'; import { msg } from '@lingui/core/macro';
import type { IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts'; import type { IReaderSettingsWithDefaultFlag } from '@/features/reader/Reader.types.ts';
import { ReadingDirection } from '@/features/reader/Reader.types.ts'; import { ReadingDirection } from '@/features/reader/Reader.types.ts';
import type { MultiValueButtonDefaultableProps, ValueToDisplayData } from '@/base/Base.types.ts'; import type { ValueToDisplayData } from '@/base/Base.types.ts';
import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/components/buttons/SelectButton.tsx';
const VALUE_TO_DISPLAY_DATA: ValueToDisplayData<ReadingDirection> = { const VALUE_TO_DISPLAY_DATA: ValueToDisplayData<ReadingDirection> = {
[ReadingDirection.LTR]: { [ReadingDirection.LTR]: {

View File

@@ -13,7 +13,8 @@ import {
READING_MODE_VALUES, READING_MODE_VALUES,
} from '@/features/reader/settings/ReaderSettings.constants.tsx'; } from '@/features/reader/settings/ReaderSettings.constants.tsx';
import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts';
import type { MultiValueButtonDefaultableProps } from '@/base/components/buttons/SelectButton.tsx';
export const ReaderSettingReadingMode = ({ export const ReaderSettingReadingMode = ({
readingMode, readingMode,

View File

@@ -8,7 +8,7 @@
import { useLingui } from '@lingui/react/macro'; import { useLingui } from '@lingui/react/macro';
import { msg } from '@lingui/core/macro'; import { msg } from '@lingui/core/macro';
import type { MultiValueButtonDefaultableProps, ValueToDisplayData } from '@/base/Base.types.ts'; import type { ValueToDisplayData } from '@/base/Base.types.ts';
import type { import type {
IReaderSettings, IReaderSettings,
IReaderSettingsWithDefaultFlag, IReaderSettingsWithDefaultFlag,
@@ -16,6 +16,7 @@ import type {
} from '@/features/reader/Reader.types.ts'; } from '@/features/reader/Reader.types.ts';
import type { TapZoneInvertMode } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; import type { TapZoneInvertMode } from '@/features/reader/tap-zones/TapZoneLayout.types.ts';
import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/components/buttons/SelectButton.tsx';
enum TapZonesInvertOption { enum TapZonesInvertOption {
NONE, NONE,

View File

@@ -9,9 +9,10 @@
import { useLingui } from '@lingui/react/macro'; import { useLingui } from '@lingui/react/macro';
import { msg } from '@lingui/core/macro'; import { msg } from '@lingui/core/macro';
import { TapZoneLayouts } from '@/features/reader/tap-zones/TapZoneLayout.types.ts'; import { TapZoneLayouts } from '@/features/reader/tap-zones/TapZoneLayout.types.ts';
import type { MultiValueButtonDefaultableProps, ValueToDisplayData } from '@/base/Base.types.ts'; import type { ValueToDisplayData } from '@/base/Base.types.ts';
import type { IReaderSettingsWithDefaultFlag, ReadingDirection } from '@/features/reader/Reader.types.ts'; import type { IReaderSettingsWithDefaultFlag, ReadingDirection } from '@/features/reader/Reader.types.ts';
import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx'; import { ButtonSelectInput } from '@/base/components/inputs/ButtonSelectInput.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/components/buttons/SelectButton.tsx';
const VALUE_TO_DISPLAY_DATA: ValueToDisplayData<TapZoneLayouts> = { const VALUE_TO_DISPLAY_DATA: ValueToDisplayData<TapZoneLayouts> = {
[TapZoneLayouts.EDGE]: { [TapZoneLayouts.EDGE]: {

View File

@@ -14,8 +14,8 @@ import type { ReaderService } from '@/features/reader/services/ReaderService.ts'
import { SliderInput } from '@/base/components/inputs/SliderInput.tsx'; import { SliderInput } from '@/base/components/inputs/SliderInput.tsx';
import { DEFAULT_READER_SETTINGS } from '@/features/reader/settings/ReaderSettings.constants.tsx'; import { DEFAULT_READER_SETTINGS } from '@/features/reader/settings/ReaderSettings.constants.tsx';
import { isReaderWidthEditable } from '@/features/reader/settings/ReaderSettings.utils.tsx'; import { isReaderWidthEditable } from '@/features/reader/settings/ReaderSettings.utils.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/Base.types.ts';
import { ResetButton } from '@/base/components/buttons/ResetButton.tsx'; import { ResetButton } from '@/base/components/buttons/ResetButton.tsx';
import type { MultiValueButtonDefaultableProps } from '@/base/components/buttons/SelectButton.tsx';
export const ReaderSettingWidth = ({ export const ReaderSettingWidth = ({
readerWidth, readerWidth,