mirror of
https://github.com/simstudioai/sim.git
synced 2026-09-24 15:45:35 +08:00
improvement(sidebar): overlay lock indicator on leading icon (#4412)
* improvement(sidebar): overlay lock indicator on leading icon * fix(sidebar): correct lock indicator HTML nesting and a11y * improvement(sidebar): swap lock indicator with more button on hover * fix(sidebar): gate pointer-events on lock and more button visibility * fix(sidebar): add role=img so lock indicator is announced by AT
This commit is contained in:
+27
-18
@@ -552,26 +552,35 @@ export function FolderItem({
|
||||
>
|
||||
{folder.name}
|
||||
</span>
|
||||
{folder.locked && (
|
||||
<Lock
|
||||
className='pointer-events-none h-[12px] w-[12px] flex-shrink-0 text-[var(--text-icon)]'
|
||||
aria-label='Folder is locked'
|
||||
/>
|
||||
)}
|
||||
</div>
|
||||
<button
|
||||
type='button'
|
||||
aria-label='Folder options'
|
||||
onPointerDown={handleMorePointerDown}
|
||||
onClick={handleMoreClick}
|
||||
className={clsx(
|
||||
'flex h-[18px] w-[18px] flex-shrink-0 items-center justify-center rounded-sm opacity-0 transition-opacity',
|
||||
!isAnyDragActive && 'group-hover:opacity-100',
|
||||
isContextMenuOpen && 'opacity-100'
|
||||
<div className='relative h-[18px] w-[18px] flex-shrink-0'>
|
||||
{folder.locked && (
|
||||
<span
|
||||
role='img'
|
||||
aria-label='Folder is locked'
|
||||
className={clsx(
|
||||
'pointer-events-none absolute inset-0 flex items-center justify-center transition-opacity',
|
||||
!isAnyDragActive && 'group-hover:opacity-0',
|
||||
isContextMenuOpen && 'opacity-0'
|
||||
)}
|
||||
>
|
||||
<Lock className='h-[14px] w-[14px] text-[var(--text-icon)]' aria-hidden='true' />
|
||||
</span>
|
||||
)}
|
||||
>
|
||||
<MoreHorizontal className='h-[16px] w-[16px] text-[var(--text-icon)]' />
|
||||
</button>
|
||||
<button
|
||||
type='button'
|
||||
aria-label='Folder options'
|
||||
onPointerDown={handleMorePointerDown}
|
||||
onClick={handleMoreClick}
|
||||
className={clsx(
|
||||
'pointer-events-none absolute inset-0 flex items-center justify-center rounded-sm opacity-0 transition-opacity',
|
||||
!isAnyDragActive && 'group-hover:pointer-events-auto group-hover:opacity-100',
|
||||
isContextMenuOpen && 'pointer-events-auto opacity-100'
|
||||
)}
|
||||
>
|
||||
<MoreHorizontal className='h-[16px] w-[16px] text-[var(--text-icon)]' />
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
+18
-11
@@ -468,31 +468,38 @@ export function WorkflowItem({
|
||||
{workflow.name}
|
||||
</div>
|
||||
)}
|
||||
{!isEditing && workflow.locked && (
|
||||
<Lock
|
||||
className='pointer-events-none h-[12px] w-[12px] flex-shrink-0 text-[var(--text-icon)]'
|
||||
aria-label='Workflow is locked'
|
||||
/>
|
||||
)}
|
||||
{!isEditing && <Avatars workflowId={workflow.id} />}
|
||||
</div>
|
||||
</div>
|
||||
{!isEditing && (
|
||||
<>
|
||||
<div className='relative h-[18px] w-[18px] flex-shrink-0'>
|
||||
{workflow.locked && (
|
||||
<span
|
||||
role='img'
|
||||
aria-label='Workflow is locked'
|
||||
className={clsx(
|
||||
'pointer-events-none absolute inset-0 flex items-center justify-center transition-opacity',
|
||||
!isAnyDragActive && 'group-hover:opacity-0',
|
||||
isContextMenuOpen && 'opacity-0'
|
||||
)}
|
||||
>
|
||||
<Lock className='h-[14px] w-[14px] text-[var(--text-icon)]' aria-hidden='true' />
|
||||
</span>
|
||||
)}
|
||||
<button
|
||||
type='button'
|
||||
aria-label='Workflow options'
|
||||
onPointerDown={handleMorePointerDown}
|
||||
onClick={handleMoreClick}
|
||||
className={clsx(
|
||||
'flex h-[18px] w-[18px] flex-shrink-0 items-center justify-center rounded-sm opacity-0 transition-opacity',
|
||||
!isAnyDragActive && 'group-hover:opacity-100',
|
||||
isContextMenuOpen && 'opacity-100'
|
||||
'pointer-events-none absolute inset-0 flex items-center justify-center rounded-sm opacity-0 transition-opacity',
|
||||
!isAnyDragActive && 'group-hover:pointer-events-auto group-hover:opacity-100',
|
||||
isContextMenuOpen && 'pointer-events-auto opacity-100'
|
||||
)}
|
||||
>
|
||||
<MoreHorizontal className='h-[16px] w-[16px] text-[var(--text-icon)]' />
|
||||
</button>
|
||||
</>
|
||||
</div>
|
||||
)}
|
||||
</Link>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user