Update version to 1.6.2 and enhance navigation links across HTML pages

- Updated version number in package-lock.json and relevant HTML files.
- Changed navigation links to point to the root path for consistency.
- Improved code formatting and structure in various JavaScript and HTML files for better readability.
This commit is contained in:
abdullahalam123
2025-11-13 11:26:40 +05:30
parent 18ecaf4228
commit cb53370a26
13 changed files with 784 additions and 1012 deletions

View File

@@ -594,7 +594,7 @@
© 2025 BentoPDF. All rights reserved. © 2025 BentoPDF. All rights reserved.
</p> </p>
<p class="text-gray-500 text-xs mt-2"> <p class="text-gray-500 text-xs mt-2">
Version <span id="app-version">1.5.0</span> Version <span id="app-version">1.6.2</span>
</p> </p>
</div> </div>

4
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "bento-pdf", "name": "bento-pdf",
"version": "1.2.0", "version": "1.6.1",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "bento-pdf", "name": "bento-pdf",
"version": "1.2.0", "version": "1.6.1",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@fontsource/cedarville-cursive": "^5.2.7", "@fontsource/cedarville-cursive": "^5.2.7",

View File

@@ -654,6 +654,9 @@ const fileDisplayArea = document.getElementById(
const backToToolsBtn = document.getElementById( const backToToolsBtn = document.getElementById(
'back-to-tools' 'back-to-tools'
) as HTMLButtonElement; ) as HTMLButtonElement;
const closeBtn = document.getElementById(
'back-btn'
) as HTMLButtonElement;
const canvas = document.getElementById('pdf-canvas'); const canvas = document.getElementById('pdf-canvas');
const ctx = canvas.getContext('2d'); const ctx = canvas.getContext('2d');
const pageIndicator = document.getElementById('page-indicator'); const pageIndicator = document.getElementById('page-indicator');
@@ -2078,7 +2081,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 = '../../index.html#tools-header'; window.location.href = '/';
});
}
if (closeBtn) {
closeBtn.addEventListener('click', () => {
window.location.href = '/';
}); });
} }

View File

