From 4cfde9e852d1de0e846fc1d33c08004203cba16b Mon Sep 17 00:00:00 2001 From: James Brunton Date: Wed, 10 Sep 2025 16:32:18 +0100 Subject: [PATCH] Add Adjust Page Size tool --- .../public/locales/en-GB/translation.json | 39 ++++++++++++- .../AdjustPageScaleSettings.tsx | 55 ++++++++++++++++++ .../tooltips/useAdjustPageScaleTips.ts | 31 ++++++++++ .../src/data/useTranslatedToolRegistry.tsx | 10 +++- .../useAdjustPageScaleOperation.ts | 30 ++++++++++ .../useAdjustPageScaleParameters.ts | 37 ++++++++++++ frontend/src/tools/AdjustPageScale.tsx | 58 +++++++++++++++++++ 7 files changed, 257 insertions(+), 3 deletions(-) create mode 100644 frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.tsx create mode 100644 frontend/src/components/tooltips/useAdjustPageScaleTips.ts create mode 100644 frontend/src/hooks/tools/adjustPageScale/useAdjustPageScaleOperation.ts create mode 100644 frontend/src/hooks/tools/adjustPageScale/useAdjustPageScaleParameters.ts create mode 100644 frontend/src/tools/AdjustPageScale.tsx diff --git a/frontend/public/locales/en-GB/translation.json b/frontend/public/locales/en-GB/translation.json index ff2ee732c..6ba7c83ba 100644 --- a/frontend/public/locales/en-GB/translation.json +++ b/frontend/public/locales/en-GB/translation.json @@ -1468,7 +1468,6 @@ "submit": "Submit" }, "scalePages": { - "tags": "resize,modify,dimension,adapt", "title": "Adjust page-scale", "header": "Adjust page-scale", "pageSize": "Size of a page of the document.", @@ -1476,6 +1475,44 @@ "scaleFactor": "Zoom level (crop) of a page.", "submit": "Submit" }, + "adjustPageScale": { + "tags": "resize,modify,dimension,adapt", + "title": "Adjust Page Scale", + "header": "Adjust Page Scale", + "scaleFactor": { + "label": "Scale Factor" + }, + "pageSize": { + "label": "Target Page Size", + "keep": "Keep Original Size", + "letter": "Letter", + "legal": "Legal" + }, + "submit": "Adjust Page Scale", + "error": { + "failed": "An error occurred while adjusting the page scale." + }, + "tooltip": { + "header": { + "title": "Page Scale Settings Overview" + }, + "description": { + "title": "Description", + "text": "Adjust the size of PDF content and change the page dimensions." + }, + "scaleFactor": { + "title": "Scale Factor", + "text": "Controls how large or small the content appears on the page. Content is scaled and centred - if scaled content is larger than the page size, it may be cropped.", + "bullet1": "1.0 = Original size", + "bullet2": "0.5 = Half size (50% smaller)", + "bullet3": "2.0 = Double size (200% larger, may crop)" + }, + "pageSize": { + "title": "Target Page Size", + "text": "Sets the dimensions of the output PDF pages. 'Keep Original Size' maintains current dimensions, whilst other options resize to standard paper sizes." + } + } + }, "add-page-numbers": { "tags": "paginate,label,organize,index" }, diff --git a/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.tsx b/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.tsx new file mode 100644 index 000000000..9262bcba4 --- /dev/null +++ b/frontend/src/components/tools/adjustPageScale/AdjustPageScaleSettings.tsx @@ -0,0 +1,55 @@ +import { Stack, NumberInput, Select } from "@mantine/core"; +import { useTranslation } from "react-i18next"; +import { AdjustPageScaleParameters, PageSize } from "../../../hooks/tools/adjustPageScale/useAdjustPageScaleParameters"; + +interface AdjustPageScaleSettingsProps { + parameters: AdjustPageScaleParameters; + onParameterChange: (key: K, value: AdjustPageScaleParameters[K]) => void; + disabled?: boolean; +} + +const AdjustPageScaleSettings = ({ parameters, onParameterChange, disabled = false }: AdjustPageScaleSettingsProps) => { + const { t } = useTranslation(); + + const pageSizeOptions = [ + { value: PageSize.KEEP, label: t('adjustPageScale.pageSize.keep', 'Keep Original Size') }, + { value: PageSize.A0, label: 'A0' }, + { value: PageSize.A1, label: 'A1' }, + { value: PageSize.A2, label: 'A2' }, + { value: PageSize.A3, label: 'A3' }, + { value: PageSize.A4, label: 'A4' }, + { value: PageSize.A5, label: 'A5' }, + { value: PageSize.A6, label: 'A6' }, + { value: PageSize.LETTER, label: t('adjustPageScale.pageSize.letter', 'Letter') }, + { value: PageSize.LEGAL, label: t('adjustPageScale.pageSize.legal', 'Legal') }, + ]; + + return ( + + onParameterChange('scaleFactor', typeof value === 'number' ? value : 1.0)} + min={0.1} + max={10.0} + step={0.1} + decimalScale={2} + disabled={disabled} + /> + +