108 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import * as ContextMenuPrimitive from '@radix-ui/react-context-menu'
 | 
						|
import { styled } from '../../stitches.config'
 | 
						|
import {
 | 
						|
  slideDownAndFade,
 | 
						|
  slideLeftAndFade,
 | 
						|
  slideRightAndFade,
 | 
						|
  slideUpAndFade
 | 
						|
} from '../../styles/keyframes'
 | 
						|
 | 
						|
const StyledContent = styled(ContextMenuPrimitive.Content, {
 | 
						|
  minWidth: 140,
 | 
						|
  backgroundColor: '$backgroundOverlay',
 | 
						|
  borderRadius: 6,
 | 
						|
  overflow: 'hidden',
 | 
						|
  padding: '5px',
 | 
						|
  boxShadow:
 | 
						|
    '0px 10px 38px -10px rgba(22, 23, 24, 0.35), 0px 10px 20px -15px rgba(22, 23, 24, 0.2)',
 | 
						|
  '@media (prefers-reduced-motion: no-preference)': {
 | 
						|
    animationDuration: '400ms',
 | 
						|
    animationTimingFunction: 'cubic-bezier(0.16, 1, 0.3, 1)',
 | 
						|
    willChange: 'transform, opacity',
 | 
						|
    '&[data-state="open"]': {
 | 
						|
      '&[data-side="top"]': { animationName: slideDownAndFade },
 | 
						|
      '&[data-side="right"]': { animationName: slideLeftAndFade },
 | 
						|
      '&[data-side="bottom"]': { animationName: slideUpAndFade },
 | 
						|
      '&[data-side="left"]': { animationName: slideRightAndFade }
 | 
						|
    }
 | 
						|
  },
 | 
						|
  '.dark &': {
 | 
						|
    boxShadow:
 | 
						|
      '0px 10px 38px -10px rgba(22, 23, 24, 0.85), 0px 10px 20px -15px rgba(22, 23, 24, 0.6)'
 | 
						|
  }
 | 
						|
})
 | 
						|
 | 
						|
const itemStyles = {
 | 
						|
  all: 'unset',
 | 
						|
  fontSize: 13,
 | 
						|
  lineHeight: 1,
 | 
						|
  color: '$text',
 | 
						|
  borderRadius: 3,
 | 
						|
  display: 'flex',
 | 
						|
  alignItems: 'center',
 | 
						|
  height: 28,
 | 
						|
  padding: '0 7px',
 | 
						|
  position: 'relative',
 | 
						|
  paddingLeft: 10,
 | 
						|
  userSelect: 'none',
 | 
						|
 | 
						|
  '&[data-disabled]': {
 | 
						|
    color: '$textMuted',
 | 
						|
    pointerEvents: 'none'
 | 
						|
  },
 | 
						|
 | 
						|
  '&:focus': {
 | 
						|
    backgroundColor: '$purple9',
 | 
						|
    color: '$white'
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
const StyledItem = styled(ContextMenuPrimitive.Item, { ...itemStyles })
 | 
						|
const StyledCheckboxItem = styled(ContextMenuPrimitive.CheckboxItem, {
 | 
						|
  ...itemStyles
 | 
						|
})
 | 
						|
const StyledRadioItem = styled(ContextMenuPrimitive.RadioItem, {
 | 
						|
  ...itemStyles
 | 
						|
})
 | 
						|
const StyledTriggerItem = styled(ContextMenuPrimitive.TriggerItem, {
 | 
						|
  '&[data-state="open"]': {
 | 
						|
    backgroundColor: '$purple9',
 | 
						|
    color: '$purple9'
 | 
						|
  },
 | 
						|
  ...itemStyles
 | 
						|
})
 | 
						|
 | 
						|
const StyledLabel = styled(ContextMenuPrimitive.Label, {
 | 
						|
  paddingLeft: 10,
 | 
						|
  fontSize: 12,
 | 
						|
  lineHeight: '25px',
 | 
						|
  color: '$text'
 | 
						|
})
 | 
						|
 | 
						|
const StyledSeparator = styled(ContextMenuPrimitive.Separator, {
 | 
						|
  height: 1,
 | 
						|
  backgroundColor: '$backgroundAlt',
 | 
						|
  margin: 5
 | 
						|
})
 | 
						|
 | 
						|
const StyledItemIndicator = styled(ContextMenuPrimitive.ItemIndicator, {
 | 
						|
  position: 'absolute',
 | 
						|
  left: 0,
 | 
						|
  width: 25,
 | 
						|
  display: 'inline-flex',
 | 
						|
  alignItems: 'center',
 | 
						|
  justifyContent: 'center'
 | 
						|
})
 | 
						|
 | 
						|
export const ContextMenuRoot = ContextMenuPrimitive.Root
 | 
						|
export const ContextMenuTrigger = ContextMenuPrimitive.Trigger
 | 
						|
export const ContextMenuContent = StyledContent
 | 
						|
export const ContextMenuItem = StyledItem
 | 
						|
export const ContextMenuCheckboxItem = StyledCheckboxItem
 | 
						|
export const ContextMenuRadioGroup = ContextMenuPrimitive.RadioGroup
 | 
						|
export const ContextMenuRadioItem = StyledRadioItem
 | 
						|
export const ContextMenuItemIndicator = StyledItemIndicator
 | 
						|
export const ContextMenuTriggerItem = StyledTriggerItem
 | 
						|
export const ContextMenuLabel = StyledLabel
 | 
						|
export const ContextMenuSeparator = StyledSeparator
 |