6-structured_outputs/structured-outputs-math-tutor-starting-point/components/ui/icons.tsx (107 lines of code) (raw):

'use client' import * as React from 'react' import { clsx, type ClassValue } from 'clsx' import { twMerge } from 'tailwind-merge' function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)) } function IconArrowRight({ className, ...props }: React.ComponentProps<'svg'>) { return ( <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor" strokeWidth="8" stroke="currentColor" className={cn('size-4', className)} {...props} > <path d="m221.66 133.66-72 72a8 8 0 0 1-11.32-11.32L196.69 136H40a8 8 0 0 1 0-16h156.69l-58.35-58.34a8 8 0 0 1 11.32-11.32l72 72a8 8 0 0 1 0 11.32Z" /> </svg> ) } function IconRefresh({ className, ...props }: React.ComponentProps<'svg'>) { return ( <svg xmlns="http://www.w3.org/2000/svg" width="1.2em" height="1.2em" viewBox="0 0 24 24" > <path fill="currentColor" d="M12 20q-3.35 0-5.675-2.325T4 12t2.325-5.675T12 4q1.725 0 3.3.712T18 6.75V4h2v7h-7V9h4.2q-.8-1.4-2.187-2.2T12 6Q9.5 6 7.75 7.75T6 12t1.75 4.25T12 18q1.925 0 3.475-1.1T17.65 14h2.1q-.7 2.65-2.85 4.325T12 20" /> </svg> ) } function IconSidebar({ className, ...props }: React.ComponentProps<'svg'>) { return ( <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor" className={cn('size-4', className)} transform="scale(-1, 1)" {...props} > <path d="M216 40H40a16 16 0 0 0-16 16v144a16 16 0 0 0 16 16h176a16 16 0 0 0 16-16V56a16 16 0 0 0-16-16ZM40 56h40v144H40Zm176 144H96V56h120v144Z" /> </svg> ) } function IconCheck({ className, ...props }: React.ComponentProps<'svg'>) { return ( <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor" stroke="currentColor" strokeWidth="24" className={cn('size-4', className)} {...props} > <path d="m229.66 77.66-128 128a8 8 0 0 1-11.32 0l-56-56a8 8 0 0 1 11.32-11.32L96 188.69 218.34 66.34a8 8 0 0 1 11.32 11.32Z" /> </svg> ) } function IconClose({ className, ...props }: React.ComponentProps<'svg'>) { return ( <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="currentColor" stroke="currentColor" strokeWidth="20" className={cn('size-4', className)} {...props} > <path d="M205.66 194.34a8 8 0 0 1-11.32 11.32L128 139.31l-66.34 66.35a8 8 0 0 1-11.32-11.32L116.69 128 50.34 61.66a8 8 0 0 1 11.32-11.32L128 116.69l66.34-66.35a8 8 0 0 1 11.32 11.32L139.31 128Z" /> </svg> ) } function IconSeparator({ className, ...props }: React.ComponentProps<'svg'>) { return ( <svg fill="none" shapeRendering="geometricPrecision" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" strokeWidth="4" viewBox="0 0 24 24" aria-hidden="true" className={cn('size-4', className)} {...props} > <path d="M16.88 3.549L7.12 20.451"></path> </svg> ) } export { IconArrowRight, IconRefresh, IconSidebar, IconCheck, IconClose, IconSeparator }