projects/deliberation_at_scale/packages/frontend/components/EntityIcons/index.stories.tsx (107 lines of code) (raw):

import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import type { Meta, StoryObj } from '@storybook/react'; import { aiRegular, aiSolid, groupRegular, groupSolid, personRegular, personSolid, statementRegular, statementSolid, topicRegular, topicSolid } from '.'; import { faCircle as faCircleSolid, faSquare as faSquareSolid } from '@fortawesome/free-solid-svg-icons'; import { faCircle as faCircleRegular, faSquare as faSquareRegular } from '@fortawesome/free-regular-svg-icons'; import { PropsWithChildren, ReactNode, useState } from 'react'; function ChangeOnHover({ children, hover }: PropsWithChildren<{ hover: ReactNode }>) { const [isHovered, setIsHovered] = useState(false); return ( <div onMouseEnter={() => setIsHovered(true)} onMouseLeave={() => setIsHovered(false)}> {isHovered ? hover : children } </div> ); } const meta: Meta = { title: 'EntityIcons', }; export const Primary: StoryObj = { render: function EntityIcons() { return ( <> <table className="table-auto"> <tr> <th className="p-2 text-left">style</th> <th className="p-2">group</th> <th className="p-2">persons</th> <th className="p-2">statement</th> <th className="p-2">topic</th> <th className="p-2">ai</th> <th className="p-2">faCircle</th> <th className="p-2">faSquare</th> </tr> <tr> <td className="p-2">solid</td> <td className="p-2"><FontAwesomeIcon icon={groupSolid} /></td> <td className="p-2"><FontAwesomeIcon icon={personSolid} /></td> <td className="p-2"><FontAwesomeIcon icon={statementSolid} /></td> <td className="p-2"><FontAwesomeIcon icon={topicSolid} /></td> <td className="p-2"><FontAwesomeIcon icon={aiSolid} /></td> <td className="p-2"><FontAwesomeIcon icon={faCircleSolid} /></td> <td className="p-2"><FontAwesomeIcon icon={faSquareSolid} /></td> </tr> <tr> <td className="p-2">regular</td> <td className="p-2"><FontAwesomeIcon icon={groupRegular} /></td> <td className="p-2"><FontAwesomeIcon icon={personRegular} /></td> <td className="p-2"><FontAwesomeIcon icon={statementRegular} /></td> <td className="p-2"><FontAwesomeIcon icon={topicRegular} /></td> <td className="p-2"><FontAwesomeIcon icon={aiRegular} /></td> <td className="p-2"><FontAwesomeIcon icon={faCircleRegular} /></td> <td className="p-2"><FontAwesomeIcon icon={faSquareRegular} /></td> </tr> <tr> <td className="p-2">hover</td> <td className="p-2"> <ChangeOnHover hover={<FontAwesomeIcon icon={groupRegular} />}> <FontAwesomeIcon icon={groupSolid} /> </ChangeOnHover> </td> <td className="p-2"> <ChangeOnHover hover={<FontAwesomeIcon icon={personRegular} />}> <FontAwesomeIcon icon={personSolid} /> </ChangeOnHover> </td> <td className="p-2"> <ChangeOnHover hover={<FontAwesomeIcon icon={statementRegular} />}> <FontAwesomeIcon icon={statementSolid} /> </ChangeOnHover> </td> <td className="p-2"> <ChangeOnHover hover={<FontAwesomeIcon icon={topicRegular} />}> <FontAwesomeIcon icon={topicSolid} /> </ChangeOnHover> </td> <td className="p-2"> <ChangeOnHover hover={<FontAwesomeIcon icon={aiRegular} />}> <FontAwesomeIcon icon={aiSolid} /> </ChangeOnHover> </td> <td className="p-2"> <ChangeOnHover hover={<FontAwesomeIcon icon={faCircleRegular} />}> <FontAwesomeIcon icon={faCircleSolid} /> </ChangeOnHover> </td> <td className="p-2"> <ChangeOnHover hover={<FontAwesomeIcon icon={faSquareRegular} />}> <FontAwesomeIcon icon={faSquareSolid} /> </ChangeOnHover> </td> </tr> </table> </> ); }, }; export default meta;