split-button.stories.tsx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { Fragment } from 'react'
  2. import type { Meta } from '@storybook/react'
  3. import { useTranslation } from 'react-i18next'
  4. import {
  5. Dropdown,
  6. DropdownHeader,
  7. DropdownItem,
  8. DropdownMenu,
  9. DropdownToggle,
  10. } from '@/features/ui/components/bootstrap-5/dropdown-menu'
  11. import Button from '@/features/ui/components/bootstrap-5/button'
  12. import { ButtonGroup } from 'react-bootstrap'
  13. export const Sizes = () => {
  14. const { t } = useTranslation()
  15. const sizes = {
  16. Large: 'lg',
  17. Regular: undefined,
  18. Small: 'sm',
  19. } as const
  20. const variants = ['primary', 'secondary', 'danger'] as const
  21. return Object.entries(sizes).map(([label, size]) => (
  22. <Fragment key={`${label}-${size}`}>
  23. <h4>{label}</h4>
  24. <div style={{ display: 'inline-flex', gap: '10px' }}>
  25. {variants.map(variant => (
  26. <Dropdown key={variant} as={ButtonGroup}>
  27. <Button variant={variant} size={size}>
  28. Split Button
  29. </Button>
  30. <DropdownToggle
  31. split
  32. variant={variant}
  33. id={`split-btn-${variant}-${size}`}
  34. size={size}
  35. aria-label={t('expand')}
  36. />
  37. <DropdownMenu>
  38. <DropdownHeader>Header</DropdownHeader>
  39. <DropdownItem as="button">Action 1</DropdownItem>
  40. <DropdownItem as="button">Action 2</DropdownItem>
  41. <DropdownItem as="button">Action 3</DropdownItem>
  42. </DropdownMenu>
  43. </Dropdown>
  44. ))}
  45. </div>
  46. </Fragment>
  47. ))
  48. }
  49. const meta: Meta<typeof Dropdown> = {
  50. title: 'Shared/Components/SplitButton',
  51. component: Dropdown,
  52. args: {
  53. align: { sm: 'start' },
  54. },
  55. }
  56. export default meta