import React, { ComponentPropsWithoutRef, ElementRef, forwardRef, ReactElement, } from 'react' import { styled } from '../../stitches.config' import * as SelectPrimitive from '@radix-ui/react-select' import { faChevronDown } from '@fortawesome/free-solid-svg-icons' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import Box from './Box' type Props = { children: React.ReactNode trigger?: ReactElement css?: ComponentPropsWithoutRef['css'] } type SelectProps = { Item: typeof SelectPrimitive.Item ItemText: typeof StyledItemText Trigger: typeof StyledTrigger Value: typeof StyledValue DownIcon: typeof SelectDownIcon } const StyledTrigger = styled(SelectPrimitive.Trigger, { boxSizing: 'border-box', borderWidth: 0, width: '100%', px: '$4', py: '$3', borderRadius: 8, fontfamily: '$body', fontSize: 16, display: 'flex', justifyContent: 'space-between', color: '$neutralTextContrast', backgroundColor: '$gray3', $$focusColor: '$colors$accentBorderHover', '&:placeholder': { color: '$neutralText' }, '&:focus': { boxShadow: '0 0 0 2px $$focusColor' }, }) const StyledContent = styled(SelectPrimitive.Content, { backgroundColor: '$gray3', color: '$textColor', borderRadius: 8, overflow: 'hidden', $$focusColor: '$gray4', boxShadow: '0 0 0 2px $$focusColor', }) const textCss = { color: '$textColor', fontFamily: '$body', letterSpacing: 0, } const StyledItemText = styled(SelectPrimitive.ItemText, textCss) const StyledValue = styled(SelectPrimitive.Value, textCss) const SelectDownIcon = forwardRef< ElementRef, ComponentPropsWithoutRef >(({ ...props }, forwardedRef) => ( )) export const Select: React.FC< Props & ComponentPropsWithoutRef & ComponentPropsWithoutRef > & SelectProps = ({ children, trigger, css, ...props }) => ( {trigger ? ( trigger ) : ( {props.value} )} {children} ) const StyledItem = styled(SelectPrimitive.Item, { cursor: 'pointer', py: '$3', px: '$4', color: '$textColor', fontFamily: '$body', letterSpacing: 0, '&:hover': { background: '$gray4', }, }) Select.Item = StyledItem Select.ItemText = StyledItemText Select.Trigger = StyledTrigger Select.Value = StyledValue Select.DownIcon = SelectDownIcon export default Select