Skip to content

Commit cc3c2cb

Browse files
authored
feat: layer overlay handle (#182)
* feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay * feat: layer overlay
1 parent 809e9b0 commit cc3c2cb

File tree

6 files changed

+712
-14
lines changed

6 files changed

+712
-14
lines changed

web/src/components/image-editor/controls/layer-controls.tsx

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
} from '@/components/ui/select'
2727
import { ToggleGroup, ToggleGroupItem } from '@/components/ui/toggle-group'
2828
import type { BlendMode, ImageLayer } from '@/lib/image-editor'
29+
import { cn } from '@/lib/utils'
2930

3031
interface LayerControlsProps {
3132
layer: ImageLayer
@@ -313,6 +314,7 @@ export function LayerControls({
313314
onValueChange={handleHAlignChange}
314315
variant='outline'
315316
className='flex-1 gap-0'
317+
disabled={visualCropEnabled}
316318
>
317319
<ToggleGroupItem
318320
value='left'
@@ -340,7 +342,7 @@ export function LayerControls({
340342
type='number'
341343
value={hAlign === 'center' ? '' : xOffset}
342344
onChange={(e) => handleXOffsetChange(Number(e.target.value) || 0)}
343-
disabled={hAlign === 'center'}
345+
disabled={hAlign === 'center' || visualCropEnabled}
344346
placeholder='—'
345347
min={0}
346348
step={1}
@@ -361,6 +363,7 @@ export function LayerControls({
361363
onValueChange={handleVAlignChange}
362364
variant='outline'
363365
className='flex-1 gap-0'
366+
disabled={visualCropEnabled}
364367
>
365368
<ToggleGroupItem
366369
value='top'
@@ -388,7 +391,7 @@ export function LayerControls({
388391
type='number'
389392
value={vAlign === 'center' ? '' : yOffset}
390393
onChange={(e) => handleYOffsetChange(Number(e.target.value) || 0)}
391-
disabled={vAlign === 'center'}
394+
disabled={vAlign === 'center' || visualCropEnabled}
392395
placeholder='—'
393396
min={0}
394397
step={1}
@@ -411,6 +414,7 @@ export function LayerControls({
411414
value={currentWidth}
412415
onChange={(e) => handleWidthChange(e.target.value)}
413416
onBlur={(e) => handleWidthBlur(e.target.value)}
417+
disabled={visualCropEnabled}
414418
min='1'
415419
max='10000'
416420
className='h-8'
@@ -422,6 +426,7 @@ export function LayerControls({
422426
variant='outline'
423427
size='sm'
424428
onClick={() => onAspectRatioLockChange(!aspectRatioLocked)}
429+
disabled={visualCropEnabled}
425430
className='h-8 w-8 p-0'
426431
title={
427432
aspectRatioLocked
@@ -442,6 +447,7 @@ export function LayerControls({
442447
value={currentHeight}
443448
onChange={(e) => handleHeightChange(e.target.value)}
444449
onBlur={(e) => handleHeightBlur(e.target.value)}
450+
disabled={visualCropEnabled}
445451
min='1'
446452
max='10000'
447453
className='h-8'
@@ -459,12 +465,24 @@ export function LayerControls({
459465
step={1}
460466
unit='%'
461467
onChange={handleAlphaChange}
468+
disabled={visualCropEnabled}
462469
/>
463470

464471
{/* Blend Mode Control */}
465472
<div className='space-y-2'>
466-
<Label className='text-sm font-medium'>{t('imageEditor.layers.blendMode')}</Label>
467-
<Select value={layer.blendMode} onValueChange={handleBlendModeChange}>
473+
<Label
474+
className={cn(
475+
'text-sm font-medium',
476+
visualCropEnabled && 'text-muted-foreground opacity-50',
477+
)}
478+
>
479+
{t('imageEditor.layers.blendMode')}
480+
</Label>
481+
<Select
482+
value={layer.blendMode}
483+
onValueChange={handleBlendModeChange}
484+
disabled={visualCropEnabled}
485+
>
468486
<SelectTrigger>
469487
<SelectValue />
470488
</SelectTrigger>

0 commit comments

Comments
 (0)