Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
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
1,656 changes: 642 additions & 1,014 deletions package-lock.json

Large diffs are not rendered by default.

5 changes: 2 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,15 +35,14 @@
},
"devDependencies": {
"@eslint/js": "^9.37.0",
"@tailwindcss/vite": "^4.1.14",
"@tauri-apps/cli": "^2.8.4",
"@types/lodash.debounce": "^4.0.9",
"@types/react": "^19.2.2",
"@types/react-dom": "^19.2.2",
"@vitejs/plugin-react": "^5.0.4",
"autoprefixer": "^10.4.21",
"eslint": "^9.37.0",
"postcss": "^8.5.6",
"tailwindcss": "^3.4.17",
"tailwindcss": "^4.1.14",
"typescript": "^5.9.3",
"typescript-eslint": "^8.46.1",
"vite": "^7.1.10"
Expand Down
6 changes: 0 additions & 6 deletions postcss.config.js

This file was deleted.

8 changes: 4 additions & 4 deletions src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3494,7 +3494,7 @@ function App() {

if (selectedImage) {
return (
<div className="flex flex-row flex-grow h-full min-h-0">
<div className="flex flex-row grow h-full min-h-0">
<div className="flex-1 flex flex-col min-w-0">
<Editor
activeAiPatchContainerId={activeAiPatchContainerId}
Expand Down Expand Up @@ -3717,7 +3717,7 @@ function App() {
);
}
return (
<div className="flex flex-row flex-grow h-full min-h-0">
<div className="flex flex-row grow h-full min-h-0">
<div className="flex-1 flex flex-col min-w-0 gap-2">
{activeView === 'community' ? (
<CommunityPage
Expand Down Expand Up @@ -3821,7 +3821,7 @@ function App() {
</button>
</div>
)}
<div className="flex flex-row flex-grow h-full min-h-0">
<div className="flex flex-row grow h-full min-h-0">
{rootPath && (
<>
<FolderTree
Expand Down Expand Up @@ -3857,7 +3857,7 @@ function App() {
/>
)}
<div
className={clsx('flex-shrink-0 overflow-hidden', !isResizing && 'transition-all duration-300 ease-in-out')}
className={clsx('shrink-0 overflow-hidden', !isResizing && 'transition-all duration-300 ease-in-out')}
style={{ width: isLibraryExportPanelVisible ? `${rightPanelWidth}px` : '0px' }}
>
<LibraryExportPanel
Expand Down
2 changes: 1 addition & 1 deletion src/components/adjustments/Color.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ const HSL_COLORS: Array<ColorProps> = [
const ColorSwatch = ({ color, name, isActive, onClick }: ColorSwatchProps) => (
<button
aria-label={`Select ${name} color`}
className={`w-6 h-6 rounded-full focus:outline-none transition-transform duration-150 ${
className={`w-6 h-6 rounded-full focus:outline-hidden transition-transform duration-150 ${
isActive ? 'ring-2 ring-accent ring-offset-2 ring-offset-bg-secondary transform scale-110' : 'hover:scale-110'
}`}
onClick={() => onClick(name)}
Expand Down
2 changes: 1 addition & 1 deletion src/components/adjustments/Curves.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -299,7 +299,7 @@ export default function CurveGraph({ adjustments, setAdjustments, histogram, the
className={clsx(
'w-7 h-7 rounded-full text-xs font-bold flex items-center justify-center transition-all opacity-0 group-hover:opacity-100',
{
'ring-2 ring-offset-2 ring-offset-surface ring-accent bg-accent text-button-text !opacity-100':
'ring-2 ring-offset-2 ring-offset-surface ring-accent bg-accent text-button-text opacity-100!':
adjustments.showClipping,
'bg-surface-secondary text-text-primary': !adjustments.showClipping,
},
Expand Down
4 changes: 2 additions & 2 deletions src/components/modals/AddPresetModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ export default function AddPresetModal({ isOpen, onClose, onSave }: PresetModalP
<div
className={`
fixed inset-0 flex items-center justify-center z-50
bg-black/30 backdrop-blur-sm
bg-black/30 backdrop-blur-xs
transition-opacity duration-300 ease-in-out
${show ? 'opacity-100' : 'opacity-0'}
`}
Expand All @@ -71,7 +71,7 @@ export default function AddPresetModal({ isOpen, onClose, onSave }: PresetModalP
<h3 className="text-lg font-semibold text-text-primary mb-4">Save New Preset</h3>
<input
autoFocus
className="w-full bg-bg-primary text-text-primary border border-border rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-accent"
className="w-full bg-bg-primary text-text-primary border border-border rounded-md px-3 py-2 focus:outline-hidden focus:ring-2 focus:ring-accent"
onChange={(e: any) => setName(e.target.value)}
onKeyDown={handleKeyDown}
placeholder="Enter preset name..."
Expand Down
12 changes: 6 additions & 6 deletions src/components/modals/CollageModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -519,7 +519,7 @@ export default function CollageModal({ isOpen, onClose, onSave, sourceImages }:
};

const renderControls = () => (
<div className="w-80 flex-shrink-0 bg-bg-secondary p-4 flex flex-col gap-6 overflow-y-auto">
<div className="w-80 shrink-0 bg-bg-secondary p-4 flex flex-col gap-6 overflow-y-auto">
<div>
<h4 className="text-sm font-semibold mb-3 flex items-center justify-between">
<span className="flex items-center gap-2"><LayoutTemplate size={16} /> Layout</span>
Expand Down Expand Up @@ -596,7 +596,7 @@ export default function CollageModal({ isOpen, onClose, onSave, sourceImages }:
type="color"
value={backgroundColor}
onChange={e => setBackgroundColor(e.target.value)}
className="w-8 h-8 p-0 border-none rounded cursor-pointer bg-transparent"
className="w-8 h-8 p-0 border-none rounded-sm cursor-pointer bg-transparent"
/>
<input
type="text"
Expand Down Expand Up @@ -642,7 +642,7 @@ export default function CollageModal({ isOpen, onClose, onSave, sourceImages }:

return (
<div className="flex flex-row h-full w-full" onMouseMove={handleMouseMove} onMouseUp={handleMouseUp} onMouseLeave={handleMouseUp}>
<div ref={previewContainerRef} className="flex-grow h-full flex items-center justify-center bg-bg-secondary p-4 relative min-w-0">
<div ref={previewContainerRef} className="grow h-full flex items-center justify-center bg-bg-secondary p-4 relative min-w-0">
{isLoading && (
<div className="absolute inset-0 flex items-center justify-center bg-black/20 z-10">
<Loader2 className="w-12 h-12 text-accent animate-spin" />
Expand Down Expand Up @@ -677,7 +677,7 @@ export default function CollageModal({ isOpen, onClose, onSave, sourceImages }:

return (
<div
className={`fixed inset-0 flex items-center justify-center z-50 bg-black/50 backdrop-blur-sm transition-opacity duration-300 ease-in-out ${show ? 'opacity-100' : 'opacity-0'}`}
className={`fixed inset-0 flex items-center justify-center z-50 bg-black/50 backdrop-blur-xs transition-opacity duration-300 ease-in-out ${show ? 'opacity-100' : 'opacity-0'}`}
onMouseDown={onClose}
role="dialog"
aria-modal="true"
Expand All @@ -692,10 +692,10 @@ export default function CollageModal({ isOpen, onClose, onSave, sourceImages }:
exit={{ scale: 0.95, opacity: 0 }}
transition={{ duration: 0.2, ease: 'easeOut' }}
>
<div className="flex-grow min-h-0">
<div className="grow min-h-0">
{renderContent()}
</div>
<div className="flex-shrink-0 p-4 flex justify-end gap-3 border-t border-surface">
<div className="shrink-0 p-4 flex justify-end gap-3 border-t border-surface">
{renderButtons()}
</div>
</motion.div>
Expand Down
2 changes: 1 addition & 1 deletion src/components/modals/ConfirmModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ export default function ConfirmModal({
aria-modal="true"
className={`
fixed inset-0 flex items-center justify-center z-50
bg-black/30 backdrop-blur-sm
bg-black/30 backdrop-blur-xs
transition-opacity duration-300 ease-in-out
${show ? 'opacity-100' : 'opacity-0'}
`}
Expand Down
4 changes: 2 additions & 2 deletions src/components/modals/CreateFolderModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export default function CreateFolderModal({ isOpen, onClose, onSave }: FolderMod
aria-modal="true"
className={`
fixed inset-0 flex items-center justify-center z-50
bg-black/30 backdrop-blur-sm
bg-black/30 backdrop-blur-xs
transition-opacity duration-300 ease-in-out
${show ? 'opacity-100' : 'opacity-0'}
`}
Expand All @@ -71,7 +71,7 @@ export default function CreateFolderModal({ isOpen, onClose, onSave }: FolderMod
<h3 className="text-lg font-semibold text-text-primary mb-4">Create New Folder</h3>
<input
autoFocus
className="w-full bg-bg-primary text-text-primary border border-border rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-accent"
className="w-full bg-bg-primary text-text-primary border border-border rounded-md px-3 py-2 focus:outline-hidden focus:ring-2 focus:ring-accent"
onChange={(e: any) => setName(e.target.value)}
onKeyDown={handleKeyDown}
placeholder="Enter folder name..."
Expand Down
4 changes: 2 additions & 2 deletions src/components/modals/CullingModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ function ImageThumbnail({ path, thumbnails, isSelected, onToggle, children }: an
isSelected ? 'opacity-0' : 'opacity-100 group-hover:opacity-0'
}`}
/>
<div className="absolute top-2 right-2 w-5 h-5 bg-bg-primary rounded-sm border border-surface flex items-center justify-center">
<div className="absolute top-2 right-2 w-5 h-5 bg-bg-primary rounded-xs border border-surface flex items-center justify-center">
{isSelected && <CheckCircle size={16} className="text-accent" />}
</div>
{children && <div className="absolute bottom-0 left-0 right-0 p-1 bg-black/60 text-white text-xs">{children}</div>}
Expand Down Expand Up @@ -374,7 +374,7 @@ export default function CullingModal({

return (
<div
className={`fixed inset-0 flex items-center justify-center z-50 bg-black/30 backdrop-blur-sm transition-opacity duration-300 ease-in-out ${
className={`fixed inset-0 flex items-center justify-center z-50 bg-black/30 backdrop-blur-xs transition-opacity duration-300 ease-in-out ${
show ? 'opacity-100' : 'opacity-0'
}`}
onClick={onClose}
Expand Down
2 changes: 1 addition & 1 deletion src/components/modals/ImportSettingsModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ export default function ImportSettingsModal({ fileCount, isOpen, onClose, onSave
return (
<div
aria-modal="true"
className={`fixed inset-0 flex items-center justify-center z-50 bg-black/30 backdrop-blur-sm transition-opacity duration-300 ease-in-out ${
className={`fixed inset-0 flex items-center justify-center z-50 bg-black/30 backdrop-blur-xs transition-opacity duration-300 ease-in-out ${
show ? 'opacity-100' : 'opacity-0'
}`}
onClick={onClose}
Expand Down
4 changes: 2 additions & 2 deletions src/components/modals/PanoramaModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ export default function PanoramaModal({
<Loader2 className="w-16 h-16 text-accent animate-spin" />
</div>
<h3 className="text-lg font-semibold text-text-primary mb-2 text-center">Stitching Panorama</h3>
<p className="text-sm text-text-secondary text-center min-h-[1.25rem]">{progressMessage}</p>
<p className="text-sm text-text-secondary text-center min-h-5">{progressMessage}</p>
</>
);
};
Expand Down Expand Up @@ -163,7 +163,7 @@ export default function PanoramaModal({

return (
<div
className={`fixed inset-0 flex items-center justify-center z-50 bg-black/30 backdrop-blur-sm transition-opacity duration-300 ease-in-out ${
className={`fixed inset-0 flex items-center justify-center z-50 bg-black/30 backdrop-blur-xs transition-opacity duration-300 ease-in-out ${
show ? 'opacity-100' : 'opacity-0'
}`}
onClick={handleClose}
Expand Down
2 changes: 1 addition & 1 deletion src/components/modals/RenameFileModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ export default function RenameFileModal({ filesToRename, isOpen, onClose, onSave
return (
<div
aria-modal="true"
className={`fixed inset-0 flex items-center justify-center z-50 bg-black/30 backdrop-blur-sm transition-opacity duration-300 ease-in-out ${
className={`fixed inset-0 flex items-center justify-center z-50 bg-black/30 backdrop-blur-xs transition-opacity duration-300 ease-in-out ${
show ? 'opacity-100' : 'opacity-0'
}`}
onClick={onClose}
Expand Down
4 changes: 2 additions & 2 deletions src/components/modals/RenameFolderModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export default function RenameFolderModal({ isOpen, onClose, onSave, currentName
aria-modal="true"
className={`
fixed inset-0 flex items-center justify-center z-50
bg-black/30 backdrop-blur-sm
bg-black/30 backdrop-blur-xs
transition-opacity duration-300 ease-in-out
${show ? 'opacity-100' : 'opacity-0'}
`}
Expand All @@ -73,7 +73,7 @@ export default function RenameFolderModal({ isOpen, onClose, onSave, currentName
<h3 className="text-lg font-semibold text-text-primary mb-4">Rename Folder</h3>
<input
autoFocus
className="w-full bg-bg-primary text-text-primary border border-border rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-accent"
className="w-full bg-bg-primary text-text-primary border border-border rounded-md px-3 py-2 focus:outline-hidden focus:ring-2 focus:ring-accent"
onChange={(e: any) => setName(e.target.value)}
onKeyDown={handleKeyDown}
placeholder="Enter new folder name..."
Expand Down
4 changes: 2 additions & 2 deletions src/components/modals/RenamePresetModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ export default function RenamePresetModal({ isOpen, onClose, onSave, currentName
aria-modal="true"
className={`
fixed inset-0 flex items-center justify-center z-50
bg-black/30 backdrop-blur-sm
bg-black/30 backdrop-blur-xs
transition-opacity duration-300 ease-in-out
${show ? 'opacity-100' : 'opacity-0'}
`}
Expand All @@ -73,7 +73,7 @@ export default function RenamePresetModal({ isOpen, onClose, onSave, currentName
<h3 className="text-lg font-semibold text-text-primary mb-4">Rename Preset</h3>
<input
autoFocus
className="w-full bg-bg-primary text-text-primary border border-border rounded-md px-3 py-2 focus:outline-none focus:ring-2 focus:ring-accent"
className="w-full bg-bg-primary text-text-primary border border-border rounded-md px-3 py-2 focus:outline-hidden focus:ring-2 focus:ring-accent"
onChange={(e: any) => setName(e.target.value)}
onKeyDown={handleKeyDown}
placeholder="Enter new preset name..."
Expand Down
6 changes: 3 additions & 3 deletions src/components/panel/BottomBar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ export default function BottomBar({
};

return (
<div className="flex-shrink-0 bg-bg-secondary rounded-lg flex flex-col">
<div className="shrink-0 bg-bg-secondary rounded-lg flex flex-col">
{!isLibraryView && (
<div
className={clsx(
Expand All @@ -229,7 +229,7 @@ export default function BottomBar({

<div
className={clsx(
'flex-shrink-0 h-10 flex items-center justify-between px-3',
'shrink-0 h-10 flex items-center justify-between px-3',
!isLibraryView && isFilmstripVisible && 'border-t border-surface',
)}
>
Expand Down Expand Up @@ -329,7 +329,7 @@ export default function BottomBar({
onChange={(e) => setPercentInputValue(e.target.value)}
onKeyDown={handlePercentKeyDown}
onBlur={handlePercentSubmit}
className="w-full text-xs text-text-primary bg-bg-primary border border-border-color rounded px-1 text-right"
className="w-full text-xs text-text-primary bg-bg-primary border border-border-color rounded-sm px-1 text-right"
style={{ fontSize: '12px', height: '18px' }}
/>
) : (
Expand Down
4 changes: 2 additions & 2 deletions src/components/panel/CommunityPage.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ const CommunityPage = ({ onBackToLibrary, imageList, currentFolderPath }: Commun

return (
<div className="flex-1 flex flex-col h-full min-w-0 bg-bg-secondary rounded-lg overflow-hidden p-4">
<header className="flex-shrink-0 flex items-center justify-between mb-4 flex-wrap gap-4">
<header className="shrink-0 flex items-center justify-between mb-4 flex-wrap gap-4">
<div className="flex items-center">
<Button
className="mr-4 hover:bg-surface text-text-primary rounded-full"
Expand Down Expand Up @@ -277,7 +277,7 @@ const CommunityPage = ({ onBackToLibrary, imageList, currentFolderPath }: Commun
<img
src={previewUrl}
alt={preset.name}
className="w-full h-full object-cover transition-all duration-300 group-hover:blur-sm group-hover:brightness-75"
className="w-full h-full object-cover transition-all duration-300 group-hover:blur-xs group-hover:brightness-75"
/>
) : (
<Loader2 className="h-6 w-6 animate-spin" />
Expand Down
4 changes: 2 additions & 2 deletions src/components/panel/Filmstrip.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ const FilmstripThumbnail = ({
return (
<motion.div
className={clsx(
'h-full rounded-md overflow-hidden cursor-pointer flex-shrink-0 group relative transition-all duration-150',
'h-full rounded-md overflow-hidden cursor-pointer shrink-0 group relative transition-all duration-150',
thumbnailAspectRatio === ThumbnailAspectRatio.Cover && 'aspect-square',
ringClass,
)}
Expand Down Expand Up @@ -181,7 +181,7 @@ const FilmstripThumbnail = ({
</div>
)}
{(colorLabel || rating > 0) && (
<div className="absolute top-1 right-1 bg-primary rounded-full px-1.5 py-0.5 text-xs text-white flex items-center gap-1 backdrop-blur-sm">
<div className="absolute top-1 right-1 bg-primary rounded-full px-1.5 py-0.5 text-xs text-white flex items-center gap-1 backdrop-blur-xs">
{colorLabel && (
<div
className="w-3 h-3 rounded-full ring-1 ring-black/20"
Expand Down
17 changes: 10 additions & 7 deletions src/components/panel/FolderTree.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -155,26 +155,29 @@ function TreeNode({
onContextMenu={(e: any) => onContextMenu(e, node.path, isPinned)}
>
<div
className={clsx('cursor-pointer p-0.5 rounded hover:bg-surface', {
className={clsx('cursor-pointer p-0.5 rounded-sm hover:bg-surface', {
'cursor-default': !hasChildren,
})}
onClick={handleFolderIconClick}
>
{isExpanded ? (
<FolderOpen size={16} className="text-hover-color flex-shrink-0" />
<FolderOpen size={16} className="text-hover-color shrink-0" />
) : (
<Folder size={16} className="text-text-secondary flex-shrink-0" />
<Folder size={16} className="text-text-secondary shrink-0" />
)}
</div>
<span onDoubleClick={handleNameDoubleClick} className="truncate select-none cursor-pointer flex-1">
{node.name}
</span>
{hasChildren && (
<div className="p-0.5 rounded hover:bg-surface cursor-pointer" onClick={handleFolderIconClick}>
<div
className="p-0.5 rounded-sm hover:bg-surface cursor-pointer"
onClick={handleFolderIconClick}
>
{isExpanded ? (
<ChevronUp size={16} className="text-text-secondary flex-shrink-0" />
<ChevronUp size={16} className="text-text-secondary shrink-0" />
) : (
<ChevronDown size={16} className="text-text-secondary flex-shrink-0" />
<ChevronDown size={16} className="text-text-secondary shrink-0" />
)}
</div>
)}
Expand Down Expand Up @@ -303,7 +306,7 @@ export default function FolderTree({
return (
<div
className={clsx(
'relative bg-bg-secondary rounded-lg flex-shrink-0',
'relative bg-bg-secondary rounded-lg shrink-0',
!isResizing && 'transition-[width] duration-300 ease-in-out',
)}
style={style}
Expand Down
Loading
Loading