feat: Add subdirectory hosting support and fix asset path resolution

- Update README with comprehensive subdirectory hosting instructions and BASE_URL configuration guide
- Convert absolute asset paths to relative paths in index.html for proper subdirectory deployment
- Update all worker script imports to use relative paths instead of absolute paths
- Fix favicon and image references to work correctly when hosted in nested directories
- Normalize whitespace and formatting across worker files for consistency
- Update vite.config.ts to properly handle BASE_URL configuration for subdirectory deployments
- Ensure all tool pages and logic files maintain compatibility with subdirectory hosting
- Enable BentoPDF to be deployed at any URL path (e.g., example.com/tools/bentopdf/) without breaking asset loading
This commit is contained in:
abdullahalam123
2025-12-04 23:53:00 +05:30
parent 19425d98f9
commit b279c05281
39 changed files with 206 additions and 181 deletions

View File

@@ -249,9 +249,33 @@ npm run package
# Serve the dist folder # Serve the dist folder
npx serve dist npx serve dist
The website can be accessible at: http://localhost:3000/
``` ```
The website can be accessible at: ```http://localhost:3000/``` **Subdirectory Hosting:**
BentoPDF can also be hosted from a subdirectory (e.g., `example.com/tools/bentopdf/`):
```bash
# Example:
# 1. Build the app with the specific BASE_URL. BASE_URL must have a trailing and leading slash. The BASE_URL can be any url of your choice. Here we are using /tools/bentopdf/ as an example.
BASE_URL=/tools/bentopdf/ npm run build
# 2. Create the nested directory structure inside serve-test (or any folder of your choice for local testing. In case of production, create the nested directory structure inside the root directory)
mkdir -p serve-test/tools/bentopdf
# 3. Copy all files from the 'dist' folder into that nested directory
cp -r dist/* serve-test/tools/bentopdf/
# 4. Serve the 'serve-test' folder
npx serve serve-test
```
The website can be accessible at: ```http://localhost:3000/tools/bentopdf/```
The `npm run package` command creates a `dist-{version}.zip` file that you can use for self-hosting. The `npm run package` command creates a `dist-{version}.zip` file that you can use for self-hosting.

View File

@@ -5,11 +5,11 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BentoPDF - The Privacy First PDF Toolkit</title> <title>BentoPDF - The Privacy First PDF Toolkit</title>
<link rel="icon" type="image/svg+xml" href="/images/favicon.svg" /> <link rel="icon" type="image/svg+xml" href="images/favicon.svg" />
<link rel="icon" type="image/png" href="/images/favicon.png" /> <link rel="icon" type="image/png" href="images/favicon.png" />
<link rel="apple-touch-icon" href="/images/favicon.png" /> <link rel="apple-touch-icon" href="images/favicon.png" />
<link rel="icon" href="/favicon.ico" sizes="any" /> <link rel="icon" href="favicon.ico" sizes="any" />
<link href="/src/css/styles.css" rel="stylesheet" /> <link href="src/css/styles.css" rel="stylesheet" />
</head> </head>
<body class="antialiased"> <body class="antialiased">
@@ -502,7 +502,7 @@
<!-- GDPR Compliance --> <!-- GDPR Compliance -->
<div class="flex flex-col items-center text-center"> <div class="flex flex-col items-center text-center">
<div class="w-20 h-20 md:w-24 md:h-24 rounded-full bg-blue-600 flex items-center justify-center mb-4"> <div class="w-20 h-20 md:w-24 md:h-24 rounded-full bg-blue-600 flex items-center justify-center mb-4">
<img src="/images/gdpr.svg" alt="GDPR compliance" class="w-full h-full" /> <img src="images/gdpr.svg" alt="GDPR compliance" class="w-full h-full" />
</div> </div>
<h3 class="text-lg md:text-xl font-bold text-white mb-3"> <h3 class="text-lg md:text-xl font-bold text-white mb-3">
GDPR compliance GDPR compliance
@@ -515,7 +515,7 @@
<div class="flex flex-col items-center text-center"> <div class="flex flex-col items-center text-center">
<div class="w-20 h-20 md:w-24 md:h-24 rounded-full bg-blue-600 flex items-center justify-center mb-4"> <div class="w-20 h-20 md:w-24 md:h-24 rounded-full bg-blue-600 flex items-center justify-center mb-4">
<img src="/images/ccpa.svg" alt="CCPA compliance" class="w-full h-full" /> <img src="images/ccpa.svg" alt="CCPA compliance" class="w-full h-full" />
</div> </div>
<h3 class="text-lg md:text-xl font-bold text-white mb-3"> <h3 class="text-lg md:text-xl font-bold text-white mb-3">
CCPA compliance CCPA compliance
@@ -528,7 +528,7 @@
<div class="flex flex-col items-center text-center"> <div class="flex flex-col items-center text-center">
<div class="w-20 h-20 md:w-24 md:h-24 rounded-full bg-blue-600 flex items-center justify-center mb-4"> <div class="w-20 h-20 md:w-24 md:h-24 rounded-full bg-blue-600 flex items-center justify-center mb-4">
<img src="/images/hipaa.svg" alt="HIPAA compliance" class="w-full h-full" /> <img src="images/hipaa.svg" alt="HIPAA compliance" class="w-full h-full" />
</div> </div>
<h3 class="text-lg md:text-xl font-bold text-white mb-3"> <h3 class="text-lg md:text-xl font-bold text-white mb-3">
HIPAA compliance HIPAA compliance

