Add some buttons
This commit is contained in:
		
							parent
							
								
									5d082e0ead
								
							
						
					
					
						commit
						7324a2f359
					
				
							
								
								
									
										32
									
								
								web/components/button.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								web/components/button.tsx
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| export function Button(props: { | ||||
|   className?: string | ||||
|   onClick?: () => void | ||||
|   color: 'green' | 'red' | 'deemphasized' | ||||
|   hideFocusRing?: boolean | ||||
|   children?: any | ||||
| }) { | ||||
|   const { className, onClick, children, color, hideFocusRing } = props | ||||
| 
 | ||||
|   return ( | ||||
|     <button | ||||
|       type="button" | ||||
|       className={classNames( | ||||
|         'inline-flex items-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white', | ||||
|         !hideFocusRing && 'focus:outline-none focus:ring-2 focus:ring-offset-2', | ||||
|         color === 'green' && | ||||
|           'bg-green-500 hover:bg-green-600 focus:ring-green-500', | ||||
|         color === 'red' && 'bg-red-500 hover:bg-red-600 focus:ring-red-500', | ||||
|         color === 'deemphasized' && | ||||
|           'bg-transparent hover:bg-gray-600 focus:ring-gray-400', | ||||
|         className | ||||
|       )} | ||||
|       onClick={onClick} | ||||
|     > | ||||
|       {children} | ||||
|     </button> | ||||
|   ) | ||||
| } | ||||
| 
 | ||||
| function classNames(...classes: any[]) { | ||||
|   return classes.filter(Boolean).join(' ') | ||||
| } | ||||
							
								
								
									
										34
									
								
								web/components/yes-no-selector.tsx
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								web/components/yes-no-selector.tsx
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,34 @@ | |||
| import React from 'react' | ||||
| import { Button } from './button' | ||||
| import { Row } from './layout/row' | ||||
| 
 | ||||
| export function YesNoSelector(props: { | ||||
|   selected: 'yes' | 'no' | ||||
|   onSelect: (selected: 'yes' | 'no') => void | ||||
|   yesLabel?: string | ||||
|   noLabel?: string | ||||
|   className?: string | ||||
| }) { | ||||
|   const { selected, onSelect, yesLabel, noLabel, className } = props | ||||
| 
 | ||||
|   return ( | ||||
|     <Row className={className}> | ||||
|       <Button | ||||
|         color={selected === 'yes' ? 'green' : 'deemphasized'} | ||||
|         hideFocusRing | ||||
|         onClick={() => onSelect('yes')} | ||||
|       > | ||||
|         {yesLabel ?? 'Yes'} | ||||
|       </Button> | ||||
| 
 | ||||
|       <Button | ||||
|         color={selected === 'no' ? 'red' : 'deemphasized'} | ||||
|         hideFocusRing | ||||
|         onClick={() => onSelect('no')} | ||||
|         className="ml-3" | ||||
|       > | ||||
|         {noLabel ?? 'No'} | ||||
|       </Button> | ||||
|     </Row> | ||||
|   ) | ||||
| } | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user