import React from 'react'; import type { Meta, StoryObj } from '@storybook/react-vite'; import { Group, ToggleButton, type ToggleButtonProps, composeRenderProps, } from 'react-aria-components'; import { tv } from 'tailwind-variants'; import { Toolbar } from './Toolbar.quanta'; import { Button } from '../Button/Button.quanta'; import { Checkbox } from '../Checkbox/Checkbox.quanta'; import { Menu, MenuItem, MenuSeparator, MenuTrigger, } from '../Menu/Menu.quanta'; import { Separator } from '../Separator/Separator.quanta'; import { AligncenterIcon, AlignleftIcon, AlignrightIcon, BoldIcon, CopyIcon, CutIcon, ItalicIcon, LinkIcon, ListIcon, ListnumbersIcon, MoreoptionsIcon, PasteIcon, RedoIcon, SearchIcon, UndoIcon, ChevrondownIcon, ChevronupIcon, BinIcon, } from '../icons'; const toggleStyles = tv({ base: ` flex h-9 w-9 items-center justify-center rounded-full border border-transparent bg-quanta-air text-quanta-iron transition hover:bg-quanta-snow hover:text-quanta-royal focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-quanta-cobalt active:bg-quanta-smoke `, variants: { isSelected: { true: ` bg-quanta-cobalt text-white hover:bg-quanta-royal active:bg-quanta-sapphire `, }, isDisabled: { true: ` cursor-not-allowed opacity-50 hover:bg-quanta-air hover:text-quanta-iron `, }, }, }); function FormattingToggle(props: ToggleButtonProps) { return ( toggleStyles({ ...renderProps, className }), )} /> ); } const meta: Meta = { title: 'Quanta/Toolbar', component: Toolbar, parameters: { layout: 'centered', }, tags: ['autodocs'], }; export default meta; type Story = StoryObj; export const Default: Story = { render: (args) => ( Allow comments Undo Redo Toolbar settings ), }; export const WithMenus: Story = { render: (args) => ( Cut Copy Paste ), }; export const Vertical: Story = { render: (args) => ( Wrap text Tight Normal Loose ), }; export const WrappingContent: Story = { render: (args) => { const actions = [ { id: 'undo', label: 'Undo', icon: UndoIcon }, { id: 'redo', label: 'Redo', icon: RedoIcon }, { id: 'cut', label: 'Cut', icon: CutIcon }, { id: 'copy', label: 'Copy', icon: CopyIcon }, { id: 'paste', label: 'Paste', icon: PasteIcon }, { id: 'find', label: 'Find', icon: SearchIcon }, { id: 'link', label: 'Link', icon: LinkIcon }, ]; return ( {actions.map(({ id, label, icon: Icon }) => ( ))} ); }, }; export const BlockActions: Story = { render: (args) => ( ), args: { orientation: 'vertical', }, };