Skip to content

merge dev to main#2

Merged
AhmedTrooper merged 36 commits into
mainfrom
dev
Jul 4, 2026
Merged

merge dev to main#2
AhmedTrooper merged 36 commits into
mainfrom
dev

Conversation

@AhmedTrooper

Copy link
Copy Markdown
Owner

No description provided.

…ctive workspace name

 - Replace recursive container padding with level-based inline style padding in FileTreeItem.vue to prevent text squishing on deeply nested folders (e.g. 6+ levels).
    - Add dynamic workspaceName computed property to CompilerTab.vue to display the active working directory in the sidebar header with graceful truncation.
Add draggable divider between code editor and PDF preview panel

Add header button to toggle PDF preview panel visibility
Disable iframe pointer events during resizing to prevent mouse trapping

Clamp preview pane width with Math bounds for smooth bidirectional dragging
Set 180px minimum width on file tree sidebar to preserve file label readability

Add auto-snap collapse behavior when dragging resizer under 100px
…t menu

Remove cluttering action buttons on file tree item hover

Add teleported custom context menu for file creation, renaming, deletion, and main file selection
Set overflow-x auto on file tree container to allow horizontal panning on deep nesting

Use width max-content and min-width 100% on tree rows to prevent label clipping
…heme tokens

Capture and restore scrollLeft and scrollTop in refreshFileTree to maintain horizontal tree scroll state

Remove background loading spinner toggle on compile to prevent DOM unmounting

Refactor context menu CSS to consume pure global theme variables for customized theme support
Set iframe to display block and pdf-viewer to flex overflow hidden to eliminate baseline whitespace

Update pdf-viewer background to use global theme var(--bg)
…space

Unconstrain refinement bar from editor wrapper and attach drag bounds to main compiler container

Elevate z-index and adjust drag physics to float smoothly over sidebar and PDF preview
…lorer reveal actions

Add full directory path subtext and system explorer reveal buttons to sidebar header

Add Open File and Switch Folder buttons to sidebar toolbar for seamless file management

Add Reveal in System Explorer item to right-click context menu in FileTreeItem
… upgrade auto-compile button

Stack workspace info on top layer and action tools on bottom layer to prevent label squishing

Replace browser checkbox with Zap action button for Auto Compile with explicit active state styling
…ty workspace buttons

Enforce fixed dimensions and flex-start alignment on sidebar header tool buttons

Add 10px gap between Open Folder and Open File buttons in empty workspace view
Ensure standalone or previous cross-workspace files are unmounted when a new directory is selected

Attempt to automatically load the workspace's main file into the editor upon open
…active

Refactor compilePdf path resolution to dynamically detect if active file is outside workspace

Use external file's parent directory as isolated workspace context during compilation
…RL execution

Resolve regex validation failures on local file paths when opening the system explorer

Implement revealItemInDir for local paths and openUrl for web links
…wer security exceptions

Apply strict CSS to PDF object to remove 2-10px inline descender gap

Use setTimeout when restoring file tree scroll coordinates after compilation to prevent UI shaking
- Replaced native iframe/object PDF embeds with vue-pdf-embed (pdf.js).

- Bypassed WebKitGTK SecurityError
  caused by internal webkit-pdfjs-viewer during production.

- Updated CompilerTab and JobDetailView templates and adjusted CSS for scaling/scrolling.

- Added vue-pdf-embed dependency.
This prevents the webview from scaling the entire UI via trackpad or touch gestures, reserving zoo
Copilot AI review requested due to automatic review settings July 4, 2026 20:42
@AhmedTrooper AhmedTrooper merged commit c6281af into main Jul 4, 2026
1 check passed

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR merges development changes into main, introducing a new PDF preview/streaming approach for LaTeX compilation, UI/UX improvements across the editor and job detail views, and updates to AI provider support and the browser extensions.

Changes:

  • Switch PDF preview from blob/iframe to vue-pdf-embed with chunked HTTP range streaming from a local /static-pdf/output.pdf endpoint.
  • Add DeepSeek as an AI provider option (frontend + Rust backend provider wiring).
  • Improve workspace/file explorer UX (open single file, reveal in system explorer, context menus, resizable preview panes) and enhance extension interactive extraction (exclude selector + toast updates).

Reviewed changes

Copilot reviewed 30 out of 33 changed files in this pull request and generated 13 comments.