@@ -16,8 +16,7 @@ function showStatus(
type: 'success' | 'error' | 'info' = 'info' type: 'success' | 'error' | 'info' = 'info'
) { ) {
statusMessage.textContent = message statusMessage.textContent = message
statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${ statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${type === 'success'
type === 'success'
? 'bg-green-900 text-green-200' ? 'bg-green-900 text-green-200'
: type === 'error' : type === 'error'
? 'bg-red-900 text-red-200' ? 'bg-red-900 text-red-200'
@@ -148,7 +147,7 @@ worker.onmessage = async (e: MessageEvent) => {
if (backToToolsBtn) { if (backToToolsBtn) {
backToToolsBtn.addEventListener('click', () => { backToToolsBtn.addEventListener('click', () => {
window.location.href = '../../index.html#tools-header' window.location.href = '/'
}) })
} }

View File

@@ -29,6 +29,7 @@ let currentPdfDocs: PDFLibDocument[] = [];
let splitMarkers: Set<number> = new Set(); let splitMarkers: Set<number> = new Set();
let isRendering = false; let isRendering = false;
let renderCancelled = false; let renderCancelled = false;
let sortableInstance: Sortable | null = null;
const pageCanvasCache = new Map<string, HTMLCanvasElement>(); const pageCanvasCache = new Map<string, HTMLCanvasElement>();
@@ -114,7 +115,7 @@ function initializeTool() {
createIcons({ icons }); createIcons({ icons });
document.getElementById('close-tool-btn')?.addEventListener('click', () => { document.getElementById('close-tool-btn')?.addEventListener('click', () => {
window.location.href = '../../index.html'; window.location.href = '/';
}); });
document.getElementById('upload-pdfs-btn')?.addEventListener('click', () => { document.getElementById('upload-pdfs-btn')?.addEventListener('click', () => {
@@ -247,6 +248,13 @@ function resetAll() {
pageCanvasCache.clear(); pageCanvasCache.clear();
renderCancelled = false; renderCancelled = false;
isRendering = false; isRendering = false;
// Destroy sortable instance
if (sortableInstance) {
sortableInstance.destroy();
sortableInstance = null;
}
updatePageDisplay(); updatePageDisplay();
document.getElementById('upload-area')?.classList.remove('hidden'); document.getElementById('upload-area')?.classList.remove('hidden');
} }
@@ -492,9 +500,18 @@ function setupSortable() {
const pagesContainer = document.getElementById('pages-container'); const pagesContainer = document.getElementById('pages-container');
if (!pagesContainer) return; if (!pagesContainer) return;
Sortable.create(pagesContainer, { // Destroy existing instance before creating new one
if (sortableInstance) {
sortableInstance.destroy();
}
sortableInstance = Sortable.create(pagesContainer, {
animation: 150, animation: 150,
handle: '.cursor-move', forceFallback: true,
touchStartThreshold: 3,
fallbackTolerance: 3,
delay: 200,
delayOnTouchOnly: true,
onEnd: (evt) => { onEnd: (evt) => {
const oldIndex = evt.oldIndex!; const oldIndex = evt.oldIndex!;
const newIndex = evt.newIndex!; const newIndex = evt.newIndex!;

View File

@@ -16,8 +16,7 @@ function showStatus(
type: 'success' | 'error' | 'info' = 'info' type: 'success' | 'error' | 'info' = 'info'
) { ) {
statusMessage.textContent = message statusMessage.textContent = message
statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${ statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${type === 'success'
type === 'success'
? 'bg-green-900 text-green-200' ? 'bg-green-900 text-green-200'
: type === 'error' : type === 'error'
? 'bg-red-900 text-red-200' ? 'bg-red-900 text-red-200'
@@ -144,7 +143,7 @@ worker.onmessage = async (e: MessageEvent) => {
if (backToToolsBtn) { if (backToToolsBtn) {
backToToolsBtn.addEventListener('click', () => { backToToolsBtn.addEventListener('click', () => {
window.location.href = '../../index.html#tools-header' window.location.href = '/'
}) })
} }

View File

@@ -53,8 +53,7 @@ function showStatus(
type: 'success' | 'error' | 'info' = 'info' type: 'success' | 'error' | 'info' = 'info'
) { ) {
statusMessage.textContent = message; statusMessage.textContent = message;
statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${ statusMessage.className = `mt-4 p-3 rounded-lg text-sm ${type === 'success'
type === 'success'
? 'bg-green-900 text-green-200' ? 'bg-green-900 text-green-200'
: type === 'error' : type === 'error'
? 'bg-red-900 text-red-200' ? 'bg-red-900 text-red-200'
@@ -198,7 +197,7 @@ worker.onerror = (error) => {
if (backToToolsBtn) { if (backToToolsBtn) {
backToToolsBtn.addEventListener('click', () => { backToToolsBtn.addEventListener('click', () => {
window.location.href = '../../index.html#tools-header'; window.location.href = '/';
}); });
} }

View File

@@ -94,7 +94,7 @@ const init = () => {
&copy; 2025 BentoPDF. All rights reserved. &copy; 2025 BentoPDF. All rights reserved.
</p> </p>
<p class="text-gray-500 text-xs mt-2"> <p class="text-gray-500 text-xs mt-2">
Version <span id="app-version-simple">1.6.0</span> Version <span id="app-version-simple">1.6.2</span>
</p> </p>
</div> </div>
`; `;

View File

@@ -1,26 +1,21 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<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>Advanced PDF Bookmark Tool - BentoPDF</title> <title>Advanced PDF Bookmark Tool - BentoPDF</title>
<link rel="icon" type="image/png" href="../../images/favicon.svg" /> <link rel="icon" type="image/png" href="../../images/favicon.svg" />
<link href="../../src/css/styles.css" rel="stylesheet" /> <link href="../../src/css/styles.css" rel="stylesheet" />
<link href="../../src/css/bookmark.css" rel="stylesheet" /> <link href="../../src/css/bookmark.css" rel="stylesheet" />
</head> </head>
<body class="antialiased bg-gray-900">
<body class="antialiased bg-gray-900">
<nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30"> <nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30">
<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 <div class="flex-shrink-0 flex items-center cursor-pointer" id="home-logo">
class="flex-shrink-0 flex items-center cursor-pointer" <img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-8 w-8" />
id="home-logo"
>
<img
src="../../public/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="index.html">BentoPDF</a> <a href="index.html">BentoPDF</a>
</span> </span>
@@ -36,47 +31,19 @@
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
<div class="md:hidden flex items-center"> <div class="md:hidden flex items-center">
<button <button id="mobile-menu-button" type="button"
id="mobile-menu-button"
type="button"
class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500 transition-colors" class="inline-flex items-center justify-center p-2 rounded-md text-gray-400 hover:text-white hover:bg-gray-700 focus:outline-none focus:ring-2 focus:ring-inset focus:ring-indigo-500 transition-colors"
aria-controls="mobile-menu" aria-controls="mobile-menu" aria-expanded="false">
aria-expanded="false"
>
<span class="sr-only">Open main menu</span> <span class="sr-only">Open main menu</span>
<!-- Hamburger Icon --> <!-- Hamburger Icon -->
<svg <svg id="menu-icon" class="block h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"
id="menu-icon" stroke="currentColor" aria-hidden="true">
class="block h-6 w-6" <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 6h16M4 12h16M4 18h16" />
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M4 6h16M4 12h16M4 18h16"
/>
</svg> </svg>
<!-- Close Icon --> <!-- Close Icon -->
<svg <svg id="close-icon" class="hidden h-6 w-6" xmlns="http://www.w3.org/2000/svg" fill="none"
id="close-icon" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
class="hidden h-6 w-6" <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
xmlns="http://www.w3.org/2000/svg"
fill="none"
viewBox="0 0 24 24"
stroke="currentColor"
aria-hidden="true"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M6 18L18 6M6 6l12 12"
/>
</svg> </svg>
</button> </button>
</div> </div>
@@ -84,31 +51,19 @@
</div> </div>
<!-- Mobile Menu Dropdown --> <!-- Mobile Menu Dropdown -->
<div <div id="mobile-menu" class="hidden md:hidden bg-gray-800 border-t border-gray-700">
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="index.html" 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="index.html#tools-header" class="mobile-nav-link" <a href="index.html#tools-header" class="mobile-nav-link">All Tools</a>
>All Tools</a
>
</div> </div>
</div> </div>
</nav> </nav>
<div <div id="uploader" class="min-h-screen flex items-center justify-center p-4 bg-gray-900">
id="uploader" <div class="bg-gray-800 rounded-xl shadow-xl p-8 max-w-md w-full text-gray-200 border border-gray-700">
class="min-h-screen flex items-center justify-center p-4 bg-gray-900" <button id="back-to-tools"
> class="flex items-center gap-2 text-indigo-400 hover:text-indigo-300 mb-6 font-semibold">
<div
class="bg-gray-800 rounded-xl shadow-xl p-8 max-w-md w-full text-gray-200 border border-gray-700"
>
<button
id="back-to-tools"
class="flex items-center gap-2 text-indigo-400 hover:text-indigo-300 mb-6 font-semibold"
>
<i data-lucide="arrow-left" class="cursor-pointer"></i> <i data-lucide="arrow-left" class="cursor-pointer"></i>
<span class="cursor-pointer"> Back to Tools </span> <span class="cursor-pointer"> Back to Tools </span>
</button> </button>
@@ -117,15 +72,10 @@
</p> </p>
<!-- Drop Zone for Main PDF Upload --> <!-- Drop Zone for Main PDF Upload -->
<div <div id="drop-zone"
id="drop-zone" class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300">
class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300"
>
<div class="flex flex-col items-center justify-center pt-5 pb-6"> <div class="flex flex-col items-center justify-center pt-5 pb-6">
<i <i data-lucide="upload-cloud" class="w-10 h-10 mb-3 text-gray-400"></i>
data-lucide="upload-cloud"
class="w-10 h-10 mb-3 text-gray-400"
></i>
<p class="mb-2 text-sm text-gray-300"> <p class="mb-2 text-sm text-gray-300">
<span class="font-semibold">Click to select a file</span> or drag <span class="font-semibold">Click to select a file</span> or drag
and drop and drop
@@ -135,12 +85,8 @@
Your files never leave your device. Your files never leave your device.
</p> </p>
</div> </div>
<input <input type="file" id="file-input" accept=".pdf"
type="file" class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer" />
id="file-input"
accept=".pdf"
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
/>
</div> </div>
<!-- File Display Area --> <!-- File Display Area -->
@@ -149,11 +95,7 @@
<!-- Auto Extract Checkbox --> <!-- Auto Extract Checkbox -->
<div class="mt-4"> <div class="mt-4">
<label class="flex items-center gap-2 text-sm text-gray-300"> <label class="flex items-center gap-2 text-sm text-gray-300">
<input <input type="checkbox" id="auto-extract-checkbox" class="w-4 h-4 accent-blue-500" />
type="checkbox"
id="auto-extract-checkbox"
class="w-4 h-4 accent-blue-500"
/>
<span>Auto-extract existing bookmarks</span> <span>Auto-extract existing bookmarks</span>
</label> </label>
</div> </div>
@@ -166,12 +108,9 @@
<!-- CSV Upload --> <!-- CSV Upload -->
<label class="block mb-4"> <label class="block mb-4">
<span class="text-xs text-gray-500" <span class="text-xs text-gray-500">CSV format: title,page,level</span>
>CSV format: title,page,level</span
>
<div <div
class="relative flex flex-col items-center justify-center w-full h-32 mt-2 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-800 hover:bg-gray-700 transition-colors duration-300" class="relative flex flex-col items-center justify-center w-full h-32 mt-2 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-800 hover:bg-gray-700 transition-colors duration-300">
>
<div class="flex flex-col items-center justify-center pt-4 pb-4"> <div class="flex flex-col items-center justify-center pt-4 pb-4">
<i data-lucide="sheet" class="w-8 h-8 mb-2 text-gray-400"></i> <i data-lucide="sheet" class="w-8 h-8 mb-2 text-gray-400"></i>
<p class="text-xs text-gray-400"> <p class="text-xs text-gray-400">
@@ -179,12 +118,8 @@
here here
</p> </p>
</div> </div>
<input <input type="file" id="csv-input" accept=".csv"
type="file" class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer" />
id="csv-input"
accept=".csv"
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
/>
</div> </div>
</label> </label>
@@ -192,8 +127,7 @@
<label class="block"> <label class="block">
<span class="text-xs text-gray-500">JSON format</span> <span class="text-xs text-gray-500">JSON format</span>
<div <div
class="relative flex flex-col items-center justify-center w-full h-32 mt-2 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-800 hover:bg-gray-700 transition-colors duration-300" class="relative flex flex-col items-center justify-center w-full h-32 mt-2 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-800 hover:bg-gray-700 transition-colors duration-300">
>
<div class="flex flex-col items-center justify-center pt-4 pb-4"> <div class="flex flex-col items-center justify-center pt-4 pb-4">
<i data-lucide="braces" class="w-8 h-8 mb-2 text-gray-400"></i> <i data-lucide="braces" class="w-8 h-8 mb-2 text-gray-400"></i>
<p class="text-xs text-gray-400"> <p class="text-xs text-gray-400">
@@ -201,12 +135,8 @@
drag here drag here
</p> </p>
</div> </div>
<input <input type="file" id="json-input" accept=".json"
type="file" class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer" />
id="json-input"
accept=".json"
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
/>
</div> </div>
</label> </label>
</div> </div>
@@ -214,41 +144,36 @@
</div> </div>
<div id="app" class="hidden bg-gray-900 min-h-screen"> <div id="app" class="hidden bg-gray-900 min-h-screen">
<header <header class="bg-gray-800 border-b border-gray-700 shadow-sm sticky top-0 z-50">
class="bg-gray-800 border-b border-gray-700 shadow-sm sticky top-0 z-50"
>
<div class="max-w-7xl mx-auto px-4 py-3"> <div class="max-w-7xl mx-auto px-4 py-3">
<div class="flex items-center justify-between flex-wrap gap-2"> <div class="flex items-center justify-between flex-wrap gap-2">
<h1 class="text-xl font-bold text-white" id="filename-display"> <h1 class="text-xl font-bold text-white" id="filename-display">
PDF Bookmark Editor PDF Bookmark Editor
</h1> </h1>
<div class="flex gap-2 flex-wrap"> <div class="flex gap-2 flex-wrap">
<button <button id="undo-btn"
id="undo-btn"
class="px-3 py-2 text-sm bg-gray-700 hover:bg-gray-600 text-white rounded disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-1" class="px-3 py-2 text-sm bg-gray-700 hover:bg-gray-600 text-white rounded disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-1"
disabled disabled>
>
<i data-lucide="undo-2" class="w-4 h-4"></i> Undo <i data-lucide="undo-2" class="w-4 h-4"></i> Undo
</button> </button>
<button <button id="redo-btn"
id="redo-btn"
class="px-3 py-2 text-sm bg-gray-700 hover:bg-gray-600 text-white rounded disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-1" class="px-3 py-2 text-sm bg-gray-700 hover:bg-gray-600 text-white rounded disabled:opacity-50 disabled:cursor-not-allowed flex items-center gap-1"
disabled disabled>
>
<i data-lucide="redo-2" class="w-4 h-4"></i> Redo <i data-lucide="redo-2" class="w-4 h-4"></i> Redo
</button> </button>
<button <button id="delete-all-btn"
id="delete-all-btn" class="px-3 py-2 text-sm bg-red-600 hover:bg-red-700 text-white rounded flex items-center gap-1">
class="px-3 py-2 text-sm bg-red-600 hover:bg-red-700 text-white rounded flex items-center gap-1"
>
<i data-lucide="trash-2" class="w-4 h-4"></i> Delete All <i data-lucide="trash-2" class="w-4 h-4"></i> Delete All
</button> </button>
<button <button id="reset-btn"
id="reset-btn" class="px-3 py-2 text-sm bg-orange-600 hover:bg-orange-700 text-white rounded flex items-center gap-1">
class="px-3 py-2 text-sm bg-orange-600 hover:bg-orange-700 text-white rounded flex items-center gap-1"
>
<i data-lucide="rotate-ccw" class="w-4 h-4"></i> Reset <i data-lucide="rotate-ccw" class="w-4 h-4"></i> Reset
</button> </button>
<button id="back-btn"
class="px-3 py-2 text-sm bg-gray-700 hover:bg-gray-600 text-white rounded flex items-center gap-1">
<i data-lucide="arrow-left" class="w-4 h-4"></i> Back to Tools
</button>
</div> </div>
</div> </div>
</div> </div>
@@ -256,16 +181,10 @@
<div class="lg:hidden bg-gray-800 border-b border-gray-700"> <div class="lg:hidden bg-gray-800 border-b border-gray-700">
<div class="flex"> <div class="flex">
<button <button id="show-viewer-btn" class="flex-1 py-3 text-sm font-medium bg-indigo-600 text-white">
id="show-viewer-btn"
class="flex-1 py-3 text-sm font-medium bg-indigo-600 text-white"
>
PDF Viewer PDF Viewer
</button> </button>
<button <button id="show-bookmarks-btn" class="flex-1 py-3 text-sm font-medium text-gray-300 hover:text-white">
id="show-bookmarks-btn"
class="flex-1 py-3 text-sm font-medium text-gray-300 hover:text-white"
>
Bookmarks Bookmarks
</button> </button>
</div> </div>
@@ -275,194 +194,113 @@
<div class="flex flex-col lg:flex-row gap-4"> <div class="flex flex-col lg:flex-row gap-4">
<div id="viewer-section" class="w-full lg:w-[50%] flex-shrink-0"> <div id="viewer-section" class="w-full lg:w-[50%] flex-shrink-0">
<div class="bg-white rounded-lg shadow-lg p-4"> <div class="bg-white rounded-lg shadow-lg p-4">
<div <div class="flex flex-wrap items-center justify-between gap-2 mb-4">
class="flex flex-wrap items-center justify-between gap-2 mb-4"
>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<button <button id="prev-page" class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm">
id="prev-page" <i data-lucide="chevron-left" class="w-5 h-5 text-blue-600"></i>
class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
>
</button> </button>
<span <span id="page-indicator" class="text-sm font-medium text-gray-700 whitespace-nowrap">Page 1 / 1</span>
id="page-indicator" <button id="next-page" class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm">
class="text-sm font-medium text-gray-700 whitespace-nowrap" <i data-lucide="chevron-right" class="w-5 h-5 text-blue-600"></i>
>Page 1 / 1</span
>
<button
id="next-page"
class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
>
</button> </button>
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<span class="text-sm text-gray-600">Go to:</span> <span class="text-sm text-gray-600">Go to:</span>
<input <input type="number" id="goto-page" min="1"
type="number" class="w-16 px-2 py-1 border border-gray-300 rounded text-sm" />
id="goto-page" <button id="goto-btn" class="px-3 py-1 bg-blue-500 hover:bg-blue-600 text-white rounded text-sm">
min="1"
class="w-16 px-2 py-1 border border-gray-300 rounded text-sm"
/>
<button
id="goto-btn"
class="px-3 py-1 bg-blue-500 hover:bg-blue-600 text-white rounded text-sm"
>
Go Go
</button> </button>
</div> </div>
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<button <button id="zoom-out-btn" class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
id="zoom-out-btn" title="Zoom Out">
class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm" <i data-lucide="minus" class="w-5 h-5 text-blue-600"></i>
title="Zoom Out"
>
</button> </button>
<span <span id="zoom-indicator"
id="zoom-indicator" class="text-sm font-medium text-gray-700 whitespace-nowrap min-w-[60px] text-center">100%</span>
class="text-sm font-medium text-gray-700 whitespace-nowrap min-w-[60px] text-center" <button id="zoom-in-btn" class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
>100%</span title="Zoom In">
> <i data-lucide="plus" class="w-5 h-5 text-blue-600"></i>
<button
id="zoom-in-btn"
class="px-3 py-2 bg-gray-100 hover:bg-gray-200 rounded text-sm"
title="Zoom In"
>
+
</button> </button>
<button <button id="zoom-fit-btn" class="px-3 py-1 bg-gray-100 hover:bg-gray-200 rounded text-sm"
id="zoom-fit-btn" title="Fit to Width">
class="px-3 py-1 bg-gray-100 hover:bg-gray-200 rounded text-sm"
title="Fit to Width"
>
Fit Fit
</button> </button>
</div> </div>
</div> </div>
<div <div id="picking-mode-banner" class="hidden mb-4 p-3 bg-blue-100 border-2 border-blue-400 rounded-lg">
id="picking-mode-banner"
class="hidden mb-4 p-3 bg-blue-100 border-2 border-blue-400 rounded-lg"
>
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div class="flex items-center gap-2"> <div class="flex items-center gap-2">
<i <i data-lucide="crosshair" class="w-5 h-5 text-blue-600"></i>
data-lucide="crosshair" <span class="text-sm font-medium text-blue-800">Click on the PDF to set bookmark destination</span>
class="w-5 h-5 text-blue-600"
></i>
<span class="text-sm font-medium text-blue-800"
>Click on the PDF to set bookmark destination</span
>
</div> </div>
<button <button id="cancel-picking-btn"
id="cancel-picking-btn" class="px-3 py-1 bg-red-500 hover:bg-red-600 text-white rounded text-xs">
class="px-3 py-1 bg-red-500 hover:bg-red-600 text-white rounded text-xs"
>
Cancel Cancel
</button> </button>
</div> </div>
</div> </div>
<div <div class="overflow-auto border border-gray-200 rounded" id="canvas-container">
class="overflow-auto border border-gray-200 rounded"
id="canvas-container"
>
<div class="pdf-canvas-wrapper" id="pdf-canvas-wrapper"> <div class="pdf-canvas-wrapper" id="pdf-canvas-wrapper">
<canvas <canvas id="pdf-canvas" class="max-w-full h-auto mx-auto"></canvas>
id="pdf-canvas"
class="max-w-full h-auto mx-auto"
></canvas>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div <div id="bookmarks-section" class="hidden lg:block w-full lg:w-[50%] flex-shrink-0">
id="bookmarks-section"
class="hidden lg:block w-full lg:w-[50%] flex-shrink-0"
>
<div class="bg-white rounded-lg shadow-lg p-4"> <div class="bg-white rounded-lg shadow-lg p-4">
<h3 class="text-lg font-bold text-gray-800 mb-4">Bookmarks</h3> <h3 class="text-lg font-bold text-gray-800 mb-4">Bookmarks</h3>
<div class="mb-4"> <div class="mb-4">
<div class="relative"> <div class="relative">
<i <i data-lucide="search"
data-lucide="search" class="absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400"></i>
class="absolute left-3 top-1/2 transform -translate-y-1/2 w-4 h-4 text-gray-400" <input type="text" id="search-bookmarks" placeholder="Search bookmarks..."
></i> class="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-sm" />
<input
type="text"
id="search-bookmarks"
placeholder="Search bookmarks..."
class="w-full pl-10 pr-3 py-2 border border-gray-300 rounded-lg text-sm"
/>
</div> </div>
</div> </div>
<div class="mb-4 p-3 bg-gray-50 rounded-lg"> <div class="mb-4 p-3 bg-gray-50 rounded-lg">
<input <input type="text" id="bookmark-title" placeholder="Bookmark title..."
type="text" class="w-full px-3 py-2 border border-gray-300 rounded-lg mb-2 text-sm" />
id="bookmark-title" <button id="add-top-level-btn"
placeholder="Bookmark title..." class="w-full px-3 py-2 bg-gradient-to-b from-blue-500 to-blue-600 hover:shadow-xl text-white rounded text-sm font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-blue-400 transition duration-200">
class="w-full px-3 py-2 border border-gray-300 rounded-lg mb-2 text-sm"
/>
<button
id="add-top-level-btn"
class="w-full px-3 py-2 bg-gradient-to-b from-blue-500 to-blue-600 hover:shadow-xl text-white rounded text-sm font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-blue-400 transition duration-200"
>
<i data-lucide="plus" class="w-4 h-4"></i> <i data-lucide="plus" class="w-4 h-4"></i>
<span <span>Add to Page <span id="current-page-display">1</span></span>
>Add to Page <span id="current-page-display">1</span></span
>
</button> </button>
</div> </div>
<div class="mb-4"> <div class="mb-4">
<label <label class="flex items-center gap-2 text-sm font-medium text-gray-700 mb-2">
class="flex items-center gap-2 text-sm font-medium text-gray-700 mb-2" <input type="checkbox" id="batch-mode-checkbox" class="w-4 h-4" />
> <span>Batch Mode (<span id="selected-count">0</span>
<input selected)</span>
type="checkbox"
id="batch-mode-checkbox"
class="w-4 h-4"
/>
<span
>Batch Mode (<span id="selected-count">0</span>
selected)</span
>
</label> </label>
<div <div id="batch-operations" class="hidden p-3 bg-blue-50 rounded-lg border border-blue-200">
id="batch-operations"
class="hidden p-3 bg-blue-50 rounded-lg border border-blue-200"
>
<div class="text-xs font-semibold text-gray-700 mb-2"> <div class="text-xs font-semibold text-gray-700 mb-2">
Batch Operations Batch Operations
</div> </div>
<div class="flex flex-col gap-2"> <div class="flex flex-col gap-2">
<div class="flex gap-2"> <div class="flex gap-2">
<button <button id="select-all-btn"
id="select-all-btn" class="flex-1 px-3 py-2 bg-blue-500 hover:bg-blue-600 text-white rounded text-xs flex items-center justify-center gap-1">
class="flex-1 px-3 py-2 bg-blue-500 hover:bg-blue-600 text-white rounded text-xs flex items-center justify-center gap-1"
>
<i data-lucide="check-square" class="w-3 h-3"></i> <i data-lucide="check-square" class="w-3 h-3"></i>
Select All Select All
</button> </button>
<button <button id="deselect-all-btn"
id="deselect-all-btn" class="flex-1 px-3 py-2 bg-gray-500 hover:bg-gray-600 text-white rounded text-xs flex items-center justify-center gap-1">
class="flex-1 px-3 py-2 bg-gray-500 hover:bg-gray-600 text-white rounded text-xs flex items-center justify-center gap-1"
>
<i data-lucide="square" class="w-3 h-3"></i> Deselect <i data-lucide="square" class="w-3 h-3"></i> Deselect
All All
</button> </button>
</div> </div>
<select <select id="batch-color-select" class="text-xs p-2 border rounded">
id="batch-color-select"
class="text-xs p-2 border rounded"
>
<option value="">Set Color...</option> <option value="">Set Color...</option>
<option value="null">None</option> <option value="null">None</option>
<option value="red">Red</option> <option value="red">Red</option>
@@ -472,10 +310,7 @@
<option value="purple">Purple</option> <option value="purple">Purple</option>
</select> </select>
<select <select id="batch-style-select" class="text-xs p-2 border rounded">
id="batch-style-select"
class="text-xs p-2 border rounded"
>
<option value="">Set Style...</option> <option value="">Set Style...</option>
<option value="null">Normal</option> <option value="null">Normal</option>
<option value="bold">Bold</option> <option value="bold">Bold</option>
@@ -483,10 +318,8 @@
<option value="bold-italic">Bold & Italic</option> <option value="bold-italic">Bold & Italic</option>
</select> </select>
<button <button id="batch-delete-btn"
id="batch-delete-btn" class="px-3 py-2 bg-red-500 hover:bg-red-600 text-white rounded text-xs flex items-center justify-center gap-1">
class="px-3 py-2 bg-red-500 hover:bg-red-600 text-white rounded text-xs flex items-center justify-center gap-1"
>
<i data-lucide="trash-2" class="w-3 h-3"></i> Delete <i data-lucide="trash-2" class="w-3 h-3"></i> Delete
Selected Selected
</button> </button>
@@ -495,47 +328,32 @@
</div> </div>
<div class="flex gap-2 mb-4"> <div class="flex gap-2 mb-4">
<button <button id="expand-all-btn"
id="expand-all-btn" class="flex-1 px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200">
class="flex-1 px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200"
>
<i data-lucide="chevrons-down" class="w-4 h-4"></i> Expand All <i data-lucide="chevrons-down" class="w-4 h-4"></i> Expand All
</button> </button>
<button <button id="collapse-all-btn"
id="collapse-all-btn" class="flex-1 px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200">
class="flex-1 px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200"
>
<i data-lucide="chevrons-up" class="w-4 h-4"></i> Collapse All <i data-lucide="chevrons-up" class="w-4 h-4"></i> Collapse All
</button> </button>
</div> </div>
<div class="grid grid-cols-2 gap-2 mb-4"> <div class="grid grid-cols-2 gap-2 mb-4">
<div class="relative"> <div class="relative">
<button <button id="import-dropdown-btn"
id="import-dropdown-btn" class="w-full px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200">
class="w-full px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200"
>
<i data-lucide="upload" class="w-4 h-4"></i> Import <i data-lucide="upload" class="w-4 h-4"></i> Import
<i data-lucide="chevron-down" class="w-3 h-3"></i> <i data-lucide="chevron-down" class="w-3 h-3"></i>
</button> </button>
<div <div id="import-dropdown"
id="import-dropdown" class="hidden absolute top-full left-0 mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10">
class="hidden absolute top-full left-0 mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10" <button id="import-csv-btn"
> class="w-full px-3 py-2 text-sm text-left flex items-center gap-2 rounded-t-lg bg-gradient-to-b from-gray-50 to-gray-100 hover:shadow-sm hover:from-gray-100 hover:to-gray-200 transition duration-150">
<button <i data-lucide="file-text" class="w-4 h-4 text-gray-600"></i>
id="import-csv-btn"
class="w-full px-3 py-2 text-sm text-left flex items-center gap-2 rounded-t-lg bg-gradient-to-b from-gray-50 to-gray-100 hover:shadow-sm hover:from-gray-100 hover:to-gray-200 transition duration-150"
>
<i
data-lucide="file-text"
class="w-4 h-4 text-gray-600"
></i>
Import CSV Import CSV
</button> </button>
<button <button id="import-json-btn"
id="import-json-btn" class="w-full px-3 py-2 text-sm text-left flex items-center gap-2 rounded-b-lg bg-gradient-to-b from-gray-50 to-gray-100 hover:shadow-sm hover:from-gray-100 hover:to-gray-200 transition duration-150">
class="w-full px-3 py-2 text-sm text-left flex items-center gap-2 rounded-b-lg bg-gradient-to-b from-gray-50 to-gray-100 hover:shadow-sm hover:from-gray-100 hover:to-gray-200 transition duration-150"
>
<i data-lucide="braces" class="w-4 h-4 text-gray-600"></i> <i data-lucide="braces" class="w-4 h-4 text-gray-600"></i>
Import JSON Import JSON
</button> </button>
@@ -543,56 +361,39 @@
</div> </div>
<div class="relative"> <div class="relative">
<button <button id="export-dropdown-btn"
id="export-dropdown-btn" class="w-full px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200">
class="w-full px-3 py-2 bg-gradient-to-b from-gray-100 to-gray-200 hover:shadow-md text-gray-700 rounded text-sm font-medium flex items-center justify-center gap-1 focus:ring-2 focus:ring-gray-300 transition duration-200"
>
<i data-lucide="download" class="w-4 h-4"></i> Export <i data-lucide="download" class="w-4 h-4"></i> Export
<i data-lucide="chevron-down" class="w-3 h-3"></i> <i data-lucide="chevron-down" class="w-3 h-3"></i>
</button> </button>
<div <div id="export-dropdown"
id="export-dropdown" class="hidden absolute top-full left-0 mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10">
class="hidden absolute top-full left-0 mt-1 w-full bg-white border border-gray-200 rounded-lg shadow-lg z-10" <button id="export-csv-btn"
> class="w-full px-3 py-2 text-sm text-left hover:bg-gray-50 flex items-center gap-2 rounded-t-lg">
<button
id="export-csv-btn"
class="w-full px-3 py-2 text-sm text-left hover:bg-gray-50 flex items-center gap-2 rounded-t-lg"
>
<i data-lucide="file-text" class="w-4 h-4"></i> Export CSV <i data-lucide="file-text" class="w-4 h-4"></i> Export CSV
</button> </button>
<button <button id="export-json-btn"
id="export-json-btn" class="w-full px-3 py-2 text-sm text-left hover:bg-gray-50 flex items-center gap-2 rounded-b-lg">
class="w-full px-3 py-2 text-sm text-left hover:bg-gray-50 flex items-center gap-2 rounded-b-lg"
>
<i data-lucide="braces" class="w-4 h-4"></i> Export JSON <i data-lucide="braces" class="w-4 h-4"></i> Export JSON
</button> </button>
</div> </div>
</div> </div>
</div> </div>
<div <div class="mb-4 max-h-96 overflow-y-auto border border-gray-200 rounded-lg p-2">
class="mb-4 max-h-96 overflow-y-auto border border-gray-200 rounded-lg p-2"
>
<ul id="bookmark-tree-list" class="space-y-2"></ul> <ul id="bookmark-tree-list" class="space-y-2"></ul>
<div <div id="no-bookmarks" class="text-center py-8 text-gray-400 text-sm">
id="no-bookmarks"
class="text-center py-8 text-gray-400 text-sm"
>
No bookmarks yet. Add one above! No bookmarks yet. Add one above!
</div> </div>
</div> </div>
<div class="space-y-2"> <div class="space-y-2">
<button <button id="download-btn"
id="download-btn" class="w-full px-4 py-2 bg-gradient-to-b from-blue-600 to-blue-700 hover:shadow-xl text-white rounded font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-blue-400 transition duration-200">
class="w-full px-4 py-2 bg-gradient-to-b from-blue-600 to-blue-700 hover:shadow-xl text-white rounded font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-blue-400 transition duration-200"
>
Save PDF with Bookmarks Save PDF with Bookmarks
</button> </button>
<button <button id="extract-existing-btn"
id="extract-existing-btn" class="w-full px-4 py-2 bg-gradient-to-b from-green-500 to-green-600 hover:shadow-xl text-white rounded font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-green-400 transition duration-200">
class="w-full px-4 py-2 bg-gradient-to-b from-green-500 to-green-600 hover:shadow-xl text-white rounded font-medium flex items-center justify-center gap-2 focus:ring-2 focus:ring-green-400 transition duration-200"
>
Extract Existing Bookmarks Extract Existing Bookmarks
</button> </button>
</div> </div>
@@ -609,16 +410,10 @@
<footer class="mt-16 border-t-2 border-gray-700 py-8 bg-[#111827]"> <footer class="mt-16 border-t-2 border-gray-700 py-8 bg-[#111827]">
<div class="container mx-auto px-4"> <div class="container mx-auto px-4">
<div <div class="grid grid-cols-1 md:grid-cols-4 gap-8 text-center md:text-left">
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 <img src="../../public/images/favicon.svg" alt="Bento PDF Logo" class="h-10 w-10 mr-3" />
src="../../public/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">
@@ -630,17 +425,13 @@
<h3 class="font-bold text-white mb-4">Company</h3> <h3 class="font-bold text-white mb-4">Company</h3>
<ul class="space-y-2 text-gray-400"> <ul class="space-y-2 text-gray-400">
<li> <li>
<a href="./about.html" class="hover:text-indigo-400" <a href="./about.html" class="hover:text-indigo-400">About Us</a>
>About Us</a
>
</li> </li>
<li> <li>
<a href="./faq.html" class="hover:text-indigo-400">FAQ</a> <a href="./faq.html" class="hover:text-indigo-400">FAQ</a>
</li> </li>
<li> <li>
<a href="./contact.html" class="hover:text-indigo-400" <a href="./contact.html" class="hover:text-indigo-400">Contact Us</a>
>Contact Us</a
>
</li> </li>
</ul> </ul>
</div> </div>
@@ -649,14 +440,10 @@
<h3 class="font-bold text-white mb-4">Legal</h3> <h3 class="font-bold text-white mb-4">Legal</h3>
<ul class="space-y-2 text-gray-400"> <ul class="space-y-2 text-gray-400">
<li> <li>
<a href="./terms.html" class="hover:text-indigo-400" <a href="./terms.html" class="hover:text-indigo-400">Terms and Conditions</a>
>Terms and Conditions</a
>
</li> </li>
<li> <li>
<a href="./privacy.html" class="hover:text-indigo-400" <a href="./privacy.html" class="hover:text-indigo-400">Privacy Policy</a>
>Privacy Policy</a
>
</li> </li>
</ul> </ul>
</div> </div>
@@ -664,72 +451,33 @@
<div> <div>
<h3 class="font-bold text-white mb-4">Follow Us</h3> <h3 class="font-bold text-white mb-4">Follow Us</h3>
<div class="flex justify-center md:justify-start space-x-4"> <div class="flex justify-center md:justify-start space-x-4">
<a <a href="https://github.com/alam00000/bentopdf" target="_blank" rel="noopener noreferrer"
href="https://github.com/alam00000/bentopdf" class="text-gray-400 hover:text-indigo-400" title="GitHub">
target="_blank" <svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
rel="noopener noreferrer" <path fill-rule="evenodd"
class="text-gray-400 hover:text-indigo-400"
title="GitHub"
>
<svg
class="w-6 h-6"
fill="currentColor"
viewBox="0 0 24 24"
aria-hidden="true"
>
<path
fill-rule="evenodd"
d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z" d="M12 2C6.477 2 2 6.484 2 12.017c0 4.425 2.865 8.18 6.839 9.504.5.092.682-.217.682-.483 0-.237-.008-.868-.013-1.703-2.782.605-3.369-1.343-3.369-1.343-.454-1.158-1.11-1.466-1.11-1.466-.908-.62.069-.608.069-.608 1.003.07 1.531 1.032 1.531 1.032.892 1.53 2.341 1.088 2.91.832.092-.647.35-1.088.636-1.338-2.22-.253-4.555-1.113-4.555-4.951 0-1.093.39-1.988 1.029-2.688-.103-.253-.446-1.272.098-2.65 0 0 .84-.27 2.75 1.026A9.564 9.564 0 0112 6.844c.85.004 1.705.115 2.504.337 1.909-1.296 2.747-1.027 2.747-1.027.546 1.379.202 2.398.1 2.651.64.7 1.028 1.595 1.028 2.688 0 3.848-2.339 4.695-4.566 4.943.359.309.678.92.678 1.855 0 1.338-.012 2.419-.012 2.747 0 .268.18.58.688.482A10.019 10.019 0 0022 12.017C22 6.484 17.522 2 12 2z"
clip-rule="evenodd" clip-rule="evenodd" />
/>
</svg> </svg>
</a> </a>
<a <a href="https://discord.gg/q42xWQmJ" target="_blank" rel="noopener noreferrer"
href="https://discord.gg/q42xWQmJ" class="text-gray-400 hover:text-indigo-400" title="Discord">
target="_blank" <svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
rel="noopener noreferrer"
class="text-gray-400 hover:text-indigo-400"
title="Discord"
>
<svg
class="w-6 h-6"
fill="currentColor"
viewBox="0 0 24 24"
aria-hidden="true"
>
<path <path
d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z" d="M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z" />
/>
</svg> </svg>
</a> </a>
<a <a href="https://www.instagram.com/thebentopdf/" class="text-gray-400 hover:text-indigo-400"
href="https://www.instagram.com/thebentopdf/" title="Instagram">
class="text-gray-400 hover:text-indigo-400"
title="Instagram"
>
<i data-lucide="instagram"></i> <i data-lucide="instagram"></i>
</a> </a>
<a <a href="https://www.linkedin.com/company/bentopdf/" class="text-gray-400 hover:text-indigo-400"
href="https://www.linkedin.com/company/bentopdf/" title="LinkedIn">
class="text-gray-400 hover:text-indigo-400"
title="LinkedIn"
>
<i data-lucide="linkedin"></i> <i data-lucide="linkedin"></i>
</a> </a>
<a <a href="https://x.com/BentoPDF" class="text-gray-400 hover:text-indigo-400" title="X (Twitter)">
href="https://x.com/BentoPDF" <svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
class="text-gray-400 hover:text-indigo-400"
title="X (Twitter)"
>
<svg
class="w-6 h-6"
fill="currentColor"
viewBox="0 0 24 24"
aria-hidden="true"
>
<path <path
d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z" />
/>
</svg> </svg>
</a> </a>
</div> </div>
@@ -740,5 +488,6 @@
<script type="module" src="../js/utils/lucide-init.ts"></script> <script type="module" src="../js/utils/lucide-init.ts"></script>
<script type="module" src="../js/logic/bookmark-pdf.ts"></script> <script type="module" src="../js/logic/bookmark-pdf.ts"></script>
<script type="module" src="../js/mobileMenu.ts"></script> <script type="module" src="../js/mobileMenu.ts"></script>
</body> </body>
</html> </html>

View File

@@ -1,29 +1,31 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<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>JSON to PDF Converter - BentoPDF</title> <title>JSON to PDF Converter - BentoPDF</title>
<link rel="icon" type="image/png" href="../../images/favicon.svg" /> <link rel="icon" type="image/png" href="../../images/favicon.svg" />
<link href="../../src/css/styles.css" rel="stylesheet" /> <link href="../../src/css/styles.css" rel="stylesheet" />
</head> </head>
<body class="antialiased bg-gray-900">
<body class="antialiased bg-gray-900">
<nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30"> <nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30">
<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="../../public/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="../../index.html">BentoPDF</a> <a href="/">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="../../index.html" class="nav-link">Home</a> <a href="/" 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="../../index.html#tools-header" class="nav-link">All Tools</a> <a href="/" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -48,10 +50,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="../../index.html" class="mobile-nav-link">Home</a> <a href="/" 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="../../index.html#tools-header" class="mobile-nav-link">All Tools</a> <a href="/" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -69,12 +71,14 @@
</p> </p>
<div class="bg-yellow-900/30 border border-yellow-700 rounded-lg p-3 mb-6"> <div class="bg-yellow-900/30 border border-yellow-700 rounded-lg p-3 mb-6">
<p class="text-yellow-200 text-sm"> <p class="text-yellow-200 text-sm">
<strong>Note:</strong> Only JSON files created by the PDF-to-JSON converter tool are supported. Standard JSON files from other tools will not work. <strong>Note:</strong> Only JSON files created by the PDF-to-JSON converter tool are supported. Standard JSON
files from other tools will not work.
</p> </p>
</div> </div>
<div class="upload-section mb-6"> <div class="upload-section mb-6">
<div class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300"> <div
class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300">
<div class="flex flex-col items-center justify-center pt-5 pb-6"> <div class="flex flex-col items-center justify-center pt-5 pb-6">
<i data-lucide="upload-cloud" class="w-10 h-10 mb-3 text-gray-400"></i> <i data-lucide="upload-cloud" class="w-10 h-10 mb-3 text-gray-400"></i>
<p class="mb-2 text-sm text-gray-300"> <p class="mb-2 text-sm text-gray-300">
@@ -83,13 +87,8 @@
<p class="text-xs text-gray-500">Multiple JSON files</p> <p class="text-xs text-gray-500">Multiple JSON files</p>
<p class="text-xs text-gray-500">Your files never leave your device.</p> <p class="text-xs text-gray-500">Your files never leave your device.</p>
</div> </div>
<input <input type="file" id="jsonFiles" accept="application/json" multiple
type="file" class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer" />
id="jsonFiles"
accept="application/json"
multiple
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
/>
</div> </div>
<!-- File Display Area --> <!-- File Display Area -->
@@ -108,6 +107,6 @@
<script type="module" src="../js/logic/json-to-pdf.ts"></script> <script type="module" src="../js/logic/json-to-pdf.ts"></script>
<script type="module" src="../js/utils/lucide-init.ts"></script> <script type="module" src="../js/utils/lucide-init.ts"></script>
<script type="module" src="../js/mobileMenu.ts"></script> <script type="module" src="../js/mobileMenu.ts"></script>
</body> </body>
</html>
</html>

View File

@@ -30,7 +30,7 @@
<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="../../public/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="../../index.html">BentoPDF</a> <a href="/">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>
@@ -60,6 +60,7 @@
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div> <div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
<!-- Add Blank --> <!-- Add Blank -->
<button id="add-blank-page-btn" <button id="add-blank-page-btn"
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base"> class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
@@ -68,19 +69,19 @@
</button> </button>
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div> <div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
<span class="text-gray-400 text-xs sm:text-sm hidden md:inline">Edit:</span> <span class="text-gray-400 text-xs sm:text-sm md:inline">Edit:</span>
<!-- Undo / Redo / Reset --> <!-- Undo / Redo / Reset -->
<button id="undo-btn" <button id="undo-btn"
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base"> class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
<i data-lucide="rotate-ccw" class="w-3 h-3 sm:w-4 sm:h-4"></i> <i data-lucide="undo-2" class="w-3 h-3 sm:w-4 sm:h-4"></i>
<span class="hidden lg:inline">Undo</span> <span class="hidden lg:inline">Undo</span>
</button> </button>
<button id="redo-btn" <button id="redo-btn"
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base"> class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
<i data-lucide="rotate-cw" class="w-3 h-3 sm:w-4 sm:h-4"></i> <i data-lucide="redo-2" class="w-3 h-3 sm:w-4 sm:h-4"></i>
<span class="hidden lg:inline">Redo</span> <span class="hidden lg:inline">Redo</span>
</button> </button>
@@ -93,7 +94,7 @@
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div> <div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
<!-- Selection --> <!-- Selection -->
<span class="text-gray-400 text-xs sm:text-sm hidden md:inline">Selection:</span> <span class="text-gray-400 text-xs sm:text-sm md:inline">Selection:</span>
<button id="select-all-btn" <button id="select-all-btn"
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base"> class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
@@ -110,7 +111,7 @@
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div> <div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
<!-- Rotate --> <!-- Rotate -->
<span class="text-gray-400 text-xs sm:text-sm hidden md:inline">Rotate:</span> <span class="text-gray-400 text-xs sm:text-sm md:inline">Rotate:</span>
<button id="bulk-rotate-left-btn" <button id="bulk-rotate-left-btn"
class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base"> class="flex items-center gap-1 sm:gap-2 bg-gray-700 hover:bg-gray-600 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
<i data-lucide="rotate-ccw" class="w-3 h-3 sm:w-4 sm:h-4"></i> <i data-lucide="rotate-ccw" class="w-3 h-3 sm:w-4 sm:h-4"></i>
@@ -124,6 +125,8 @@
</button> </button>
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div> <div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
<span class="text-gray-400 text-xs sm:text-sm md:inline">Transform:</span>
<!-- Duplicate / Split --> <!-- Duplicate / Split -->
<button id="bulk-duplicate-btn" <button id="bulk-duplicate-btn"
@@ -139,7 +142,7 @@
</button> </button>
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div> <div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
<span class="text-gray-400 text-xs sm:text-sm hidden md:inline">Clear:</span> <span class="text-gray-400 text-xs sm:text-sm md:inline">Clear:</span>
<!-- Delete --> <!-- Delete -->
@@ -152,7 +155,7 @@
<div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div> <div class="border-l border-gray-600 h-5 sm:h-6 mx-1"></div>
<!-- Download --> <!-- Download -->
<span class="text-gray-400 text-xs sm:text-sm hidden md:inline">Download:</span> <span class="text-gray-400 text-xs sm:text-sm md:inline">Download:</span>
<button id="bulk-download-btn" <button id="bulk-download-btn"
class="flex items-center gap-1 sm:gap-2 bg-green-600 hover:bg-green-700 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base"> class="flex items-center gap-1 sm:gap-2 bg-green-600 hover:bg-green-700 text-white px-2 sm:px-3 md:px-4 py-1 sm:py-1.5 md:py-2 rounded text-xs sm:text-sm md:text-base">
<i data-lucide="download" class="w-3 h-3 sm:w-4 sm:h-4"></i> <i data-lucide="download" class="w-3 h-3 sm:w-4 sm:h-4"></i>

View File

@@ -1,29 +1,31 @@
<!doctype html> <!doctype html>
<html lang="en"> <html lang="en">
<head>
<head>
<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>PDF to JSON Converter - BentoPDF</title> <title>PDF to JSON Converter - BentoPDF</title>
<link rel="icon" type="image/png" href="../../images/favicon.svg" /> <link rel="icon" type="image/png" href="../../images/favicon.svg" />
<link href="../../src/css/styles.css" rel="stylesheet" /> <link href="../../src/css/styles.css" rel="stylesheet" />
</head> </head>
<body class="antialiased bg-gray-900">
<body class="antialiased bg-gray-900">
<nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30"> <nav class="bg-gray-800 border-b border-gray-700 sticky top-0 z-30">
<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="../../public/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="../../index.html">BentoPDF</a> <a href="/">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="../../index.html" class="nav-link">Home</a> <a href="/" 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="../../index.html#tools-header" class="nav-link">All Tools</a> <a href="/" class="nav-link">All Tools</a>
</div> </div>
<!-- Mobile Hamburger Button --> <!-- Mobile Hamburger Button -->
@@ -48,10 +50,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="../../index.html" class="mobile-nav-link">Home</a> <a href="/" 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="../../index.html#tools-header" class="mobile-nav-link">All Tools</a> <a href="/" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>
@@ -69,7 +71,8 @@
</p> </p>
<div class="upload-section mb-6"> <div class="upload-section mb-6">
<div class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300"> <div
class="relative flex flex-col items-center justify-center w-full h-48 border-2 border-dashed border-gray-600 rounded-xl cursor-pointer bg-gray-700 hover:bg-gray-600 transition-colors duration-300">
<div class="flex flex-col items-center justify-center pt-5 pb-6"> <div class="flex flex-col items-center justify-center pt-5 pb-6">
<i data-lucide="upload-cloud" class="w-10 h-10 mb-3 text-gray-400"></i> <i data-lucide="upload-cloud" class="w-10 h-10 mb-3 text-gray-400"></i>
<p class="mb-2 text-sm text-gray-300"> <p class="mb-2 text-sm text-gray-300">
@@ -78,13 +81,8 @@
<p class="text-xs text-gray-500">Multiple PDF files</p> <p class="text-xs text-gray-500">Multiple PDF files</p>
<p class="text-xs text-gray-500">Your files never leave your device.</p> <p class="text-xs text-gray-500">Your files never leave your device.</p>
</div> </div>
<input <input type="file" id="pdfFiles" accept="application/pdf" multiple
type="file" class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer" />
id="pdfFiles"
accept="application/pdf"
multiple
class="absolute top-0 left-0 w-full h-full opacity-0 cursor-pointer"
/>
</div> </div>
<!-- File Display Area --> <!-- File Display Area -->
@@ -103,6 +101,6 @@
<script type="module" src="../js/logic/pdf-to-json.ts"></script> <script type="module" src="../js/logic/pdf-to-json.ts"></script>
<script type="module" src="../js/utils/lucide-init.ts"></script> <script type="module" src="../js/utils/lucide-init.ts"></script>
<script type="module" src="../js/mobileMenu.ts"></script> <script type="module" src="../js/mobileMenu.ts"></script>
</body> </body>
</html>
</html>

View File

@@ -16,16 +16,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="../../public/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="../../index.html">BentoPDF</a> <a href="/">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="../../index.html" class="nav-link">Home</a> <a href="/" 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="../../index.html#tools-header" class="nav-link">All Tools</a> <a href="/" 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="../../index.html" class="mobile-nav-link">Home</a> <a href="/" 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="../../index.html#tools-header" class="mobile-nav-link">All Tools</a> <a href="/" class="mobile-nav-link">All Tools</a>
</div> </div>
</div> </div>
</nav> </nav>