mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-09-18 09:29:24 +00:00
spread/multipage
This commit is contained in:
parent
8815575124
commit
afc9ca5858
17
frontend/package-lock.json
generated
17
frontend/package-lock.json
generated
@ -18,6 +18,7 @@
|
|||||||
"@embedpdf/plugin-render": "^1.1.1",
|
"@embedpdf/plugin-render": "^1.1.1",
|
||||||
"@embedpdf/plugin-scroll": "^1.1.1",
|
"@embedpdf/plugin-scroll": "^1.1.1",
|
||||||
"@embedpdf/plugin-selection": "^1.1.1",
|
"@embedpdf/plugin-selection": "^1.1.1",
|
||||||
|
"@embedpdf/plugin-spread": "^1.1.1",
|
||||||
"@embedpdf/plugin-tiling": "^1.1.1",
|
"@embedpdf/plugin-tiling": "^1.1.1",
|
||||||
"@embedpdf/plugin-viewport": "^1.1.1",
|
"@embedpdf/plugin-viewport": "^1.1.1",
|
||||||
"@embedpdf/plugin-zoom": "^1.1.1",
|
"@embedpdf/plugin-zoom": "^1.1.1",
|
||||||
@ -745,6 +746,22 @@
|
|||||||
"vue": ">=3.2.0"
|
"vue": ">=3.2.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@embedpdf/plugin-spread": {
|
||||||
|
"version": "1.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@embedpdf/plugin-spread/-/plugin-spread-1.1.1.tgz",
|
||||||
|
"integrity": "sha512-UyzPKx96f96qKqtGKLv0wT26NbCUi2D+pBdk+/CUQFbe7PJfNIIpECPp0bZJAwQ6MwBWnIwCVT1OwK+egqji5A==",
|
||||||
|
"dependencies": {
|
||||||
|
"@embedpdf/models": "1.1.1"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@embedpdf/core": "1.1.1",
|
||||||
|
"@embedpdf/plugin-loader": "1.1.1",
|
||||||
|
"preact": "^10.26.4",
|
||||||
|
"react": ">=16.8.0",
|
||||||
|
"react-dom": ">=16.8.0",
|
||||||
|
"vue": ">=3.2.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@embedpdf/plugin-tiling": {
|
"node_modules/@embedpdf/plugin-tiling": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/@embedpdf/plugin-tiling/-/plugin-tiling-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/@embedpdf/plugin-tiling/-/plugin-tiling-1.1.1.tgz",
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
"@embedpdf/plugin-render": "^1.1.1",
|
"@embedpdf/plugin-render": "^1.1.1",
|
||||||
"@embedpdf/plugin-scroll": "^1.1.1",
|
"@embedpdf/plugin-scroll": "^1.1.1",
|
||||||
"@embedpdf/plugin-selection": "^1.1.1",
|
"@embedpdf/plugin-selection": "^1.1.1",
|
||||||
|
"@embedpdf/plugin-spread": "^1.1.1",
|
||||||
"@embedpdf/plugin-tiling": "^1.1.1",
|
"@embedpdf/plugin-tiling": "^1.1.1",
|
||||||
"@embedpdf/plugin-viewport": "^1.1.1",
|
"@embedpdf/plugin-viewport": "^1.1.1",
|
||||||
"@embedpdf/plugin-zoom": "^1.1.1",
|
"@embedpdf/plugin-zoom": "^1.1.1",
|
||||||
|
@ -132,8 +132,7 @@ const EmbedPdfViewer = ({
|
|||||||
}}
|
}}
|
||||||
dualPage={false}
|
dualPage={false}
|
||||||
onDualPageToggle={() => {
|
onDualPageToggle={() => {
|
||||||
// Placeholder - will implement dual page toggle later
|
(window as any).embedPdfSpread?.toggleSpreadMode();
|
||||||
console.log('Toggle dual page view');
|
|
||||||
}}
|
}}
|
||||||
currentZoom={100}
|
currentZoom={100}
|
||||||
/>
|
/>
|
||||||
|
@ -13,10 +13,12 @@ import { InteractionManagerPluginPackage, PagePointerProvider, GlobalPointerProv
|
|||||||
import { SelectionLayer, SelectionPluginPackage } from '@embedpdf/plugin-selection/react';
|
import { SelectionLayer, SelectionPluginPackage } from '@embedpdf/plugin-selection/react';
|
||||||
import { TilingLayer, TilingPluginPackage } from '@embedpdf/plugin-tiling/react';
|
import { TilingLayer, TilingPluginPackage } from '@embedpdf/plugin-tiling/react';
|
||||||
import { PanPluginPackage } from '@embedpdf/plugin-pan/react';
|
import { PanPluginPackage } from '@embedpdf/plugin-pan/react';
|
||||||
|
import { SpreadPluginPackage, SpreadMode } from '@embedpdf/plugin-spread/react';
|
||||||
import { ZoomControlsExporter } from './ZoomControlsExporter';
|
import { ZoomControlsExporter } from './ZoomControlsExporter';
|
||||||
import { ScrollControlsExporter } from './ScrollControlsExporter';
|
import { ScrollControlsExporter } from './ScrollControlsExporter';
|
||||||
import { SelectionControlsExporter } from './SelectionControlsExporter';
|
import { SelectionControlsExporter } from './SelectionControlsExporter';
|
||||||
import { PanControlsExporter } from './PanControlsExporter';
|
import { PanControlsExporter } from './PanControlsExporter';
|
||||||
|
import { SpreadControlsExporter } from './SpreadControlsExporter';
|
||||||
|
|
||||||
interface LocalEmbedPDFProps {
|
interface LocalEmbedPDFProps {
|
||||||
file?: File | Blob;
|
file?: File | Blob;
|
||||||
@ -88,6 +90,11 @@ export function LocalEmbedPDF({ file, url, colorScheme }: LocalEmbedPDFProps) {
|
|||||||
overlapPx: 5,
|
overlapPx: 5,
|
||||||
extraRings: 1,
|
extraRings: 1,
|
||||||
}),
|
}),
|
||||||
|
|
||||||
|
// Register spread plugin for dual page layout
|
||||||
|
createPluginRegistration(SpreadPluginPackage, {
|
||||||
|
defaultSpreadMode: SpreadMode.None, // Start with single page view
|
||||||
|
}),
|
||||||
];
|
];
|
||||||
}, [pdfUrl]);
|
}, [pdfUrl]);
|
||||||
|
|
||||||
@ -166,6 +173,7 @@ export function LocalEmbedPDF({ file, url, colorScheme }: LocalEmbedPDFProps) {
|
|||||||
<ScrollControlsExporter />
|
<ScrollControlsExporter />
|
||||||
<SelectionControlsExporter />
|
<SelectionControlsExporter />
|
||||||
<PanControlsExporter />
|
<PanControlsExporter />
|
||||||
|
<SpreadControlsExporter />
|
||||||
<GlobalPointerProvider>
|
<GlobalPointerProvider>
|
||||||
<Viewport
|
<Viewport
|
||||||
style={{
|
style={{
|
||||||
|
42
frontend/src/components/viewer/SpreadControlsExporter.tsx
Normal file
42
frontend/src/components/viewer/SpreadControlsExporter.tsx
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import { useEffect } from 'react';
|
||||||
|
import { useSpread, SpreadMode } from '@embedpdf/plugin-spread/react';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Component that runs inside EmbedPDF context and exports spread controls globally
|
||||||
|
*/
|
||||||
|
export function SpreadControlsExporter() {
|
||||||
|
const { provides: spread, spreadMode } = useSpread();
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (spread) {
|
||||||
|
// Export spread controls to global window for toolbar access
|
||||||
|
(window as any).embedPdfSpread = {
|
||||||
|
setSpreadMode: (mode: SpreadMode) => {
|
||||||
|
console.log('EmbedPDF: Setting spread mode to:', mode);
|
||||||
|
spread.setSpreadMode(mode);
|
||||||
|
},
|
||||||
|
getSpreadMode: () => spread.getSpreadMode(),
|
||||||
|
toggleSpreadMode: () => {
|
||||||
|
// Toggle between None and Odd (most common dual-page mode)
|
||||||
|
const newMode = spreadMode === SpreadMode.None ? SpreadMode.Odd : SpreadMode.None;
|
||||||
|
console.log('EmbedPDF: Toggling spread mode from', spreadMode, 'to', newMode);
|
||||||
|
spread.setSpreadMode(newMode);
|
||||||
|
},
|
||||||
|
currentSpreadMode: spreadMode,
|
||||||
|
isDualPage: spreadMode !== SpreadMode.None,
|
||||||
|
SpreadMode: SpreadMode, // Export enum for reference
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log('EmbedPDF spread controls exported to window.embedPdfSpread', {
|
||||||
|
currentSpreadMode: spreadMode,
|
||||||
|
isDualPage: spreadMode !== SpreadMode.None,
|
||||||
|
spreadAPI: spread,
|
||||||
|
availableMethods: Object.keys(spread)
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
console.warn('EmbedPDF spread API not available yet');
|
||||||
|
}
|
||||||
|
}, [spread, spreadMode]);
|
||||||
|
|
||||||
|
return null; // This component doesn't render anything
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user