Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
130 commits
Select commit Hold shift + click to select a range
8021259
add wireframe
Jor02 Feb 16, 2026
670ec6d
Merge remote-tracking branch 'upstream/master'
Jor02 Feb 17, 2026
2a47105
Reorder script tag position in HTML
headquarter8302 Feb 18, 2026
12c2d01
Initial UI surface
headquarter8302 Feb 18, 2026
199718c
Merge branch 'p2r3:master' into master
headquarter8302 Feb 18, 2026
b75d001
Prepare for Conversion page
headquarter8302 Feb 18, 2026
b536d15
Use the proper image for the logo
headquarter8302 Feb 18, 2026
991125c
add dark/light theme toggle
Jor02 Feb 18, 2026
11006a4
Fix invalid tsconfig JSX setup
headquarter8302 Feb 19, 2026
ab86090
Resolve conflict
headquarter8302 Feb 19, 2026
3257146
Merge branch 'master' into master
headquarter8302 Feb 19, 2026
717b7a8
Separate as script
headquarter8302 Feb 19, 2026
9de9176
improve upload page styling
Jor02 Feb 19, 2026
67834dd
Merge remote-tracking branch 'origin/master'
Jor02 Feb 19, 2026
d20b55b
Further preparation of Conversion page
headquarter8302 Feb 19, 2026
1445e07
Reconcile overwritten commits
headquarter8302 Feb 19, 2026
5218885
add conversion page
Jor02 Feb 19, 2026
cc42054
Run through formatter + debug function
headquarter8302 Feb 20, 2026
dff5a41
Remove `UploadFiles` signal, redundant
headquarter8302 Feb 21, 2026
6e5f34c
Remove `UploadFiles` signal, redundant
headquarter8302 Feb 21, 2026
60010e4
Explicitly export and use `selectedFiles` from `main.ts`
headquarter8302 Feb 21, 2026
c05e30e
add missing footer to conversion page
Jor02 Feb 21, 2026
82b2701
split sidenav into separate component
Jor02 Feb 21, 2026
d7bc42e
add missing footer import
Jor02 Feb 21, 2026
cded3ae
split format card into separate component
Jor02 Feb 21, 2026
d53a0c3
fix incorrectly using color instead of background-color
Jor02 Feb 21, 2026
739fd96
split conversion page settings into separate component
Jor02 Feb 21, 2026
2d7ef2f
increased format category font size
Jor02 Feb 21, 2026
bb4f45a
move missing css classes into ConversionSettings.css
Jor02 Feb 21, 2026
97bc2b1
move missing css class into SideNav.css
Jor02 Feb 21, 2026
77f620b
remove redundant classes from Conversion.css
Jor02 Feb 21, 2026
2a2c066
split selected file info from conversion into separate component
Jor02 Feb 21, 2026
3922fd1
move classes to ConversionSettings.css
Jor02 Feb 21, 2026
09bc398
removed unused class name in Conversion.tsx
Jor02 Feb 21, 2026
a9628c6
changed accidental class to classname
Jor02 Feb 21, 2026
533f474
fix chain link icon not displaying correctly
Jor02 Feb 21, 2026
c0b2a09
Rearrange files + formatting run
headquarter8302 Feb 21, 2026
ecb711f
Cleanup
headquarter8302 Feb 21, 2026
03accea
CSS scaling fix
headquarter8302 Feb 21, 2026
180d9a7
Move data to module scope
headquarter8302 Feb 23, 2026
5998c72
Add Popup component
headquarter8302 Feb 24, 2026
70301ed
Use generated formats for UI format card source
headquarter8302 Feb 24, 2026
ef40166
Calling preventDefault on keydown is a bad idea
headquarter8302 Feb 25, 2026
5aed53d
Track "Advanced mode" state changes
headquarter8302 Feb 25, 2026
eb494a3
Add search & selection functionality on Conversion
headquarter8302 Feb 25, 2026
1111ac3
Merge branch 'master' into master
headquarter8302 Feb 26, 2026
8dd36a2
Style scrollbars to theme
headquarter8302 Feb 26, 2026
4a39ab8
Styling changes to Conversion page
headquarter8302 Feb 26, 2026
8ff5e50
Styling for mobile layout
headquarter8302 Feb 26, 2026
e4ede73
Add button actions to Popup
headquarter8302 Feb 26, 2026
cc48282
Move variable change to document root
headquarter8302 Feb 26, 2026
b9ceb80
Interpolate more colors with the primary accent
headquarter8302 Feb 26, 2026
5286f40
Add arbitrary Popup data input
headquarter8302 Feb 26, 2026
106f6ac
Fix escape-dismiss not setting proper state
headquarter8302 Feb 26, 2026
93ba29e
Replace Help placeholder with README excerpt
headquarter8302 Feb 26, 2026
be789bf
Pass the handler name to format cards
headquarter8302 Feb 26, 2026
72a7cca
Limit popup width
headquarter8302 Feb 26, 2026
92f593e
Add state for upload field disabling
headquarter8302 Feb 26, 2026
509087a
Remove unused type field
headquarter8302 Feb 26, 2026
453f906
Show selected file name
headquarter8302 Feb 26, 2026
3062522
only scroll format card section when on slim screens
Jor02 Feb 26, 2026
2e24ab5
scale sidenav with screen size on slim screens
Jor02 Feb 26, 2026
d547c51
replace logo svg with better quality svg
Jor02 Feb 26, 2026
824df84
made sidenav interactable
Jor02 Feb 26, 2026
31ecc51
removed trailing semicolon
Jor02 Feb 26, 2026
000acd4
moved content-wrapper to a separate element
Jor02 Feb 27, 2026
c1c9b1c
turned FormatCard into button to improve accessibility
Jor02 Feb 27, 2026
70ca649
Allow multiple file uploads and file deselection
headquarter8302 Feb 28, 2026
37042a0
Merge branch 'p2r3:master' into master
headquarter8302 Mar 1, 2026
990ebb6
Use proper variables for styling
headquarter8302 Mar 1, 2026
5d169da
Refactor components and part of the prefs system
headquarter8302 Mar 2, 2026
b4d5521
Refactor SelectedFiles to use a Record type and update FileInfoBadge …
headquarter8302 Mar 2, 2026
b51fd1d
Extract to `ComponentHeader`
headquarter8302 Mar 2, 2026
ade5d19
Create "compact" version of theme toggle and add to Conversion page
headquarter8302 Mar 2, 2026
4706078
Use proper style variable
headquarter8302 Mar 2, 2026
9873107
Run through formatter
headquarter8302 Mar 3, 2026
7e3980b
Run through formatter
headquarter8302 Mar 3, 2026
70c7dcd
This should be outside
headquarter8302 Mar 3, 2026
71cd8a1
Use a Map for format options
headquarter8302 Mar 3, 2026
cc13413
Use Mode signal instead of value
headquarter8302 Mar 3, 2026
c473000
Fix and optimize format searching
headquarter8302 Mar 3, 2026
e5546fd
Deprecate variable, use Signal
headquarter8302 Mar 3, 2026
64b17d9
Pass data to ConversionSidebar component
headquarter8302 Mar 3, 2026
a81bdcf
Improved color calculation
Jor02 Mar 5, 2026
20e73ee
Improved color calculation (again)
Jor02 Mar 5, 2026
66749ca
Added custom button component
Jor02 Mar 5, 2026
e091e35
Merge branch 'p2r3:master' into master
headquarter8302 Mar 6, 2026
f817021
improve some padding (#1)
neko782 Mar 6, 2026
6bad84a
Add Conversion page flowchart
headquarter8302 Mar 7, 2026
f11156e
Use `ConversionOptionsMap` on `Conversion.tsx`
headquarter8302 Mar 10, 2026
8477f4f
Use `ConversionOption`
headquarter8302 Mar 10, 2026
2e4897c
Further `ConversionOptionsMap` migration
headquarter8302 Mar 10, 2026
7261268
Update flowchart
headquarter8302 Mar 10, 2026
996f7ff
Properly cache search index
headquarter8302 Mar 11, 2026
887a76c
Final `ConversionOptionsMap` conversion
headquarter8302 Mar 11, 2026
0fdb74e
Ensure links open in a new tab
headquarter8302 Mar 11, 2026
14a46a4
Allow clicks on backdrop to dismiss dialog
headquarter8302 Mar 11, 2026
6b6a26f
1st attempt at filtering non-Advanced mode formats
headquarter8302 Mar 11, 2026
d76960a
Implement conversion category filtering
headquarter8302 Mar 13, 2026
318ec3a
Reorganize files to use NextJS-style hierarchy
headquarter8302 Mar 13, 2026
d9b289b
TypeScript improvements
headquarter8302 Mar 13, 2026
c8d7669
Merge branch 'master' into master
headquarter8302 Mar 18, 2026
977d78f
improved styles (#2)
neko782 Mar 20, 2026
d6a654c
Merge upstream
Explosion-Scratch Mar 26, 2026
59e4210
WIP huge refactor
Explosion-Scratch Mar 27, 2026
65a972e
fromTo, buttons, styling changes
Explosion-Scratch Mar 27, 2026
1918604
Cool background
Explosion-Scratch Mar 27, 2026
f860233
Click logo to return to upload page
Explosion-Scratch Mar 27, 2026
3cf69fe
Fix format filtering
Explosion-Scratch Mar 27, 2026
5567185
Material design icons
Explosion-Scratch Mar 27, 2026
59ce475
Progress support!!!
Explosion-Scratch Mar 29, 2026
47c11cf
Drag to upload file
Explosion-Scratch Mar 29, 2026
6da86d0
Improvements for drag to upload
Explosion-Scratch Mar 29, 2026
cd8a980
Handler options
Explosion-Scratch Mar 30, 2026
a4282aa
Fix ffmpeg
Explosion-Scratch Mar 30, 2026
9b143d4
Format to itself can still route through a plugin that supports it (e…
Explosion-Scratch Mar 30, 2026
844efd5
Multi-file drag-and-drop support, refactor settings UI
Explosion-Scratch Mar 30, 2026
b9f35ce
Readd loading stripes
Explosion-Scratch Mar 31, 2026
87bca9c
EPUB, PPTX, SVG, Typst merge WIP
Explosion-Scratch Mar 31, 2026
372eee1
PPTX -> PDF working wonderfully!!
Explosion-Scratch Mar 31, 2026
26fc032
Better desktop UI
Explosion-Scratch Mar 31, 2026
fa0e482
The great button unification
Explosion-Scratch Mar 31, 2026
69d51d6
Minor styling improvements
Explosion-Scratch Mar 31, 2026
4f1da3f
Improve algo significantly, extract mime utils, fix esc glitch
Explosion-Scratch Mar 31, 2026
0170a20
Better progress
Explosion-Scratch Mar 31, 2026
8ff2076
Minor stylings
Explosion-Scratch Mar 31, 2026
cae25f9
Merge branch 'master' into master
headquarter8302 Apr 1, 2026
0d2e002
Merge branch 'frontend-revamp-contrib' of https://github.com/Explosio…
headquarter8302 Apr 1, 2026
7c05d55
Merge branch 'Explosion-Scratch-frontend-revamp-contrib'
headquarter8302 Apr 1, 2026
5416826
Properly type global properties
headquarter8302 Apr 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
bun.lock
package-lock.json
node_modules
.cache
public/material-file-icons
start.sh
dist
release
Expand Down
55 changes: 55 additions & 0 deletions base.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800;900&display=swap');

html,
body {
padding: 0;
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}

*,
*::after,
*::before {
margin: 0;
box-sizing: border-box;
}

@media (prefers-reduced-motion: no-preference) {
html {
interpolate-size: allow-keywords;
}
}

input,
button,
textarea,
select {
font: inherit;
}

img {
font-size: 12px;
}

button {
cursor: pointer;
}

::-webkit-scrollbar {
width: 6px;
height: 6px;
}

::-webkit-scrollbar-track {
background: transparent;
}

::-webkit-scrollbar-thumb {
background: var(--border-primary);
border-radius: 10px;
}

::-webkit-scrollbar-thumb:hover {
background: var(--text-muted);
}
2 changes: 2 additions & 0 deletions docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ WORKDIR /app

RUN apt-get update && apt-get install -y --no-install-recommends \
chromium \
git \
&& rm -rf /var/lib/apt/lists/*

ENV PUPPETEER_SKIP_DOWNLOAD=true
ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium

COPY .npmrc ./
COPY package.json ./
COPY scripts ./scripts
RUN bun install --frozen-lockfile

COPY . .
Expand Down
360 changes: 360 additions & 0 deletions docs/Conversion flowchart.drawio

Large diffs are not rendered by default.

Binary file added docs/Conversion flowchart.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/wireframe.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
48 changes: 7 additions & 41 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
<!DOCTYPE html>
<html lang="en">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
<script type="module" src="./src/ui/scripts/theme-detection.ts"></script>
<link rel="stylesheet" href="style.css">
<link rel="stylesheet" href="base.css">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<title>Convert to it!</title>

Expand All @@ -17,48 +20,11 @@
<meta name="theme-color" content="#1C77FF"/>
<meta name="og:type" content="website"/>
</head>
<body>

<input id="file-input" type="file">

<a id="commit-id" href="https://github.com/p2r3/convert"></a>

<div id="file-area">
<h2>Click to add your file</h2>
<p id="drop-hint-text">or drag and drop it here</p>
</div>
<div id="side-panel">
<button id="mode-button">Advanced mode</button>
</div>

<div id="format-containers">

<div id="from-container" class="format-container">
<h2>Convert from:</h2>
<input type="text" id="search-from" class="search" placeholder="Search">
<div id="from-list" class="format-list">

</div>
</div>

<div id="to-container" class="format-container">
<h2>Convert to:</h2>
<input type="text" id="search-to" class="search" placeholder="Search">
<div id="to-list" class="format-list">

</div>
</div>

</div>

<button id="convert-button" class="disabled">Convert</button>

<div id="popup-bg"></div>
<div id="popup">
<h2>Loading tools...</h2>
</div>

<script type="module" src="src/main.ts"></script>
<body>

</body>
<script type="module" src="src/main.new.ts"></script>
<script type="module" src="src/ui/index.tsx"></script>

</html>
11 changes: 11 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"type": "module",
"main": "src/electron.cjs",
"scripts": {
"postinstall": "bun run scripts/extract-material-icons.ts",
"dev": "vite",
"build": "tsc && vite build",
"cache:build": "bun run buildCache.js dist/cache.json --minify",
Expand Down Expand Up @@ -43,6 +44,7 @@
}
},
"devDependencies": {
"@preact/preset-vite": "^2.10.3",
"@types/jszip": "^3.4.0",
"@types/less": "^3.0.8",
"@types/opentype.js": "^1.3.9",
Expand All @@ -55,18 +57,21 @@
},
"dependencies": {
"7z-wasm": "^1.2.0",
"@aiden0z/pptx-renderer": "^1.0.2",
"@bjorn3/browser_wasi_shim": "^0.4.2",
"@bokuweb/zstd-wasm": "^0.0.27",
"@ffmpeg/core": "^0.12.10",
"@ffmpeg/ffmpeg": "^0.12.15",
"@ffmpeg/util": "^0.12.2",
"@flo-audio/reflo": "^0.1.2",
"@imagemagick/magick-wasm": "^0.0.37",
"@preact/signals": "^2.8.1",
"@myriaddreamin/typst-ts-renderer": "^0.7.0-rc2",
"@myriaddreamin/typst-ts-web-compiler": "^0.7.0-rc2",
"@myriaddreamin/typst.ts": "^0.7.0-rc2",
"@sqlite.org/sqlite-wasm": "^3.51.2-build6",
"@stringsync/vexml": "^0.1.8",
"@tippyjs/react": "^4.2.6",
"@toon-format/toon": "^2.1.0",
"@types/bun": "^1.3.9",
"@types/meyda": "^5.3.0",
Expand All @@ -77,11 +82,14 @@
"celaria-formats": "^1.0.2",
"chess.js": "^1.4.0",
"confbox": "^0.2.4",
"dom-to-svg": "^0.12.2",
"epubjs": "^0.3.93",
"imagetracer": "^0.2.2",
"js-synthesizer": "^1.11.0",
"json5": "^2.2.3",
"jszip": "^3.10.1",
"less": "^4.6.4",
"lucide-preact": "^1.7.0",
"meyda": "^5.6.3",
"mime": "^4.1.0",
"nanotar": "^0.3.0",
Expand All @@ -92,12 +100,15 @@
"pdf-parse": "^2.4.5",
"pdftoimg-js": "^0.2.5",
"pe-library": "^2.0.1",
"preact": "^10.28.3",
"sass": "^1.98.0",
"svg-pathdata": "^8.0.0",
"three": "^0.182.0",
"three-bvh-csg": "^0.0.17",
"three-mesh-bvh": "^0.9.8",
"tippy.js": "^6.3.7",
"ts-flp": "^1.0.3",
"use-debounce": "^10.1.0",
"turbowarp-packager-browser": "3.11.1",
"verovio": "^6.0.1",
"vexflow": "^5.0.0",
Expand Down
104 changes: 104 additions & 0 deletions scripts/extra-language-extensions.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
export const extraExtensionToIcon: Record<string, string> = {
ts: "typescript",
cts: "typescript",
mts: "typescript",
js: "javascript",
cjs: "javascript",
mjs: "javascript",
jsx: "react",
tsx: "react_ts",
py: "python",
pyw: "python",
pyi: "python",
yml: "yaml",
yaml: "yaml",
md: "markdown",
markdown: "markdown",
html: "html",
htm: "html",
css: "css",
scss: "sass",
sass: "sass",
less: "less",
sh: "console",
bash: "console",
zsh: "console",
ksh: "console",
fish: "console",
ps1: "powershell",
psm1: "powershell",
psd1: "powershell",
cs: "csharp",
fs: "fsharp",
fsx: "fsharp",
fsi: "fsharp",
vb: "visualstudio",
swift: "swift",
kt: "kotlin",
kts: "kotlin",
java: "java",
go: "go",
rs: "rust",
rb: "ruby",
php: "php",
pl: "perl",
pm: "perl",
r: "r",
lua: "lua",
vim: "vim",
sql: "database",
kql: "kusto",
ex: "elixir",
exs: "elixir",
erl: "erlang",
hrl: "erlang",
hs: "haskell",
clj: "clojure",
cljs: "clojure",
edn: "clojure",
groovy: "groovy",
scala: "scala",
ml: "ocaml",
mli: "ocaml",
diff: "diff",
patch: "git",
dockerfile: "docker",
vue: "vue",
svelte: "svelte",
astro: "astro",
solidity: "solidity",
graphql: "graphql",
gql: "graphql",
prisma: "prisma",
toml: "toml",
lock: "lock",
log: "log",
txt: "document",
rtf: "document",
tex: "tex",
bib: "bibliography",
bst: "bibtex-style",
dart: "dart",
coffee: "coffee",
iced: "coffee",
cls: "latex-class",
sty: "tex",
dtx: "tex",
ins: "doctex-installer",
ctx: "context",
v: "vlang",
gradle: "gradle",
hcl: "hcl",
tf: "terraform",
tfvars: "terraform",
nix: "nix",
dhall: "dhall",
cabal: "cabal",
purs: "purescript",
nim: "nim",
nimble: "nim",
cr: "crystal",
elm: "elm",
jl: "julia",
ipynb: "jupyter",
};
Loading