feat(photo-editor): Ajax Image Editor client (Photoshop-parity tools)

Photoshop-parity editor client: layers, selection/masking, brushes,
smart filters, LUT import, Quick Edit, mobile gestures, workspaces,
batch operations, and the service-worker versioning (v978->v1006).

Source: vendor/photocraft (ad1cff44) photo-editor client files, merged
onto upstream/dev (a8c147b2). Conflict resolution documented in
pr_work/A_conflicts.md; editor files taken from vendor/photocraft
(upstream's editor is an earlier snapshot of the same feature).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
pewdiepie-archdaemon
2026-10-15 11:57:35 +00:00
co-authored by Claude Opus 5.5
parent c74f475679
commit 5fac693c1c
290 changed files with 34358 additions and 766 deletions
+4 -3
View File
@@ -39,8 +39,8 @@
import { state } from './state.js';
import { isLayerPixelLocked, isLayerTransparencyLocked } from './layer-groups.js';
const TOPBAR_MENU_IDS = ['ge-view-menu', 'ge-image-menu', 'ge-selection-menu', 'ge-filter-menu', 'ge-resize-menu', 'ge-save-menu'];
const TOPBAR_TRIGGER_IDS = ['ge-view-menu-btn', 'ge-image-menu-btn', 'ge-selection-menu-btn', 'ge-filter-menu-btn', 'ge-resize-menu-btn', 'ge-save-menu-btn'];
const TOPBAR_MENU_IDS = ['ge-file-menu', 'ge-edit-menu', 'ge-view-menu', 'ge-image-menu', 'ge-layer-menu', 'ge-type-menu', 'ge-selection-menu', 'ge-filter-menu', 'ge-window-menu', 'ge-help-menu', 'ge-resize-menu', 'ge-save-menu'];
const TOPBAR_TRIGGER_IDS = ['ge-file-menu-btn', 'ge-edit-menu-btn', 'ge-view-menu-btn', 'ge-image-menu-btn', 'ge-layer-menu-btn', 'ge-type-menu-btn', 'ge-selection-menu-btn', 'ge-filter-menu-btn', 'ge-window-menu-btn', 'ge-help-menu-btn', 'ge-resize-menu-btn', 'ge-save-menu-btn'];
/**
* Close every topbar dropdown except an optional "keep open" one.
@@ -59,7 +59,7 @@ export function wireTopbar(deps) {
const {
undo, redo, toggleHistoryPanel, toggleCompare,
fitZoom, applyZoom,
exportToGallery, downloadPNG, saveProject, loadProjectPrompt,
exportToGallery, downloadPNG, exportPNGFile, saveProject, loadProjectPrompt,
activeLayer, saveState, applyEdgeFeather, composite,
registerDocClickAway, uiModule,
} = deps;
@@ -133,6 +133,7 @@ export function wireTopbar(deps) {
// Export / Download / Project Save / Project Load.
document.getElementById('ge-export-gallery')?.addEventListener('click', exportToGallery);
document.getElementById('ge-download')?.addEventListener('click', downloadPNG);
document.getElementById('ge-export-png')?.addEventListener('click', exportPNGFile);
document.getElementById('ge-save-project')?.addEventListener('click', saveProject);
document.getElementById('ge-load-project')?.addEventListener('click', loadProjectPrompt);