Show a summary per file
File Description
tectonic.compiler Adds prose documentation about compiler behavior (currently not aligned with new streaming/output behavior).
src/style.css Adds touch-action behavior to reduce gesture zoom interference.
src/main.ts Adds global wheel/touch handlers to prevent pinch-to-zoom.
src/components/SettingsTab.vue Adds DeepSeek provider and model options in settings UI.
src/components/JobDetailView.vue Adds split-pane editor/PDF preview with vue-pdf-embed, per-mode state separation, and opener-based URL handling.
src/components/FileTreeItem.vue Reworks file tree interactions with a right-click context menu, indentation levels, and “reveal in explorer”.
src/components/DiagramTab.vue Improves sidebar header/tools, adds open-file and reveal-in-explorer actions, and preview toggle.
src/components/CompilerTab.vue Major IDE UX updates: resizable preview pane, vue-pdf-embed preview, open single file, reveal workspace, improved refresh behavior, and compilation path handling.
src/components/AboutTab.vue Switches external link opening to @tauri-apps/plugin-opener.
src/App.vue Switches external link opening to @tauri-apps/plugin-opener.
src-tauri/test_deepseek.rs Adds a small DeepSeek client test file (appears to be ad-hoc).
src-tauri/tauri.conf.json Disables zoom hotkeys; enables asset protocol broadly; disables CSP.
src-tauri/src/server.rs Adds /static-pdf/output.pdf streaming endpoint (supports Range) and loosens CORS.
src-tauri/src/lib.rs Adds tauri-plugin-localhost.
src-tauri/src/commands/pdf.rs Writes compiled PDFs to Documents/RoleTect/output.pdf to support streaming preview endpoint.
src-tauri/src/ai.rs Adds DeepSeek provider support via rig::providers::deepseek.
src-tauri/Cargo.toml Enables tauri asset protocol feature and adds new dependencies (tauri-plugin-localhost, tokio-util).
src-tauri/Cargo.lock Updates lockfile for new Rust dependencies.
README.md Adds Firefox add-on badge and link to a local report PDF.
package.json Adds vue-pdf-embed dependency.
index.html Updates viewport to disable user scaling.
extentions/firefox/popup.js Adds exclude selector support and improves status/toast behavior.
extentions/firefox/popup.html Updates interactive button styling and adds fixed-position status toast container.
extentions/firefox/manifest.json Bumps version, adds tabs permission, relaxes minimum Firefox version.
extentions/firefox/content.js Adds injection guard and supports exclude selector during interactive extraction; improves noise filtering.
extentions/firefox/background.js Passes exclude selector through interactive flow and relies on tabs API.
extentions/chrome/popup.js Adds exclude selector support and improves status/toast behavior.
extentions/chrome/popup.html Updates interactive button styling and adds fixed-position status toast container.
extentions/chrome/manifest.json Bumps version.
extentions/chrome/content.js Adds injection guard and supports exclude selector during interactive extraction; improves noise filtering.
extentions/chrome/background.js Passes exclude selector through interactive flow.
bun.lock Adds vue-pdf-embed and its transitive dependencies to the Bun lockfile.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src-tauri/src/server.rs
Comment on lines 40 to 43
let cors = CorsLayer::new()
.allow_origin([
"http://localhost:1420".parse().unwrap(),
"tauri://localhost".parse().unwrap(),
])
.allow_origin(Any)
.allow_methods(Any)
.allow_headers(Any);
Comment thread src-tauri/src/server.rs
Comment on lines +146 to +147
let docs_dir = state.app_handle.path().document_dir().expect("Failed to locate Documents folder");
let file_path = docs_dir.join("RoleTect").join("output.pdf");
Comment thread src-tauri/src/server.rs
Comment on lines +165 to +171
let start = parts[0].parse::<u64>().unwrap_or(0);
let end_str = parts[1];
let mut end = if end_str.is_empty() { file_len - 1 } else { end_str.parse::<u64>().unwrap_or(file_len - 1) };
end = std::cmp::min(end, file_len - 1);

if start <= end {
let length = end - start + 1;
Comment on lines +152 to +156
// Copy it to Documents/RoleTect/output.pdf
let _ = std::fs::write(&output_pdf_path, &pdf_data);

// Clean up temp dir
let _ = std::fs::remove_dir_all(&temp_output_dir);
Comment on lines +243 to +245
// ALSO copy to Documents/RoleTect/output.pdf
let _ = std::fs::write(&output_pdf_path, &pdf_data);

const resumeInstruction = ref('');
const resumeLatex = ref('');
const resumePdfUrl = ref<string | null>(null);
const resumePdfUrl = ref<any>(null);
const clInstruction = ref('');
const clLatex = ref('');
const clPdfUrl = ref<string | null>(null);
const clPdfUrl = ref<any>(null);
Comment on lines +267 to +268
import { onUnmounted } from 'vue';
onUnmounted(() => {
Comment on lines +1 to +5
use rig::providers::deepseek;

fn main() {
let client = deepseek::Client::new("key");
}
Comment thread tectonic.compiler
Comment on lines +1 to +13
Here is exactly what the code in CompilerTab.vue and pdf.rs does for those three different scenarios. The frontend uses some clever logic to figure out which approach to take based on what you
have open!

### Scenario 1: Unsaved .tex (Scratchpad Mode)

• Trigger: You haven't selected or saved any file to the disk yet, you just have raw code in the editor ( !compileTarget ).
• Frontend Action: It invokes the compile_resume_to_pdf command, passing the raw string from the editor ( latexCode.value ).
• Rust Backend Action:
1. Tectonic is booted up with no physical root directory.
2. The raw string is fed directly into Tectonic's virtual memory buffer.
3. The compilation runs entirely in RAM.
4. The generated PDF bytes are extracted from the virtual memory and sent back to the frontend.
5. Nothing is written to your hard drive.
@AhmedTrooper AhmedTrooper deleted the dev branch July 5, 2026 09:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants