diff --git a/frontend/src/components/tools/addPageNumbers/AddPageNumbersAppearanceSettings.tsx b/frontend/src/components/tools/addPageNumbers/AddPageNumbersAppearanceSettings.tsx new file mode 100644 index 0000000000..0b7ecb02eb --- /dev/null +++ b/frontend/src/components/tools/addPageNumbers/AddPageNumbersAppearanceSettings.tsx @@ -0,0 +1,77 @@ +/** + * AddPageNumbersAppearanceSettings - Customize Appearance step + */ + +import { Stack, Select, TextInput, NumberInput } from "@mantine/core"; +import { useTranslation } from "react-i18next"; +import { AddPageNumbersParameters } from "./useAddPageNumbersParameters"; +import { Tooltip } from "../../shared/Tooltip"; + +interface AddPageNumbersAppearanceSettingsProps { + parameters: AddPageNumbersParameters; + onParameterChange: (key: K, value: AddPageNumbersParameters[K]) => void; + disabled?: boolean; +} + +const AddPageNumbersAppearanceSettings = ({ + parameters, + onParameterChange, + disabled = false +}: AddPageNumbersAppearanceSettingsProps) => { + const { t } = useTranslation(); + + return ( + + + onParameterChange('fontType', (v as any) || 'Times')} + data={[ + { value: 'Times', label: 'Times Roman' }, + { value: 'Helvetica', label: 'Helvetica' }, + { value: 'Courier', label: 'Courier New' }, + ]} + disabled={disabled} + /> + + + + onParameterChange('customText', e.currentTarget.value)} + placeholder={t('addPageNumbers.customNumberDesc', 'e.g., "Page {n}" or leave blank for just numbers')} + disabled={disabled} + /> + + + ); +}; + +export default AddPageNumbersAppearanceSettings; diff --git a/frontend/src/components/tools/addPageNumbers/AddPageNumbersAutomationSettings.tsx b/frontend/src/components/tools/addPageNumbers/AddPageNumbersAutomationSettings.tsx new file mode 100644 index 0000000000..86888d0e47 --- /dev/null +++ b/frontend/src/components/tools/addPageNumbers/AddPageNumbersAutomationSettings.tsx @@ -0,0 +1,55 @@ +/** + * AddPageNumbersAutomationSettings - Used for automation only + * + * Combines both position and appearance settings into a single view + */ + +import { Stack, Divider, Text } from "@mantine/core"; +import { useTranslation } from "react-i18next"; +import { AddPageNumbersParameters } from "./useAddPageNumbersParameters"; +import AddPageNumbersPositionSettings from "./AddPageNumbersPositionSettings"; +import AddPageNumbersAppearanceSettings from "./AddPageNumbersAppearanceSettings"; + +interface AddPageNumbersAutomationSettingsProps { + parameters: AddPageNumbersParameters; + onParameterChange: (key: K, value: AddPageNumbersParameters[K]) => void; + disabled?: boolean; +} + +const AddPageNumbersAutomationSettings = ({ + parameters, + onParameterChange, + disabled = false +}: AddPageNumbersAutomationSettingsProps) => { + const { t } = useTranslation(); + + return ( + + {/* Position & Pages Section */} + + {t("addPageNumbers.positionAndPages", "Position & Pages")} + + + + + + {/* Appearance Section */} + + {t("addPageNumbers.customize", "Customize Appearance")} + + + + ); +}; + +export default AddPageNumbersAutomationSettings; diff --git a/frontend/src/components/tools/addPageNumbers/AddPageNumbersPositionSettings.tsx b/frontend/src/components/tools/addPageNumbers/AddPageNumbersPositionSettings.tsx new file mode 100644 index 0000000000..be79f4e466 --- /dev/null +++ b/frontend/src/components/tools/addPageNumbers/AddPageNumbersPositionSettings.tsx @@ -0,0 +1,70 @@ +/** + * AddPageNumbersPositionSettings - Position & Pages step + */ + +import { Stack, TextInput, NumberInput, Divider, Text } from "@mantine/core"; +import { useTranslation } from "react-i18next"; +import { AddPageNumbersParameters } from "./useAddPageNumbersParameters"; +import { Tooltip } from "../../shared/Tooltip"; +import PageNumberPreview from "./PageNumberPreview"; + +interface AddPageNumbersPositionSettingsProps { + parameters: AddPageNumbersParameters; + onParameterChange: (key: K, value: AddPageNumbersParameters[K]) => void; + disabled?: boolean; + file?: File | null; + showQuickGrid?: boolean; +} + +const AddPageNumbersPositionSettings = ({ + parameters, + onParameterChange, + disabled = false, + file = null, + showQuickGrid = true +}: AddPageNumbersPositionSettingsProps) => { + const { t } = useTranslation(); + + return ( + + {/* Position Selection */} + + + + + + + {/* Pages & Starting Number Section */} + + {t('addPageNumbers.pagesAndStarting', 'Pages & Starting Number')} + + + onParameterChange('pagesToNumber', e.currentTarget.value)} + placeholder={t('addPageNumbers.numberPagesDesc', 'e.g., 1,3,5-8 or leave blank for all pages')} + disabled={disabled} + /> + + + + onParameterChange('startingNumber', typeof v === 'number' ? v : 1)} + min={1} + disabled={disabled} + /> + + + + ); +}; + +export default AddPageNumbersPositionSettings; diff --git a/frontend/src/data/useTranslatedToolRegistry.tsx b/frontend/src/data/useTranslatedToolRegistry.tsx index 9662a168df..eb5757a8ec 100644 --- a/frontend/src/data/useTranslatedToolRegistry.tsx +++ b/frontend/src/data/useTranslatedToolRegistry.tsx @@ -101,6 +101,7 @@ import SplitAutomationSettings from "../components/tools/split/SplitAutomationSe import AddAttachmentsSettings from "../components/tools/addAttachments/AddAttachmentsSettings"; import RemovePagesSettings from "../components/tools/removePages/RemovePagesSettings"; import RemoveBlanksSettings from "../components/tools/removeBlanks/RemoveBlanksSettings"; +import AddPageNumbersAutomationSettings from "../components/tools/addPageNumbers/AddPageNumbersAutomationSettings"; const showPlaceholderTools = true; // Show all tools; grey out unavailable ones in UI @@ -464,7 +465,7 @@ export function useFlatToolRegistry(): ToolRegistry { description: t("home.addPageNumbers.desc", "Add Page numbers throughout a document in a set location"), categoryId: ToolCategoryId.STANDARD_TOOLS, subcategoryId: SubcategoryId.PAGE_FORMATTING, - automationSettings: null, + automationSettings: AddPageNumbersAutomationSettings, maxFiles: -1, endpoints: ["add-page-numbers"], operationConfig: addPageNumbersOperationConfig, diff --git a/frontend/src/tools/AddPageNumbers.tsx b/frontend/src/tools/AddPageNumbers.tsx index 992556491a..57566750be 100644 --- a/frontend/src/tools/AddPageNumbers.tsx +++ b/frontend/src/tools/AddPageNumbers.tsx @@ -6,10 +6,9 @@ import { BaseToolProps, ToolComponent } from "../types/tool"; import { useEndpointEnabled } from "../hooks/useEndpointConfig"; import { useAddPageNumbersParameters } from "../components/tools/addPageNumbers/useAddPageNumbersParameters"; import { useAddPageNumbersOperation } from "../components/tools/addPageNumbers/useAddPageNumbersOperation"; -import { Select, Stack, TextInput, NumberInput, Divider, Text } from "@mantine/core"; -import { Tooltip } from "../components/shared/Tooltip"; -import PageNumberPreview from "../components/tools/addPageNumbers/PageNumberPreview"; import { useAccordionSteps } from "../hooks/tools/shared/useAccordionSteps"; +import AddPageNumbersPositionSettings from "../components/tools/addPageNumbers/AddPageNumbersPositionSettings"; +import AddPageNumbersAppearanceSettings from "../components/tools/addPageNumbers/AddPageNumbersAppearanceSettings"; const AddPageNumbers = ({ onPreviewFile, onComplete, onError }: BaseToolProps) => { const { t } = useTranslation(); @@ -68,44 +67,13 @@ const AddPageNumbers = ({ onPreviewFile, onComplete, onError }: BaseToolProps) = onCollapsedClick: () => accordion.handleStepToggle(AddPageNumbersStep.POSITION_AND_PAGES), isVisible: hasFiles || hasResults, content: ( - - {/* Position Selection */} - - - - - - - {/* Pages & Starting Number Section */} - - {t('addPageNumbers.pagesAndStarting', 'Pages & Starting Number')} - - - params.updateParameter('pagesToNumber', e.currentTarget.value)} - placeholder={t('addPageNumbers.numberPagesDesc', 'e.g., 1,3,5-8 or leave blank for all pages')} - disabled={endpointLoading} - /> - - - - params.updateParameter('startingNumber', typeof v === 'number' ? v : 1)} - min={1} - disabled={endpointLoading} - /> - - - + ), }); @@ -116,56 +84,11 @@ const AddPageNumbers = ({ onPreviewFile, onComplete, onError }: BaseToolProps) = onCollapsedClick: () => accordion.handleStepToggle(AddPageNumbersStep.CUSTOMIZE), isVisible: hasFiles || hasResults, content: ( - - - params.updateParameter('fontType', (v as any) || 'Times')} - data={[ - { value: 'Times', label: 'Times Roman' }, - { value: 'Helvetica', label: 'Helvetica' }, - { value: 'Courier', label: 'Courier New' }, - ]} - disabled={endpointLoading} - /> - - - - params.updateParameter('customText', e.currentTarget.value)} - placeholder={t('addPageNumbers.customNumberDesc', 'e.g., "Page {n}" or leave blank for just numbers')} - disabled={endpointLoading} - /> - - + ), });