View File

@@ -1,4 +1,4 @@
self.importScripts('/coherentpdf.browser.min.js'); self.importScripts('../coherentpdf.browser.min.js');
function parsePageRange(rangeString, totalPages) { function parsePageRange(rangeString, totalPages) {
const pages = new Set(); const pages = new Set();

View File

@@ -1,4 +1,4 @@
self.importScripts('/coherentpdf.browser.min.js'); self.importScripts('../coherentpdf.browser.min.js');
self.onmessage = function (e) { self.onmessage = function (e) {
const { command, files } = e.data; const { command, files } = e.data;

View File

@@ -1,4 +1,4 @@
self.importScripts('/coherentpdf.browser.min.js'); self.importScripts('../coherentpdf.browser.min.js');
function getAttachmentsFromPDFInWorker(fileBuffer, fileName) { function getAttachmentsFromPDFInWorker(fileBuffer, fileName) {
try { try {

View File

@@ -1,4 +1,4 @@
self.importScripts('/coherentpdf.browser.min.js'); self.importScripts('../coherentpdf.browser.min.js');
function extractAttachmentsFromPDFsInWorker(fileBuffers, fileNames) { function extractAttachmentsFromPDFsInWorker(fileBuffers, fileNames) {
try { try {

View File

@@ -1,4 +1,4 @@
self.importScripts('/coherentpdf.browser.min.js'); self.importScripts('../coherentpdf.browser.min.js');
self.onmessage = function (e) { self.onmessage = function (e) {
const { command, files, jobs } = e.data; const { command, files, jobs } = e.data;

View File

@@ -4,38 +4,38 @@ export const categories = [
name: 'Popular Tools', name: 'Popular Tools',
tools: [ tools: [
{ {
href: '/src/pages/pdf-multi-tool.html', href: import.meta.env.BASE_URL + 'src/pages/pdf-multi-tool.html',
name: 'PDF Multi Tool', name: 'PDF Multi Tool',
icon: 'pencil-ruler', icon: 'pencil-ruler',
subtitle: 'Merge, Split, Organize, Delete, Rotate, Add Blank Pages, Extract and Duplicate in an unified interface.', subtitle: 'Merge, Split, Organize, Delete, Rotate, Add Blank Pages, Extract and Duplicate in an unified interface.',
}, },
{ {
href: '/src/pages/merge-pdf.html', href: import.meta.env.BASE_URL + '/src/pages/merge-pdf.html',
name: 'Merge PDF', name: 'Merge PDF',
icon: 'combine', icon: 'combine',
subtitle: 'Combine multiple PDFs into one file. Preserves Bookmarks.', subtitle: 'Combine multiple PDFs into one file. Preserves Bookmarks.',
}, },
{ {
href: '/src/pages/split-pdf.html', href: import.meta.env.BASE_URL + 'src/pages/split-pdf.html',
name: 'Split PDF', name: 'Split PDF',
icon: 'scissors', icon: 'scissors',
subtitle: 'Extract a range of pages into a new PDF.', subtitle: 'Extract a range of pages into a new PDF.',
}, },
{ {
href: '/src/pages/compress-pdf.html', href: import.meta.env.BASE_URL + 'src/pages/compress-pdf.html',
name: 'Compress PDF', name: 'Compress PDF',
icon: 'zap', icon: 'zap',
subtitle: 'Reduce the file size of your PDF.', subtitle: 'Reduce the file size of your PDF.',
}, },
{ {
href: '/src/pages/edit-pdf.html', href: import.meta.env.BASE_URL + 'src/pages/edit-pdf.html',
name: 'PDF Editor', name: 'PDF Editor',
icon: 'pocket-knife', icon: 'pocket-knife',
subtitle: subtitle:
'Annotate, highlight, redact, comment, add shapes/images, search, and view PDFs', 'Annotate, highlight, redact, comment, add shapes/images, search, and view PDFs',
}, },
{ {
href: '/src/pages/jpg-to-pdf.html', href: import.meta.env.BASE_URL + 'src/pages/jpg-to-pdf.html',
name: 'JPG to PDF', name: 'JPG to PDF',
icon: 'image-up', icon: 'image-up',
subtitle: 'Create a PDF from one or more JPG images.', subtitle: 'Create a PDF from one or more JPG images.',
@@ -76,7 +76,7 @@ export const categories = [
name: 'Edit & Annotate', name: 'Edit & Annotate',
tools: [ tools: [
{ {
href: '/src/pages/edit-pdf.html', href: import.meta.env.BASE_URL + 'src/pages/edit-pdf.html',
name: 'PDF Editor', name: 'PDF Editor',
icon: 'pocket-knife', icon: 'pocket-knife',
subtitle: subtitle:
@@ -84,13 +84,13 @@ export const categories = [
}, },
{ {
// id: 'bookmark-pdf', // id: 'bookmark-pdf',
href: '/src/pages/bookmark.html', href: import.meta.env.BASE_URL + 'src/pages/bookmark.html',
name: 'Edit Bookmarks', name: 'Edit Bookmarks',
icon: 'bookmark', icon: 'bookmark',
subtitle: 'Add, edit, import, delete and extract PDF bookmarks.', subtitle: 'Add, edit, import, delete and extract PDF bookmarks.',
}, },
{ {
href: '/src/pages/table-of-contents.html', href: import.meta.env.BASE_URL + 'src/pages/table-of-contents.html',
name: 'Table of Contents', name: 'Table of Contents',
icon: 'list', icon: 'list',
subtitle: 'Generate a table of contents page from PDF bookmarks.', subtitle: 'Generate a table of contents page from PDF bookmarks.',
@@ -138,7 +138,7 @@ export const categories = [
subtitle: 'Draw, type, or upload your signature.', subtitle: 'Draw, type, or upload your signature.',
}, },
{ {
href: '/src/pages/add-stamps.html', href: import.meta.env.BASE_URL + 'src/pages/add-stamps.html',
name: 'Add Stamps', name: 'Add Stamps',
icon: 'stamp', icon: 'stamp',
subtitle: 'Add image stamps to your PDF using the annotation toolbar.', subtitle: 'Add image stamps to your PDF using the annotation toolbar.',
@@ -162,7 +162,7 @@ export const categories = [
subtitle: 'Fill in forms directly in the browser. Also supports XFA forms.', subtitle: 'Fill in forms directly in the browser. Also supports XFA forms.',
}, },
{ {
href: '/src/pages/form-creator.html', href: import.meta.env.BASE_URL + 'src/pages/form-creator.html',
name: 'Create PDF Form', name: 'Create PDF Form',
icon: 'file-input', icon: 'file-input',
subtitle: 'Create fillable PDF forms with drag-and-drop text fields.', subtitle: 'Create fillable PDF forms with drag-and-drop text fields.',
@@ -185,7 +185,7 @@ export const categories = [
subtitle: 'Convert JPG, PNG, WebP, BMP, TIFF, SVG, HEIC to PDF.', subtitle: 'Convert JPG, PNG, WebP, BMP, TIFF, SVG, HEIC to PDF.',
}, },
{ {
href: '/src/pages/jpg-to-pdf.html', href: import.meta.env.BASE_URL + 'src/pages/jpg-to-pdf.html',
name: 'JPG to PDF', name: 'JPG to PDF',
icon: 'image-up', icon: 'image-up',
subtitle: 'Create a PDF from one or more JPG images.', subtitle: 'Create a PDF from one or more JPG images.',
@@ -233,7 +233,7 @@ export const categories = [
subtitle: 'Convert a plain text file into a PDF.', subtitle: 'Convert a plain text file into a PDF.',
}, },
{ {
href: '/src/pages/json-to-pdf.html', href: import.meta.env.BASE_URL + 'src/pages/json-to-pdf.html',
name: 'JSON to PDF', name: 'JSON to PDF',
icon: 'file-code', icon: 'file-code',
subtitle: 'Convert JSON files to PDF format.', subtitle: 'Convert JSON files to PDF format.',
@@ -283,7 +283,7 @@ export const categories = [
subtitle: 'Convert all colors to black and white.', subtitle: 'Convert all colors to black and white.',
}, },
{ {
href: '/src/pages/pdf-to-json.html', href: import.meta.env.BASE_URL + 'src/pages/pdf-to-json.html',
name: 'PDF to JSON', name: 'PDF to JSON',
icon: 'file-code', icon: 'file-code',
subtitle: 'Convert PDF files to JSON format.', subtitle: 'Convert PDF files to JSON format.',
@@ -301,7 +301,7 @@ export const categories = [
subtitle: 'Make a PDF searchable and copyable.', subtitle: 'Make a PDF searchable and copyable.',
}, },
{ {
href: '/src/pages/merge-pdf.html', href: import.meta.env.BASE_URL + 'src/pages/merge-pdf.html',
name: 'Merge PDF', name: 'Merge PDF',
icon: 'combine', icon: 'combine',
subtitle: 'Combine multiple PDFs into one file.', subtitle: 'Combine multiple PDFs into one file.',
@@ -343,7 +343,7 @@ export const categories = [
subtitle: 'View or remove attachments in your PDF.', subtitle: 'View or remove attachments in your PDF.',
}, },
{ {
href: '/src/pages/pdf-multi-tool.html', href: import.meta.env.BASE_URL + 'src/pages/pdf-multi-tool.html',
name: 'PDF Multi Tool', name: 'PDF Multi Tool',
icon: 'pencil-ruler', icon: 'pencil-ruler',
subtitle: 'Full-featured PDF editor with page management.', subtitle: 'Full-featured PDF editor with page management.',
@@ -438,7 +438,7 @@ export const categories = [
name: 'Optimize & Repair', name: 'Optimize & Repair',
tools: [ tools: [
{ {
href: '/src/pages/compress-pdf.html', href: import.meta.env.BASE_URL + 'src/pages/compress-pdf.html',
name: 'Compress PDF', name: 'Compress PDF',
icon: 'zap', icon: 'zap',
subtitle: 'Reduce the file size of your PDF.', subtitle: 'Reduce the file size of your PDF.',
@@ -469,7 +469,7 @@ export const categories = [
'Remove password protection and security restrictions associated with digitally signed PDF files.', 'Remove password protection and security restrictions associated with digitally signed PDF files.',
}, },
{ {
href: '/src/pages/repair-pdf.html', href: import.meta.env.BASE_URL + 'src/pages/repair-pdf.html',
name: 'Repair PDF', name: 'Repair PDF',
icon: 'wrench', icon: 'wrench',
subtitle: 'Recover data from corrupted or damaged PDF files.', subtitle: 'Recover data from corrupted or damaged PDF files.',

View File

@@ -2,7 +2,7 @@ import { showLoader, hideLoader, showAlert } from '../ui';
import { readFileAsArrayBuffer, downloadFile } from '../utils/helpers'; import { readFileAsArrayBuffer, downloadFile } from '../utils/helpers';
import { state } from '../state'; import { state } from '../state';
const worker = new Worker('/workers/add-attachments.worker.js'); const worker = new Worker(import.meta.env.BASE_URL + 'workers/add-attachments.worker.js');
let attachments: File[] = []; let attachments: File[] = [];

View File

@@ -172,7 +172,7 @@ if (saveStampedBtn) {
if (backToToolsBtn) { if (backToToolsBtn) {
backToToolsBtn.addEventListener('click', () => { backToToolsBtn.addEventListener('click', () => {
window.location.href = '/' window.location.href = import.meta.env.BASE_URL
}) })
} }

View File

@@ -13,7 +13,7 @@ const alternateMergeState: AlternateMergeState = {
pdfBytes: {}, pdfBytes: {},
}; };
const alternateMergeWorker = new Worker('/workers/alternate-merge.worker.js'); const alternateMergeWorker = new Worker(import.meta.env.BASE_URL + 'workers/alternate-merge.worker.js');
export async function setupAlternateMergeTool() { export async function setupAlternateMergeTool() {
const optionsDiv = document.getElementById('alternate-merge-options'); const optionsDiv = document.getElementById('alternate-merge-options');

View File

@@ -1957,13 +1957,13 @@ async function extractExistingBookmarks(doc) {
// Back to tools button // Back to tools button
if (backToToolsBtn) { if (backToToolsBtn) {
backToToolsBtn.addEventListener('click', () => { backToToolsBtn.addEventListener('click', () => {
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
} }
if (closeBtn) { if (closeBtn) {
closeBtn.addEventListener('click', () => { closeBtn.addEventListener('click', () => {
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
} }

View File

@@ -229,7 +229,7 @@ document.addEventListener('DOMContentLoaded', () => {
if (backBtn) { if (backBtn) {
backBtn.addEventListener('click', () => { backBtn.addEventListener('click', () => {
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
} }

View File

@@ -2,7 +2,7 @@ import { showLoader, hideLoader, showAlert } from '../ui.js';
import { downloadFile, readFileAsArrayBuffer } from '../utils/helpers.js'; import { downloadFile, readFileAsArrayBuffer } from '../utils/helpers.js';
import { state } from '../state.js'; import { state } from '../state.js';
const worker = new Worker('/workers/edit-attachments.worker.js'); const worker = new Worker(import.meta.env.BASE_URL + 'workers/edit-attachments.worker.js');
let allAttachments: Array<{ index: number; name: string; page: number; data: Uint8Array }> = []; let allAttachments: Array<{ index: number; name: string; page: number; data: Uint8Array }> = [];
let attachmentsToRemove: Set<number> = new Set(); let attachmentsToRemove: Set<number> = new Set();

View File

@@ -45,7 +45,7 @@ function initializePage() {
} }
document.getElementById('back-to-tools')?.addEventListener('click', () => { document.getElementById('back-to-tools')?.addEventListener('click', () => {
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
} }
@@ -114,7 +114,7 @@ async function handleFiles(files: FileList) {
URL.revokeObjectURL(currentPdfUrl); URL.revokeObjectURL(currentPdfUrl);
currentPdfUrl = null; currentPdfUrl = null;
} }
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
} }

View File

@@ -3,7 +3,7 @@ import { state } from '../state.js';
import { showAlert } from '../ui.js'; import { showAlert } from '../ui.js';
import JSZip from 'jszip'; import JSZip from 'jszip';
const worker = new Worker('/workers/extract-attachments.worker.js'); const worker = new Worker(import.meta.env.BASE_URL + 'workers/extract-attachments.worker.js');
interface ExtractAttachmentSuccessResponse { interface ExtractAttachmentSuccessResponse {
status: 'success'; status: 'success';

View File

@@ -1962,7 +1962,7 @@ downloadBtn.addEventListener('click', async () => {
const backToToolsBtns = document.querySelectorAll('[id^="back-to-tools"]') as NodeListOf<HTMLButtonElement> const backToToolsBtns = document.querySelectorAll('[id^="back-to-tools"]') as NodeListOf<HTMLButtonElement>
backToToolsBtns.forEach(btn => { backToToolsBtns.forEach(btn => {
btn.addEventListener('click', () => { btn.addEventListener('click', () => {
window.location.href = '/' window.location.href = import.meta.env.BASE_URL
}) })
}) })

View File

@@ -66,7 +66,7 @@ function initializePage() {
} }
document.getElementById('back-to-tools')?.addEventListener('click', () => { document.getElementById('back-to-tools')?.addEventListener('click', () => {
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
} }

View File

@@ -2,7 +2,7 @@ import JSZip from 'jszip'
import { downloadFile, formatBytes, readFileAsArrayBuffer } from '../utils/helpers'; import { downloadFile, formatBytes, readFileAsArrayBuffer } from '../utils/helpers';
import { initializeGlobalShortcuts } from '../utils/shortcuts-init.js'; import { initializeGlobalShortcuts } from '../utils/shortcuts-init.js';
const worker = new Worker(new URL('/workers/json-to-pdf.worker.js', import.meta.url)); const worker = new Worker(import.meta.env.BASE_URL + 'workers/json-to-pdf.worker.js');
let selectedFiles: File[] = [] let selectedFiles: File[] = []
@@ -148,7 +148,7 @@ worker.onmessage = async (e: MessageEvent) => {
if (backToToolsBtn) { if (backToToolsBtn) {
backToToolsBtn.addEventListener('click', () => { backToToolsBtn.addEventListener('click', () => {
window.location.href = '/' window.location.href = import.meta.env.BASE_URL
}) })
} }

View File

@@ -35,7 +35,7 @@ const mergeState: MergeState = {
mergeSuccess: false, mergeSuccess: false,
}; };
const mergeWorker = new Worker('/workers/merge.worker.js'); const mergeWorker = new Worker(import.meta.env.BASE_URL + 'workers/merge.worker.js');
function initializeFileListSortable() { function initializeFileListSortable() {
const fileList = document.getElementById('file-list'); const fileList = document.getElementById('file-list');
@@ -545,7 +545,7 @@ document.addEventListener('DOMContentLoaded', () => {
if (backBtn) { if (backBtn) {
backBtn.addEventListener('click', () => { backBtn.addEventListener('click', () => {
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
} }

View File

@@ -152,7 +152,7 @@ function initializeTool() {
initializeGlobalShortcuts(); initializeGlobalShortcuts();
document.getElementById('close-tool-btn')?.addEventListener('click', () => { document.getElementById('close-tool-btn')?.addEventListener('click', () => {
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
document.getElementById('upload-pdfs-btn')?.addEventListener('click', () => { document.getElementById('upload-pdfs-btn')?.addEventListener('click', () => {

View File

@@ -2,7 +2,7 @@ import JSZip from 'jszip'
import { downloadFile, formatBytes, readFileAsArrayBuffer } from '../utils/helpers'; import { downloadFile, formatBytes, readFileAsArrayBuffer } from '../utils/helpers';
import { initializeGlobalShortcuts } from '../utils/shortcuts-init.js'; import { initializeGlobalShortcuts } from '../utils/shortcuts-init.js';
const worker = new Worker(new URL('/workers/pdf-to-json.worker.js', import.meta.url)); const worker = new Worker(import.meta.env.BASE_URL + 'workers/pdf-to-json.worker.js');
let selectedFiles: File[] = [] let selectedFiles: File[] = []
@@ -144,7 +144,7 @@ worker.onmessage = async (e: MessageEvent) => {
if (backToToolsBtn) { if (backToToolsBtn) {
backToToolsBtn.addEventListener('click', () => { backToToolsBtn.addEventListener('click', () => {
window.location.href = '/' window.location.href = import.meta.env.BASE_URL
}) })
} }

View File

@@ -15,7 +15,7 @@ document.addEventListener('DOMContentLoaded', () => {
if (backBtn) { if (backBtn) {
backBtn.addEventListener('click', () => { backBtn.addEventListener('click', () => {
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
} }

View File

@@ -33,7 +33,7 @@ document.addEventListener('DOMContentLoaded', () => {
if (backBtn) { if (backBtn) {
backBtn.addEventListener('click', () => { backBtn.addEventListener('click', () => {
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
} }

View File

@@ -2,7 +2,7 @@ import { downloadFile, formatBytes } from "../utils/helpers";
import { initializeGlobalShortcuts } from "../utils/shortcuts-init.js"; import { initializeGlobalShortcuts } from "../utils/shortcuts-init.js";
const worker = new Worker('/workers/table-of-contents.worker.js'); const worker = new Worker(import.meta.env.BASE_URL + 'workers/table-of-contents.worker.js');
let pdfFile: File | null = null; let pdfFile: File | null = null;
@@ -199,7 +199,7 @@ worker.onerror = (error) => {
if (backToToolsBtn) { if (backToToolsBtn) {
backToToolsBtn.addEventListener('click', () => { backToToolsBtn.addEventListener('click', () => {
window.location.href = '/'; window.location.href = import.meta.env.BASE_URL;
}); });
} }

View File

@@ -17,18 +17,18 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="/about.html" class="nav-link">About</a> <a href="/about.html" class="nav-link">About</a>
<a href="/contact.html" class="nav-link">Contact</a> <a href="/contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -53,10 +53,10 @@
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="/about.html" class="mobile-nav-link">About</a> <a href="/about.html" class="mobile-nav-link">About</a>
<a href="/contact.html" class="mobile-nav-link">Contact</a> <a href="/contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -113,7 +113,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -18,18 +18,18 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="./about.html" class="nav-link">About</a> <a href="../../about.html" class="nav-link">About</a>
<a href="./contact.html" class="nav-link">Contact</a> <a href="../../contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -56,10 +56,10 @@
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="./about.html" class="mobile-nav-link">About</a> <a href="../../about.html" class="mobile-nav-link">About</a>
<a href="./contact.html" class="mobile-nav-link">Contact</a> <a href="../../contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -421,7 +421,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -16,17 +16,17 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="./about.html" class="nav-link">About</a> <a href="./about.html" class="nav-link">About</a>
<a href="./contact.html" class="nav-link">Contact</a> <a href="./contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<div class="md:hidden flex items-center"> <div class="md:hidden flex items-center">
@@ -51,10 +51,10 @@
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="./about.html" class="mobile-nav-link">About</a> <a href="./about.html" class="mobile-nav-link">About</a>
<a href="./contact.html" class="mobile-nav-link">Contact</a> <a href="./contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>

View File

@@ -16,17 +16,17 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="./about.html" class="nav-link">About</a> <a href="../../about.html" class="nav-link">About</a>
<a href="./contact.html" class="nav-link">Contact</a> <a href="../../contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<div class="md:hidden flex items-center"> <div class="md:hidden flex items-center">
@@ -51,10 +51,10 @@
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="./about.html" class="mobile-nav-link">About</a> <a href="../../about.html" class="mobile-nav-link">About</a>
<a href="./contact.html" class="mobile-nav-link">Contact</a> <a href="../../contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -121,7 +121,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -17,18 +17,18 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="/about.html" class="nav-link">About</a> <a href="/about.html" class="nav-link">About</a>
<a href="/contact.html" class="nav-link">Contact</a> <a href="/contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -55,10 +55,10 @@
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="/about.html" class="mobile-nav-link">About</a> <a href="/about.html" class="mobile-nav-link">About</a>
<a href="/contact.html" class="mobile-nav-link">Contact</a> <a href="/contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -327,7 +327,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -16,17 +16,17 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="./about.html" class="nav-link">About</a> <a href="../../about.html" class="nav-link">About</a>
<a href="./contact.html" class="nav-link">Contact</a> <a href="../../contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<div class="md:hidden flex items-center"> <div class="md:hidden flex items-center">
@@ -51,10 +51,10 @@
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="./about.html" class="mobile-nav-link">About</a> <a href="../../about.html" class="mobile-nav-link">About</a>
<a href="./contact.html" class="mobile-nav-link">Contact</a> <a href="../../contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -150,7 +150,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -17,18 +17,18 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="/about.html" class="nav-link">About</a> <a href="/about.html" class="nav-link">About</a>
<a href="/contact.html" class="nav-link">Contact</a> <a href="/contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -53,10 +53,10 @@
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="/about.html" class="mobile-nav-link">About</a> <a href="/about.html" class="mobile-nav-link">About</a>
<a href="/contact.html" class="mobile-nav-link">Contact</a> <a href="/contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -113,7 +113,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -16,18 +16,18 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="./about.html" class="nav-link">About</a> <a href="../../about.html" class="nav-link">About</a>
<a href="./contact.html" class="nav-link">Contact</a> <a href="../../contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -54,10 +54,10 @@
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="./about.html" class="mobile-nav-link">About</a> <a href="../../about.html" class="mobile-nav-link">About</a>
<a href="./contact.html" class="mobile-nav-link">Contact</a> <a href="../../contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -170,7 +170,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -46,9 +46,9 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center"> <div class="flex-shrink-0 flex items-center">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
<span class="text-gray-400 ml-3 text-sm sm:text-base">PDF Multi Tool</span> <span class="text-gray-400 ml-3 text-sm sm:text-base">PDF Multi Tool</span>
</div> </div>

View File

@@ -17,18 +17,18 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="/about.html" class="nav-link">About</a> <a href="/about.html" class="nav-link">About</a>
<a href="/contact.html" class="nav-link">Contact</a> <a href="/contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -53,10 +53,10 @@
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="/about.html" class="mobile-nav-link">About</a> <a href="/about.html" class="mobile-nav-link">About</a>
<a href="/contact.html" class="mobile-nav-link">Contact</a> <a href="/contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -107,7 +107,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -14,18 +14,18 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="./about.html" class="nav-link">About</a> <a href="../../about.html" class="nav-link">About</a>
<a href="./contact.html" class="nav-link">Contact</a> <a href="../../contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -52,10 +52,10 @@
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="./about.html" class="mobile-nav-link">About</a> <a href="../../about.html" class="mobile-nav-link">About</a>
<a href="./contact.html" class="mobile-nav-link">Contact</a> <a href="../../contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -132,7 +132,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -16,18 +16,18 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="./about.html" class="nav-link">About</a> <a href="../../about.html" class="nav-link">About</a>
<a href="./contact.html" class="nav-link">Contact</a> <a href="../../contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -56,10 +56,10 @@
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="./about.html" class="mobile-nav-link">About</a> <a href="../../about.html" class="mobile-nav-link">About</a>
<a href="./contact.html" class="mobile-nav-link">Contact</a> <a href="../../contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -243,7 +243,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -17,18 +17,18 @@
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div class="flex justify-between items-center h-16"> <div class="flex justify-between items-center h-16">
<div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo"> <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
<span class="text-white font-bold text-xl ml-2"> <span class="text-white font-bold text-xl ml-2">
<a href="/">BentoPDF</a> <a href="../../index.html">BentoPDF</a>
</span> </span>
</div> </div>
<!-- Desktop Navigation --> <!-- Desktop Navigation -->
<div class="hidden md:flex items-center space-x-8 text-white"> <div class="hidden md:flex items-center space-x-8 text-white">
<a href="/" class="nav-link">Home</a> <a href="../../index.html" class="nav-link">Home</a>
<a href="/about.html" class="nav-link">About</a> <a href="/about.html" class="nav-link">About</a>
<a href="/contact.html" class="nav-link">Contact</a> <a href="/contact.html" class="nav-link">Contact</a>
<a href="/" class="nav-link">All Tools</a> <a href="../../index.html" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -55,10 +55,10 @@
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700"> <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
<div class="px-2 pt-2 pb-3 space-y-1 text-center"> <div class="px-2 pt-2 pb-3 space-y-1 text-center">
<a href="/" class="mobile-nav-link">Home</a> <a href="../../index.html" class="mobile-nav-link">Home</a>
<a href="/about.html" class="mobile-nav-link">About</a> <a href="/about.html" class="mobile-nav-link">About</a>
<a href="/contact.html" class="mobile-nav-link">Contact</a> <a href="/contact.html" class="mobile-nav-link">Contact</a>
<a href="/" class="mobile-nav-link">All Tools</a> <a href="../../index.html" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -179,7 +179,7 @@
<div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left"> <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
<div class="mb-8 md:mb-0"> <div class="mb-8 md:mb-0">
<div class="flex items-center justify-center md:justify-start mb-4"> <div class="flex items-center justify-center md:justify-start mb-4">
<img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" /> <img src="../../images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
<span class="text-xl font-bold text-white">BentoPDF</span> <span class="text-xl font-bold text-white">BentoPDF</span>
</div> </div>
<p class="text-gray-400 text-sm"> <p class="text-gray-400 text-sm">

View File

@@ -4,6 +4,7 @@ import { nodePolyfills } from 'vite-plugin-node-polyfills';
import { resolve } from 'path'; import { resolve } from 'path';
export default defineConfig(({ mode }) => ({ export default defineConfig(({ mode }) => ({
base: process.env.BASE_URL || '/',
plugins: [ plugins: [
tailwindcss(), tailwindcss(),
nodePolyfills({ nodePolyfills({